mirror of
https://github.com/jessicanataliagta/PSPRecomp
synced 2026-10-02 10:11:56 -04:00
568c95072d
fixed severe audio slowdown on the news report at begin of the game
1237 lines
59 KiB
C++
1237 lines
59 KiB
C++
// AUTO-GENERATED by profiles/vcs/tools/build_tier2_superblocks.py.
|
|
// Tier-2 SUPERBLOCK V4 150FPS cluster: boundary
|
|
#include "vcs_tier2_superblocks.hpp"
|
|
#include "psprecomp/runtime.hpp"
|
|
#include "generated_units.hpp"
|
|
#include "vcs_fast_paths.hpp"
|
|
#include "vcs_tier2_direct_memory.hpp"
|
|
|
|
#include <cstdint>
|
|
|
|
namespace vcs {
|
|
using namespace psprecomp;
|
|
|
|
void tier2_superblock_boundary(psprecomp::Runtime &rt,
|
|
psprecomp::AllegrexContext &ctx,
|
|
psprecomp::GuestMemory::AotFastView &aot_mem,
|
|
std::uint32_t entry_pc) {
|
|
tier2_detail::SampleScope tier2_scope(Tier2ClusterId::Boundary);
|
|
auto &tier2_stats = tier2_scope.stats();
|
|
Tier2DirectMemoryView tier2_mem(rt.memory().direct_fastmem_base_address());
|
|
constexpr std::uint32_t kTier2ReturnCapacity = 32u;
|
|
std::uint32_t tier2_pending_transfers = 0u;
|
|
std::uint32_t tier2_return_depth = 0u;
|
|
std::uint32_t tier2_return_pc[kTier2ReturnCapacity];
|
|
std::uint32_t tier2_return_unit[kTier2ReturnCapacity];
|
|
std::uint32_t tier2_return_pending_base[kTier2ReturnCapacity];
|
|
std::uint32_t tier2_resume_pc = 0u;
|
|
std::uint32_t tier2_resume_unit = 0u;
|
|
std::uint32_t jump_target = 0u;
|
|
std::uint32_t local_pc = 0u;
|
|
std::uint32_t local_transfers = 0u;
|
|
std::uint32_t entry_id = 0u;
|
|
std::uint32_t tier2_gpr_4 = ctx.gpr[4];
|
|
std::uint32_t tier2_gpr_5 = ctx.gpr[5];
|
|
std::uint32_t tier2_gpr_6 = ctx.gpr[6];
|
|
std::uint32_t tier2_gpr_17 = ctx.gpr[17];
|
|
std::uint32_t tier2_gpr_7 = ctx.gpr[7];
|
|
std::uint32_t tier2_gpr_29 = ctx.gpr[29];
|
|
bool tier2_gpr_shadow_valid = true;
|
|
#define TIER2_GPR_SYNC_OUT() do { if (tier2_gpr_shadow_valid) { ctx.gpr[4] = tier2_gpr_4; ctx.gpr[5] = tier2_gpr_5; ctx.gpr[6] = tier2_gpr_6; ctx.gpr[17] = tier2_gpr_17; ctx.gpr[7] = tier2_gpr_7; ctx.gpr[29] = tier2_gpr_29; } } while (false)
|
|
#define TIER2_GPR_SYNC_IN() do { if (tier2_gpr_shadow_valid) { tier2_gpr_4 = ctx.gpr[4]; tier2_gpr_5 = ctx.gpr[5]; tier2_gpr_6 = ctx.gpr[6]; tier2_gpr_17 = ctx.gpr[17]; tier2_gpr_7 = ctx.gpr[7]; tier2_gpr_29 = ctx.gpr[29]; } } while (false)
|
|
#define TIER2_GPR_BEFORE_COLD() do { TIER2_GPR_SYNC_OUT(); tier2_gpr_shadow_valid = false; } while (false)
|
|
|
|
auto tier2_complete_shadow = [&](std::uint32_t count) -> bool {
|
|
TIER2_GPR_SYNC_OUT();
|
|
const bool same = rt.tier2_complete_fused_transfers(ctx, count);
|
|
if (!same) tier2_gpr_shadow_valid = false;
|
|
return same;
|
|
};
|
|
|
|
#define TIER2_SB_RETURN() do { TIER2_GPR_SYNC_OUT(); tier2_scope.finish(); /* Unwind every logical invoke_chained_direct frame in true LIFO order. Tail frames created inside a fused JAL unwind before that JAL; outer JAL frames are also released after context invalidation. */ while (tier2_return_depth != 0u) { std::uint32_t tier2_base_ = tier2_return_pending_base[tier2_return_depth - 1u]; if (tier2_base_ > tier2_pending_transfers) { ++tier2_stats.fallbacks; tier2_base_ = tier2_pending_transfers; } const std::uint32_t tier2_tail_count_ = tier2_pending_transfers - tier2_base_; tier2_pending_transfers = tier2_base_; if (tier2_tail_count_ != 0u) (void)tier2_complete_shadow(tier2_tail_count_); --tier2_return_depth; (void)tier2_complete_shadow(1u); } if (tier2_pending_transfers != 0u) { (void)tier2_complete_shadow(tier2_pending_transfers); tier2_pending_transfers = 0u; } return; } while (false)
|
|
|
|
goto TIER2_ENTRY_DISPATCH;
|
|
|
|
TIER2_FUSED_RETURN_DISPATCH:
|
|
switch (tier2_resume_pc) {
|
|
case 0x0895BF3Cu: goto SB_L_0895BF3C;
|
|
case 0x0895BF5Cu: goto SB_L_0895BF5C;
|
|
case 0x0895BF7Cu: goto SB_L_0895BF7C;
|
|
case 0x0895BF88u: goto SB_L_0895BF88;
|
|
case 0x0895BFBCu: goto SB_L_0895BFBC;
|
|
case 0x0895C000u: goto SB_L_0895C000;
|
|
case 0x0895C01Cu: goto SB_L_0895C01C;
|
|
case 0x0895C044u: goto SB_L_0895C044;
|
|
case 0x0895C04Cu: goto SB_L_0895C04C;
|
|
case 0x0895C058u: goto SB_L_0895C058;
|
|
case 0x0895C064u: goto SB_L_0895C064;
|
|
case 0x0895C074u: goto SB_L_0895C074;
|
|
case 0x0895C080u: goto SB_L_0895C080;
|
|
case 0x0895C08Cu: goto SB_L_0895C08C;
|
|
case 0x0895C098u: goto SB_L_0895C098;
|
|
case 0x0895C0A4u: goto SB_L_0895C0A4;
|
|
case 0x0895C0A8u: goto SB_L_0895C0A8;
|
|
case 0x0895C118u: goto SB_L_0895C118;
|
|
case 0x0895C1B4u: goto SB_L_0895C1B4;
|
|
case 0x0895C1D4u: goto SB_L_0895C1D4;
|
|
case 0x0895C1E0u: goto SB_L_0895C1E0;
|
|
case 0x0895C1FCu: goto SB_L_0895C1FC;
|
|
case 0x0895C208u: goto SB_L_0895C208;
|
|
case 0x0895C214u: goto SB_L_0895C214;
|
|
case 0x0895C220u: goto SB_L_0895C220;
|
|
case 0x0895C244u: goto SB_L_0895C244;
|
|
case 0x0895C28Cu: goto SB_L_0895C28C;
|
|
case 0x0895C2A8u: goto SB_L_0895C2A8;
|
|
case 0x0895C2C0u: goto SB_L_0895C2C0;
|
|
case 0x0895C2C8u: goto SB_L_0895C2C8;
|
|
case 0x0895C318u: goto SB_L_0895C318;
|
|
case 0x0895C324u: goto SB_L_0895C324;
|
|
case 0x0895C34Cu: goto SB_L_0895C34C;
|
|
case 0x0895C54Cu: goto SB_L_0895C54C;
|
|
case 0x0895C564u: goto SB_L_0895C564;
|
|
case 0x0895C570u: goto SB_L_0895C570;
|
|
case 0x0895C640u: goto SB_L_0895C640;
|
|
case 0x0895C658u: goto SB_L_0895C658;
|
|
case 0x0895C694u: goto SB_L_0895C694;
|
|
case 0x0895C6B8u: goto SB_L_0895C6B8;
|
|
case 0x0895C6C4u: goto SB_L_0895C6C4;
|
|
case 0x0895C6D0u: goto SB_L_0895C6D0;
|
|
case 0x0895C6DCu: goto SB_L_0895C6DC;
|
|
case 0x0895C6E4u: goto SB_L_0895C6E4;
|
|
case 0x0895C6F0u: goto SB_L_0895C6F0;
|
|
case 0x0895C6FCu: goto SB_L_0895C6FC;
|
|
case 0x0895C708u: goto SB_L_0895C708;
|
|
case 0x0895C710u: goto SB_L_0895C710;
|
|
case 0x0895C734u: goto SB_L_0895C734;
|
|
case 0x0895C748u: goto SB_L_0895C748;
|
|
case 0x0895C760u: goto SB_L_0895C760;
|
|
case 0x0895C764u: goto SB_L_0895C764;
|
|
case 0x0895C800u: goto SB_L_0895C800;
|
|
case 0x0895C848u: goto SB_L_0895C848;
|
|
case 0x0895C864u: goto SB_L_0895C864;
|
|
case 0x0895C868u: goto SB_L_0895C868;
|
|
case 0x0895C878u: goto SB_L_0895C878;
|
|
case 0x0895C884u: goto SB_L_0895C884;
|
|
case 0x0895C88Cu: goto SB_L_0895C88C;
|
|
case 0x0895C8C4u: goto SB_L_0895C8C4;
|
|
case 0x0895C918u: goto SB_L_0895C918;
|
|
case 0x0895C934u: goto SB_L_0895C934;
|
|
default: break;
|
|
}
|
|
switch (tier2_resume_unit) {
|
|
|
|
default: break;
|
|
}
|
|
ctx.pc = tier2_resume_pc;
|
|
TIER2_SB_RETURN();
|
|
|
|
TIER2_LOCAL_DISPATCH_U0085:
|
|
if (tier2_return_depth != 0u && local_pc == tier2_return_pc[tier2_return_depth - 1u]) {
|
|
tier2_resume_pc = local_pc;
|
|
tier2_resume_unit = tier2_return_unit[tier2_return_depth - 1u];
|
|
// Match invoke_chained_direct(): when the callee has returned, ctx.pc
|
|
// already contains the caller continuation before any starvation
|
|
// boundary/accounting can run. A scheduler switch here must never see
|
|
// the stale callee PC.
|
|
ctx.pc = local_pc;
|
|
const std::uint32_t tier2_pending_base =
|
|
tier2_return_pending_base[tier2_return_depth - 1u];
|
|
bool tier2_same_context = true;
|
|
if (tier2_pending_transfers < tier2_pending_base) {
|
|
++tier2_stats.fallbacks;
|
|
ctx.pc = local_pc;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
const std::uint32_t tier2_nested_tail =
|
|
tier2_pending_transfers - tier2_pending_base;
|
|
if (tier2_nested_tail != 0u) {
|
|
tier2_pending_transfers = tier2_pending_base;
|
|
if (!tier2_complete_shadow(tier2_nested_tail))
|
|
tier2_same_context = false;
|
|
}
|
|
--tier2_return_depth;
|
|
if (!tier2_complete_shadow(1u))
|
|
tier2_same_context = false;
|
|
if (!tier2_same_context) TIER2_SB_RETURN();
|
|
goto TIER2_FUSED_RETURN_DISPATCH;
|
|
}
|
|
switch (local_pc) {
|
|
case 0x0895BF3Cu: goto SB_L_0895BF3C;
|
|
case 0x0895BF5Cu: goto SB_L_0895BF5C;
|
|
case 0x0895BF7Cu: goto SB_L_0895BF7C;
|
|
case 0x0895BF88u: goto SB_L_0895BF88;
|
|
case 0x0895BFBCu: goto SB_L_0895BFBC;
|
|
default:
|
|
ctx.pc = local_pc;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
|
|
TIER2_LOCAL_DISPATCH_U0086:
|
|
if (tier2_return_depth != 0u && local_pc == tier2_return_pc[tier2_return_depth - 1u]) {
|
|
tier2_resume_pc = local_pc;
|
|
tier2_resume_unit = tier2_return_unit[tier2_return_depth - 1u];
|
|
// Match invoke_chained_direct(): when the callee has returned, ctx.pc
|
|
// already contains the caller continuation before any starvation
|
|
// boundary/accounting can run. A scheduler switch here must never see
|
|
// the stale callee PC.
|
|
ctx.pc = local_pc;
|
|
const std::uint32_t tier2_pending_base =
|
|
tier2_return_pending_base[tier2_return_depth - 1u];
|
|
bool tier2_same_context = true;
|
|
if (tier2_pending_transfers < tier2_pending_base) {
|
|
++tier2_stats.fallbacks;
|
|
ctx.pc = local_pc;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
const std::uint32_t tier2_nested_tail =
|
|
tier2_pending_transfers - tier2_pending_base;
|
|
if (tier2_nested_tail != 0u) {
|
|
tier2_pending_transfers = tier2_pending_base;
|
|
if (!tier2_complete_shadow(tier2_nested_tail))
|
|
tier2_same_context = false;
|
|
}
|
|
--tier2_return_depth;
|
|
if (!tier2_complete_shadow(1u))
|
|
tier2_same_context = false;
|
|
if (!tier2_same_context) TIER2_SB_RETURN();
|
|
goto TIER2_FUSED_RETURN_DISPATCH;
|
|
}
|
|
switch (local_pc) {
|
|
case 0x0895C000u: goto SB_L_0895C000;
|
|
case 0x0895C01Cu: goto SB_L_0895C01C;
|
|
case 0x0895C044u: goto SB_L_0895C044;
|
|
case 0x0895C04Cu: goto SB_L_0895C04C;
|
|
case 0x0895C058u: goto SB_L_0895C058;
|
|
case 0x0895C064u: goto SB_L_0895C064;
|
|
case 0x0895C074u: goto SB_L_0895C074;
|
|
case 0x0895C080u: goto SB_L_0895C080;
|
|
case 0x0895C08Cu: goto SB_L_0895C08C;
|
|
case 0x0895C098u: goto SB_L_0895C098;
|
|
case 0x0895C0A4u: goto SB_L_0895C0A4;
|
|
case 0x0895C0A8u: goto SB_L_0895C0A8;
|
|
case 0x0895C118u: goto SB_L_0895C118;
|
|
case 0x0895C1B4u: goto SB_L_0895C1B4;
|
|
case 0x0895C1D4u: goto SB_L_0895C1D4;
|
|
case 0x0895C1E0u: goto SB_L_0895C1E0;
|
|
case 0x0895C1FCu: goto SB_L_0895C1FC;
|
|
case 0x0895C208u: goto SB_L_0895C208;
|
|
case 0x0895C214u: goto SB_L_0895C214;
|
|
case 0x0895C220u: goto SB_L_0895C220;
|
|
case 0x0895C244u: goto SB_L_0895C244;
|
|
case 0x0895C28Cu: goto SB_L_0895C28C;
|
|
case 0x0895C2A8u: goto SB_L_0895C2A8;
|
|
case 0x0895C2C0u: goto SB_L_0895C2C0;
|
|
case 0x0895C2C8u: goto SB_L_0895C2C8;
|
|
case 0x0895C318u: goto SB_L_0895C318;
|
|
case 0x0895C324u: goto SB_L_0895C324;
|
|
case 0x0895C34Cu: goto SB_L_0895C34C;
|
|
case 0x0895C54Cu: goto SB_L_0895C54C;
|
|
case 0x0895C564u: goto SB_L_0895C564;
|
|
case 0x0895C570u: goto SB_L_0895C570;
|
|
case 0x0895C640u: goto SB_L_0895C640;
|
|
case 0x0895C658u: goto SB_L_0895C658;
|
|
case 0x0895C694u: goto SB_L_0895C694;
|
|
case 0x0895C6B8u: goto SB_L_0895C6B8;
|
|
case 0x0895C6C4u: goto SB_L_0895C6C4;
|
|
case 0x0895C6D0u: goto SB_L_0895C6D0;
|
|
case 0x0895C6DCu: goto SB_L_0895C6DC;
|
|
case 0x0895C6E4u: goto SB_L_0895C6E4;
|
|
case 0x0895C6F0u: goto SB_L_0895C6F0;
|
|
case 0x0895C6FCu: goto SB_L_0895C6FC;
|
|
case 0x0895C708u: goto SB_L_0895C708;
|
|
case 0x0895C710u: goto SB_L_0895C710;
|
|
case 0x0895C734u: goto SB_L_0895C734;
|
|
case 0x0895C748u: goto SB_L_0895C748;
|
|
case 0x0895C760u: goto SB_L_0895C760;
|
|
case 0x0895C764u: goto SB_L_0895C764;
|
|
case 0x0895C800u: goto SB_L_0895C800;
|
|
case 0x0895C848u: goto SB_L_0895C848;
|
|
case 0x0895C864u: goto SB_L_0895C864;
|
|
case 0x0895C868u: goto SB_L_0895C868;
|
|
case 0x0895C878u: goto SB_L_0895C878;
|
|
case 0x0895C884u: goto SB_L_0895C884;
|
|
case 0x0895C88Cu: goto SB_L_0895C88C;
|
|
case 0x0895C8C4u: goto SB_L_0895C8C4;
|
|
case 0x0895C918u: goto SB_L_0895C918;
|
|
case 0x0895C934u: goto SB_L_0895C934;
|
|
default:
|
|
ctx.pc = local_pc;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
|
|
|
|
TIER2_ENTRY_DISPATCH:
|
|
switch (entry_pc) {
|
|
case 0x0895BF3Cu: goto SB_L_0895BF3C;
|
|
case 0x0895BF7Cu: goto SB_L_0895BF7C;
|
|
case 0x0895C000u: goto SB_L_0895C000;
|
|
case 0x0895C01Cu: goto SB_L_0895C01C;
|
|
case 0x0895C2A8u: goto SB_L_0895C2A8;
|
|
default:
|
|
ctx.pc = entry_pc;
|
|
++tier2_stats.fallbacks;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
|
|
// TIER2_GPR_BODY_BEGIN
|
|
SB_L_0895BF3C:
|
|
tier2_gpr_4 = (0u | 0u);
|
|
tier2_mem.aot_store8(tier2_gpr_29 + static_cast<std::uint32_t>(120), static_cast<std::uint8_t>(tier2_gpr_4));
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
tier2_gpr_5 = (0u | 0u);
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(8)));
|
|
tier2_gpr_4 = (tier2_gpr_5 < tier2_gpr_4 ? 1u : 0u);
|
|
{ const bool branch_taken = tier2_gpr_4 == 0u;
|
|
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(104), tier2_gpr_5);
|
|
if (branch_taken) {
|
|
if (!rt.tier2_enter_fused_transfer<86u, 0x0895C2C0u>(ctx)) {
|
|
ctx.pc = 0x0895C2C0u;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
++tier2_pending_transfers;
|
|
++tier2_stats.fused_tail_edges;
|
|
goto SB_L_0895C2C0;
|
|
}
|
|
goto SB_L_0895BF5C;
|
|
}
|
|
|
|
SB_L_0895BF5C:
|
|
ctx.gpr[23] = (10752u << 16u);
|
|
ctx.gpr[20] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
ctx.gpr[21] = (256u << 16u);
|
|
ctx.gpr[21] = (ctx.gpr[21] + static_cast<std::uint32_t>(-1));
|
|
ctx.gpr[22] = (2560u << 16u);
|
|
ctx.gpr[20] = (ctx.gpr[20] + static_cast<std::uint32_t>(72));
|
|
tier2_gpr_4 = (tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(108), tier2_gpr_4);
|
|
goto SB_L_0895BF7C;
|
|
|
|
SB_L_0895BF7C:
|
|
ctx.gpr[18] = (ctx.gpr[20] | 0u);
|
|
{ const bool branch_taken = ctx.gpr[30] == 0u;
|
|
tier2_gpr_4 = (15u << 16u);
|
|
if (branch_taken) {
|
|
if (!rt.tier2_enter_fused_transfer<86u, 0x0895C01Cu>(ctx)) {
|
|
ctx.pc = 0x0895C01Cu;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
++tier2_pending_transfers;
|
|
++tier2_stats.fused_tail_edges;
|
|
goto SB_L_0895C01C;
|
|
}
|
|
goto SB_L_0895BF88;
|
|
}
|
|
|
|
SB_L_0895BF88:
|
|
tier2_gpr_5 = (ctx.gpr[30] >> 8u);
|
|
tier2_gpr_4 = (tier2_gpr_5 & tier2_gpr_4);
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(108)));
|
|
tier2_gpr_6 = (4096u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_5 + static_cast<std::uint32_t>(20), tier2_gpr_4);
|
|
tier2_gpr_4 = (tier2_gpr_4 | tier2_gpr_6);
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
tier2_gpr_4 = (0u | 0u);
|
|
ctx.gpr[2] = (0u | 0u);
|
|
goto SB_L_0895BFBC;
|
|
|
|
SB_L_0895BFBC:
|
|
tier2_gpr_5 = (ctx.gpr[20] + tier2_gpr_4);
|
|
tier2_gpr_5 = (tier2_mem.aot_load8(tier2_gpr_5 + static_cast<std::uint32_t>(40)));
|
|
tier2_gpr_6 = (ctx.gpr[2] | ctx.gpr[23]);
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_6 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_6, &tier2_old_pointer);
|
|
tier2_gpr_7 = tier2_old_pointer; }
|
|
tier2_gpr_7 = (tier2_gpr_5 << 4u);
|
|
tier2_gpr_7 = (tier2_gpr_7 - tier2_gpr_5);
|
|
tier2_gpr_7 = (tier2_gpr_7 - tier2_gpr_5);
|
|
tier2_gpr_5 = (tier2_gpr_7 - tier2_gpr_5);
|
|
tier2_gpr_5 = (tier2_gpr_5 << 2u);
|
|
tier2_gpr_5 = (ctx.gpr[30] + tier2_gpr_5);
|
|
tier2_gpr_5 = (tier2_gpr_5 & ctx.gpr[21]);
|
|
tier2_gpr_5 = (tier2_gpr_5 | ctx.gpr[22]);
|
|
tier2_mem.aot_store32(tier2_gpr_6 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
ctx.pc = 0x0895C000u; TIER2_SB_RETURN();
|
|
SB_L_0895C000:
|
|
tier2_gpr_5 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(1));
|
|
tier2_gpr_5 = (tier2_gpr_4 < static_cast<std::uint32_t>(8) ? 1u : 0u);
|
|
{ const bool branch_taken = tier2_gpr_5 != 0u;
|
|
ctx.gpr[2] = (ctx.gpr[2] + static_cast<std::uint32_t>(12));
|
|
if (branch_taken) {
|
|
if (!rt.tier2_enter_fused_transfer<85u, 0x0895BFBCu>(ctx)) {
|
|
ctx.pc = 0x0895BFBCu;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
++tier2_pending_transfers;
|
|
++tier2_stats.fused_tail_edges;
|
|
goto SB_L_0895BFBC;
|
|
}
|
|
goto SB_L_0895C01C;
|
|
}
|
|
|
|
SB_L_0895C01C:
|
|
tier2_gpr_4 = (tier2_mem.aot_load16(ctx.gpr[18] + static_cast<std::uint32_t>(6)));
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(92)));
|
|
ctx.gpr[19] = (0u | 0u);
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_5 + static_cast<std::uint32_t>(12)));
|
|
tier2_gpr_4 = (tier2_gpr_4 << 2u);
|
|
tier2_gpr_4 = (tier2_gpr_5 + tier2_gpr_4);
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(0)));
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(0)));
|
|
if (tier2_gpr_4 == 0u) {
|
|
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(132), ctx.gpr[21]);
|
|
goto SB_L_0895C04C;
|
|
}
|
|
goto SB_L_0895C044;
|
|
|
|
SB_L_0895C044:
|
|
ctx.gpr[19] = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(0)));
|
|
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(132), ctx.gpr[21]);
|
|
goto SB_L_0895C04C;
|
|
|
|
SB_L_0895C04C:
|
|
ctx.gpr[21] = (ctx.gpr[16] | 0u);
|
|
ctx.gpr[31] = (0x0895C058u);
|
|
tier2_gpr_4 = (ctx.gpr[21] | 0u);
|
|
TIER2_GPR_SYNC_OUT();
|
|
psprecomp::recomp_unit_0206_entry(rt, ctx, 498u, aot_mem);
|
|
TIER2_GPR_SYNC_IN();
|
|
if (!rt.account_inlined_generated_leaf(ctx)) {
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
if (ctx.pc == 0x0895C058u) goto SB_L_0895C058;
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C058:
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(ctx.gpr[2] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[31] = (0x0895C064u);
|
|
tier2_gpr_4 = (ctx.gpr[21] | 0u);
|
|
TIER2_GPR_SYNC_OUT();
|
|
psprecomp::recomp_unit_0206_entry(rt, ctx, 499u, aot_mem);
|
|
TIER2_GPR_SYNC_IN();
|
|
if (!rt.account_inlined_generated_leaf(ctx)) {
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
if (ctx.pc == 0x0895C064u) goto SB_L_0895C064;
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C064:
|
|
tier2_gpr_5 = (ctx.gpr[2] & 2u);
|
|
tier2_gpr_4 = (0u | 1u);
|
|
{ const bool branch_taken = tier2_gpr_5 == 0u;
|
|
ctx.gpr[21] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(132)));
|
|
if (branch_taken) {
|
|
goto SB_L_0895C0A4;
|
|
}
|
|
goto SB_L_0895C074;
|
|
}
|
|
|
|
SB_L_0895C074:
|
|
tier2_gpr_5 = (tier2_mem.aot_load8(ctx.gpr[28] + static_cast<std::uint32_t>(-17675)));
|
|
{ const bool branch_taken = tier2_gpr_5 != 0u;
|
|
tier2_gpr_5 = (21760u << 16u);
|
|
if (branch_taken) {
|
|
goto SB_L_0895C0A8;
|
|
}
|
|
goto SB_L_0895C080;
|
|
}
|
|
|
|
SB_L_0895C080:
|
|
tier2_gpr_5 = (tier2_mem.aot_load8(ctx.gpr[28] + static_cast<std::uint32_t>(-19663)));
|
|
{ const bool branch_taken = tier2_gpr_5 != 0u;
|
|
tier2_gpr_5 = (21760u << 16u);
|
|
if (branch_taken) {
|
|
goto SB_L_0895C0A8;
|
|
}
|
|
goto SB_L_0895C08C;
|
|
}
|
|
|
|
SB_L_0895C08C:
|
|
tier2_gpr_5 = (tier2_mem.aot_load8(ctx.gpr[28] + static_cast<std::uint32_t>(-17674)));
|
|
{ const bool branch_taken = tier2_gpr_5 == 0u;
|
|
tier2_mem.aot_store8(tier2_gpr_29 + static_cast<std::uint32_t>(120), static_cast<std::uint8_t>(tier2_gpr_4));
|
|
if (branch_taken) {
|
|
goto SB_L_0895C0A4;
|
|
}
|
|
goto SB_L_0895C098;
|
|
}
|
|
|
|
SB_L_0895C098:
|
|
tier2_gpr_7 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
{ const bool branch_taken = 0u == 0u;
|
|
tier2_gpr_7 = (tier2_mem.aot_load32(tier2_gpr_7 + static_cast<std::uint32_t>(8)));
|
|
if (branch_taken) {
|
|
goto SB_L_0895C2A8;
|
|
}
|
|
goto SB_L_0895C0A4;
|
|
}
|
|
|
|
SB_L_0895C0A4:
|
|
tier2_gpr_5 = (21760u << 16u);
|
|
goto SB_L_0895C0A8;
|
|
|
|
SB_L_0895C0A8:
|
|
tier2_gpr_6 = (ctx.gpr[16] & ctx.gpr[21]);
|
|
tier2_gpr_5 = (tier2_gpr_6 | tier2_gpr_5);
|
|
tier2_gpr_7 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_mem.aot_store32(tier2_gpr_7 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(4));
|
|
tier2_gpr_7 = (22528u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_5);
|
|
ctx.gpr[8] = (ctx.gpr[16] >> 24u);
|
|
tier2_gpr_7 = (ctx.gpr[8] | tier2_gpr_7);
|
|
tier2_mem.aot_store32(tier2_gpr_5 + static_cast<std::uint32_t>(0), tier2_gpr_7);
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_gpr_7 = (22016u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(4));
|
|
tier2_mem.aot_store32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_5);
|
|
tier2_gpr_7 = (tier2_gpr_6 | tier2_gpr_7);
|
|
tier2_mem.aot_store32(tier2_gpr_5 + static_cast<std::uint32_t>(0), tier2_gpr_7);
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_gpr_7 = (22272u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(4));
|
|
tier2_mem.aot_store32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_5);
|
|
tier2_gpr_6 = (tier2_gpr_6 | tier2_gpr_7);
|
|
tier2_mem.aot_store32(tier2_gpr_5 + static_cast<std::uint32_t>(0), tier2_gpr_6);
|
|
tier2_gpr_5 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
{ const bool branch_taken = ctx.gpr[19] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_0895C1D4;
|
|
}
|
|
goto SB_L_0895C118;
|
|
}
|
|
|
|
SB_L_0895C118:
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(8)));
|
|
tier2_gpr_5 = (static_cast<std::uint32_t>(static_cast<std::int32_t>(static_cast<std::int8_t>(tier2_mem.aot_load8(ctx.gpr[19] + static_cast<std::uint32_t>(10))))));
|
|
tier2_gpr_5 = (tier2_gpr_5 & 63u);
|
|
tier2_gpr_4 = (tier2_gpr_4 << (tier2_gpr_5 & 31u));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_gpr_4);
|
|
ctx.fpr[13] = static_cast<float>(static_cast<std::int32_t>(std::bit_cast<std::uint32_t>(ctx.fpr[13])));
|
|
{ const float fs = ctx.fpr[12]; const float ft = ctx.fpr[13]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[12] = std::bit_cast<float>(0x7FC00000u); else ctx.fpr[12] = fs * ft; }
|
|
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(8412)));
|
|
{ const float fs = ctx.fpr[12]; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[12] = std::bit_cast<float>(0x7FC00000u); else ctx.fpr[12] = fs * ft; }
|
|
tier2_gpr_4 = (53248u << 16u);
|
|
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
tier2_gpr_5 = (tier2_gpr_5 >> 8u);
|
|
tier2_gpr_4 = (tier2_gpr_5 | tier2_gpr_4);
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(12)));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(16)));
|
|
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
tier2_gpr_5 = (tier2_gpr_5 >> 8u);
|
|
tier2_gpr_6 = (18432u << 16u);
|
|
tier2_gpr_7 = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
|
|
tier2_gpr_7 = (tier2_gpr_7 >> 8u);
|
|
tier2_gpr_6 = (tier2_gpr_7 | tier2_gpr_6);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_6);
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_gpr_6 = (18688u << 16u);
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(4));
|
|
tier2_mem.aot_store32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4);
|
|
tier2_gpr_5 = (tier2_gpr_5 | tier2_gpr_6);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_4 = (ctx.gpr[19] | 0u);
|
|
ctx.gpr[31] = (0x0895C1B4u);
|
|
ctx.fpr[12] = std::bit_cast<float>(std::bit_cast<std::uint32_t>(ctx.fpr[20]));
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0199_entry, 199u, 283u, 0x08B217D4u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C1B4u) goto SB_L_0895C1B4;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C1B4:
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
ctx.gpr[19] = (tier2_mem.aot_load16(ctx.gpr[18] + static_cast<std::uint32_t>(4)));
|
|
ctx.gpr[19] = (ctx.gpr[19] + static_cast<std::uint32_t>(2));
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(64)));
|
|
tier2_gpr_7 = (tier2_gpr_4 + tier2_gpr_5);
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(0)));
|
|
{ const bool branch_taken = 0u == 0u;
|
|
tier2_gpr_7 = (tier2_gpr_7 + tier2_gpr_4);
|
|
if (branch_taken) {
|
|
goto SB_L_0895C1FC;
|
|
}
|
|
goto SB_L_0895C1D4;
|
|
}
|
|
|
|
SB_L_0895C1D4:
|
|
tier2_gpr_4 = (ctx.gpr[19] | 0u);
|
|
ctx.gpr[31] = (0x0895C1E0u);
|
|
ctx.fpr[12] = std::bit_cast<float>(std::bit_cast<std::uint32_t>(ctx.fpr[20]));
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0199_entry, 199u, 283u, 0x08B217D4u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C1E0u) goto SB_L_0895C1E0;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C1E0:
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
ctx.gpr[19] = (tier2_mem.aot_load16(ctx.gpr[18] + static_cast<std::uint32_t>(4)));
|
|
ctx.gpr[19] = (ctx.gpr[19] + static_cast<std::uint32_t>(2));
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(64)));
|
|
tier2_gpr_7 = (tier2_gpr_4 + tier2_gpr_5);
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(0)));
|
|
tier2_gpr_7 = (tier2_gpr_7 + tier2_gpr_4);
|
|
goto SB_L_0895C1FC;
|
|
|
|
SB_L_0895C1FC:
|
|
tier2_gpr_4 = (tier2_mem.aot_load8(tier2_gpr_29 + static_cast<std::uint32_t>(128)));
|
|
if (tier2_gpr_4 == 0u) {
|
|
ctx.gpr[8] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
goto SB_L_0895C220;
|
|
}
|
|
goto SB_L_0895C208;
|
|
|
|
SB_L_0895C208:
|
|
tier2_gpr_4 = (tier2_gpr_7 | 0u);
|
|
ctx.gpr[31] = (0x0895C214u);
|
|
tier2_gpr_5 = (ctx.gpr[19] | 0u);
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0129_entry, 129u, 246u, 0x08A09B2Cu>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C214u) goto SB_L_0895C214;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C214:
|
|
tier2_gpr_7 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
{ const bool branch_taken = 0u == 0u;
|
|
tier2_gpr_7 = (tier2_mem.aot_load32(tier2_gpr_7 + static_cast<std::uint32_t>(8)));
|
|
if (branch_taken) {
|
|
goto SB_L_0895C2A8;
|
|
}
|
|
goto SB_L_0895C220;
|
|
}
|
|
|
|
SB_L_0895C220:
|
|
tier2_gpr_4 = (4608u << 16u);
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(ctx.gpr[8] + static_cast<std::uint32_t>(4)));
|
|
tier2_gpr_4 = (tier2_gpr_5 | tier2_gpr_4);
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_mem.aot_store32(tier2_gpr_5 + static_cast<std::uint32_t>(0), tier2_gpr_4);
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(4));
|
|
{ const bool branch_taken = tier2_gpr_7 == 0u;
|
|
tier2_mem.aot_store32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4);
|
|
if (branch_taken) {
|
|
goto SB_L_0895C28C;
|
|
}
|
|
goto SB_L_0895C244;
|
|
}
|
|
|
|
SB_L_0895C244:
|
|
tier2_gpr_5 = (15u << 16u);
|
|
tier2_gpr_6 = (tier2_gpr_7 >> 8u);
|
|
tier2_gpr_5 = (tier2_gpr_6 & tier2_gpr_5);
|
|
tier2_gpr_6 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(108)));
|
|
ctx.gpr[9] = (4096u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_6 + static_cast<std::uint32_t>(20), tier2_gpr_5);
|
|
tier2_gpr_5 = (tier2_gpr_5 | ctx.gpr[9]);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(4));
|
|
tier2_gpr_5 = (256u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4);
|
|
tier2_gpr_6 = (tier2_gpr_7 & ctx.gpr[21]);
|
|
tier2_gpr_5 = (tier2_gpr_6 | tier2_gpr_5);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
goto SB_L_0895C28C;
|
|
|
|
SB_L_0895C28C:
|
|
tier2_gpr_5 = (1028u << 16u);
|
|
tier2_gpr_5 = (ctx.gpr[19] | tier2_gpr_5);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_7 = (tier2_mem.aot_load32(ctx.gpr[8] + static_cast<std::uint32_t>(8)));
|
|
goto SB_L_0895C2A8;
|
|
|
|
SB_L_0895C2A8:
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(104)));
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[20] = (ctx.gpr[20] + static_cast<std::uint32_t>(48));
|
|
tier2_gpr_5 = (tier2_gpr_4 < tier2_gpr_7 ? 1u : 0u);
|
|
{ const bool branch_taken = tier2_gpr_5 != 0u;
|
|
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(104), tier2_gpr_4);
|
|
if (branch_taken) {
|
|
if (!rt.tier2_enter_fused_transfer<85u, 0x0895BF7Cu>(ctx)) {
|
|
ctx.pc = 0x0895BF7Cu;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
++tier2_pending_transfers;
|
|
++tier2_stats.fused_tail_edges;
|
|
goto SB_L_0895BF7C;
|
|
}
|
|
goto SB_L_0895C2C0;
|
|
}
|
|
|
|
SB_L_0895C2C0:
|
|
ctx.gpr[31] = (0x0895C2C8u);
|
|
// nop
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 671u, 0x088B7BC0u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C2C8u) goto SB_L_0895C2C8;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C2C8:
|
|
tier2_gpr_4 = (18432u << 16u);
|
|
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[20]));
|
|
tier2_gpr_5 = (tier2_gpr_5 >> 8u);
|
|
tier2_gpr_4 = (tier2_gpr_5 | tier2_gpr_4);
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
tier2_gpr_5 = (18688u << 16u);
|
|
tier2_gpr_6 = (std::bit_cast<std::uint32_t>(ctx.fpr[20]));
|
|
tier2_gpr_6 = (tier2_gpr_6 >> 8u);
|
|
tier2_gpr_5 = (tier2_gpr_6 | tier2_gpr_5);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_4 = (tier2_mem.aot_load8(tier2_gpr_29 + static_cast<std::uint32_t>(120)));
|
|
{ const bool branch_taken = tier2_gpr_4 == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_0895C934;
|
|
}
|
|
goto SB_L_0895C318;
|
|
}
|
|
|
|
SB_L_0895C318:
|
|
tier2_gpr_4 = (0u | 11u);
|
|
ctx.gpr[31] = (0x0895C324u);
|
|
tier2_gpr_5 = (0u | 0u);
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0023_entry, 23u, 179u, 0x088614B4u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C324u) goto SB_L_0895C324;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C324:
|
|
ctx.gpr[16] = (0u < ctx.gpr[2] ? 1u : 0u);
|
|
tier2_gpr_4 = (8704u << 16u);
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
tier2_gpr_4 = (0u | 11u);
|
|
ctx.gpr[31] = (0x0895C34Cu);
|
|
tier2_gpr_5 = (0u | 0u);
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0023_entry, 23u, 203u, 0x08861668u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C34Cu) goto SB_L_0895C34C;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C34C:
|
|
tier2_gpr_4 = (22016u << 16u);
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(-1));
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
tier2_gpr_5 = (22528u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(255));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (22272u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(-1));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (22528u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(-1));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (24320u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(-17664)));
|
|
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
tier2_gpr_5 = (tier2_gpr_5 >> 8u);
|
|
tier2_gpr_6 = (25344u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 | tier2_gpr_6);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(-17660)));
|
|
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
|
|
tier2_gpr_5 = (tier2_gpr_5 >> 8u);
|
|
tier2_gpr_6 = (25600u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 | tier2_gpr_6);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(-17656)));
|
|
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
tier2_gpr_5 = (tier2_gpr_5 >> 8u);
|
|
tier2_gpr_6 = (25856u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 | tier2_gpr_6);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (37120u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(-1));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (6144u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(1));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (24576u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(-17648)));
|
|
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
tier2_gpr_5 = (tier2_gpr_5 >> 8u);
|
|
tier2_gpr_6 = (26112u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 | tier2_gpr_6);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(-17644)));
|
|
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
|
|
tier2_gpr_5 = (tier2_gpr_5 >> 8u);
|
|
tier2_gpr_6 = (26368u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 | tier2_gpr_6);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(-17640)));
|
|
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
tier2_gpr_5 = (tier2_gpr_5 >> 8u);
|
|
tier2_gpr_6 = (26624u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 | tier2_gpr_6);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (37888u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(-1));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (6400u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(1));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (49152u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(2));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (49408u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(256));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_4 = (tier2_mem.aot_load8(ctx.gpr[28] + static_cast<std::uint32_t>(-17676)));
|
|
{ const bool branch_taken = tier2_gpr_4 == 0u;
|
|
tier2_mem.aot_store8(tier2_gpr_29 + static_cast<std::uint32_t>(129), static_cast<std::uint8_t>(ctx.gpr[16]));
|
|
if (branch_taken) {
|
|
goto SB_L_0895C564;
|
|
}
|
|
goto SB_L_0895C54C;
|
|
}
|
|
|
|
SB_L_0895C54C:
|
|
tier2_gpr_4 = (8960u << 16u);
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
goto SB_L_0895C564;
|
|
|
|
SB_L_0895C564:
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(-17680)));
|
|
{ const bool branch_taken = tier2_gpr_4 == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_0895C640;
|
|
}
|
|
goto SB_L_0895C570;
|
|
}
|
|
|
|
SB_L_0895C570:
|
|
tier2_gpr_4 = (7680u << 16u);
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(1));
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
tier2_gpr_5 = (49664u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (49920u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (51968u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_6 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(-17680)));
|
|
tier2_gpr_7 = (tier2_gpr_6 >> 8u);
|
|
ctx.gpr[8] = (256u << 16u);
|
|
ctx.gpr[8] = (ctx.gpr[8] + static_cast<std::uint32_t>(-1));
|
|
tier2_gpr_6 = (tier2_gpr_6 & ctx.gpr[8]);
|
|
ctx.gpr[8] = (40960u << 16u);
|
|
tier2_gpr_6 = (tier2_gpr_6 | ctx.gpr[8]);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_6);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_6 = (255u << 16u);
|
|
tier2_gpr_6 = (tier2_gpr_7 & tier2_gpr_6);
|
|
tier2_gpr_7 = (43008u << 16u);
|
|
tier2_gpr_7 = (tier2_gpr_7 + static_cast<std::uint32_t>(64));
|
|
tier2_gpr_6 = (tier2_gpr_6 | tier2_gpr_7);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_6);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_6 = (47104u << 16u);
|
|
tier2_gpr_6 = (tier2_gpr_6 + static_cast<std::uint32_t>(1542));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_6);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
goto SB_L_0895C640;
|
|
|
|
SB_L_0895C640:
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
ctx.gpr[21] = (0u | 0u);
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(8)));
|
|
tier2_gpr_4 = (ctx.gpr[21] < tier2_gpr_4 ? 1u : 0u);
|
|
{ const bool branch_taken = tier2_gpr_4 == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_0895C878;
|
|
}
|
|
goto SB_L_0895C658;
|
|
}
|
|
|
|
SB_L_0895C658:
|
|
ctx.gpr[19] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
ctx.gpr[19] = (ctx.gpr[19] + static_cast<std::uint32_t>(72));
|
|
tier2_gpr_4 = (16128u << 16u);
|
|
ctx.fpr[22] = std::bit_cast<float>(tier2_gpr_4);
|
|
ctx.fpr[24] = std::bit_cast<float>(0u);
|
|
tier2_gpr_4 = (17279u << 16u);
|
|
ctx.fpr[26] = std::bit_cast<float>(tier2_gpr_4);
|
|
ctx.gpr[22] = (1u << 16u);
|
|
ctx.gpr[22] = (ctx.gpr[22] + static_cast<std::uint32_t>(257));
|
|
ctx.gpr[20] = (256u << 16u);
|
|
ctx.gpr[20] = (ctx.gpr[20] + static_cast<std::uint32_t>(-1));
|
|
ctx.gpr[30] = (57344u << 16u);
|
|
ctx.gpr[23] = (57600u << 16u);
|
|
tier2_gpr_4 = (tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(108), tier2_gpr_4);
|
|
goto SB_L_0895C694;
|
|
|
|
SB_L_0895C694:
|
|
ctx.gpr[18] = (ctx.gpr[19] | 0u);
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(92)));
|
|
tier2_gpr_5 = (tier2_mem.aot_load16(ctx.gpr[18] + static_cast<std::uint32_t>(6)));
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(12)));
|
|
tier2_gpr_5 = (tier2_gpr_5 << 2u);
|
|
tier2_gpr_4 = (tier2_gpr_4 + tier2_gpr_5);
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[31] = (0x0895C6B8u);
|
|
tier2_gpr_4 = (ctx.gpr[16] | 0u);
|
|
TIER2_GPR_SYNC_OUT();
|
|
psprecomp::recomp_unit_0206_entry(rt, ctx, 499u, aot_mem);
|
|
TIER2_GPR_SYNC_IN();
|
|
if (!rt.account_inlined_generated_leaf(ctx)) {
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
if (ctx.pc == 0x0895C6B8u) goto SB_L_0895C6B8;
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C6B8:
|
|
tier2_gpr_4 = (ctx.gpr[2] & 2u);
|
|
if (tier2_gpr_4 == 0u) {
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
goto SB_L_0895C864;
|
|
}
|
|
goto SB_L_0895C6C4;
|
|
|
|
SB_L_0895C6C4:
|
|
tier2_gpr_4 = (tier2_mem.aot_load8(ctx.gpr[28] + static_cast<std::uint32_t>(-19663)));
|
|
if (tier2_gpr_4 != 0u) {
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
goto SB_L_0895C864;
|
|
}
|
|
goto SB_L_0895C6D0;
|
|
|
|
SB_L_0895C6D0:
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(-17680)));
|
|
{ const bool branch_taken = tier2_gpr_4 != 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_0895C708;
|
|
}
|
|
goto SB_L_0895C6DC;
|
|
}
|
|
|
|
SB_L_0895C6DC:
|
|
ctx.gpr[31] = (0x0895C6E4u);
|
|
tier2_gpr_4 = (ctx.gpr[16] | 0u);
|
|
TIER2_GPR_SYNC_OUT();
|
|
psprecomp::recomp_unit_0206_entry(rt, ctx, 524u, aot_mem);
|
|
TIER2_GPR_SYNC_IN();
|
|
if (!rt.account_inlined_generated_leaf(ctx)) {
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
if (ctx.pc == 0x0895C6E4u) goto SB_L_0895C6E4;
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C6E4:
|
|
tier2_gpr_4 = (ctx.gpr[2] | 0u);
|
|
{ const bool branch_taken = tier2_gpr_4 != 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_0895C6FC;
|
|
}
|
|
goto SB_L_0895C6F0;
|
|
}
|
|
|
|
SB_L_0895C6F0:
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
{ const bool branch_taken = 0u == 0u;
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(8)));
|
|
if (branch_taken) {
|
|
goto SB_L_0895C868;
|
|
}
|
|
goto SB_L_0895C6FC;
|
|
}
|
|
|
|
SB_L_0895C6FC:
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[31] = (0x0895C708u);
|
|
ctx.fpr[12] = std::bit_cast<float>(std::bit_cast<std::uint32_t>(ctx.fpr[20]));
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0199_entry, 199u, 283u, 0x08B217D4u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C708u) goto SB_L_0895C708;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C708:
|
|
ctx.gpr[31] = (0x0895C710u);
|
|
tier2_gpr_4 = (ctx.gpr[16] | 0u);
|
|
TIER2_GPR_SYNC_OUT();
|
|
psprecomp::recomp_unit_0206_entry(rt, ctx, 523u, aot_mem);
|
|
TIER2_GPR_SYNC_IN();
|
|
if (!rt.account_inlined_generated_leaf(ctx)) {
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
if (ctx.pc == 0x0895C710u) goto SB_L_0895C710;
|
|
tier2_gpr_shadow_valid = false;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C710:
|
|
{ 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[12] = std::bit_cast<float>(0x7FC00000u); else ctx.fpr[12] = fs * ft; }
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(7632)));
|
|
{ const float fs = ctx.fpr[12]; const float ft = ctx.fpr[13]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[12] = std::bit_cast<float>(0x7FC00000u); else ctx.fpr[12] = fs * ft; }
|
|
ctx.fpr[13] = std::bit_cast<float>(std::bit_cast<std::uint32_t>(ctx.fpr[24]));
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[12] < ctx.fpr[13])) ? 0x00800000u : 0u);
|
|
// nop
|
|
{ const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u);
|
|
ctx.gpr[8] = (0u | 255u);
|
|
if (branch_taken) {
|
|
goto SB_L_0895C748;
|
|
}
|
|
goto SB_L_0895C734;
|
|
}
|
|
|
|
SB_L_0895C734:
|
|
ctx.fpr[13] = std::bit_cast<float>(std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= ctx.fpr[20])) ? 0x00800000u : 0u);
|
|
// nop
|
|
if (!((ctx.fcr31 & 0x00800000u) != 0u)) {
|
|
ctx.fpr[13] = std::bit_cast<float>(std::bit_cast<std::uint32_t>(ctx.fpr[20]));
|
|
goto SB_L_0895C748;
|
|
}
|
|
goto SB_L_0895C748;
|
|
|
|
SB_L_0895C748:
|
|
{ const float fs = ctx.fpr[13]; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[12] = std::bit_cast<float>(0x7FC00000u); else ctx.fpr[12] = fs * ft; }
|
|
ctx.fpr[12] = std::bit_cast<float>(ctx.fpu_float_to_word_ct<1u>(ctx.fpr[12]));
|
|
tier2_gpr_4 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
tier2_gpr_5 = (tier2_mem.aot_load8(ctx.gpr[28] + static_cast<std::uint32_t>(-17674)));
|
|
{ const bool branch_taken = tier2_gpr_5 == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_0895C764;
|
|
}
|
|
goto SB_L_0895C760;
|
|
}
|
|
|
|
SB_L_0895C760:
|
|
tier2_gpr_4 = (ctx.gpr[8] | 0u);
|
|
goto SB_L_0895C764;
|
|
|
|
SB_L_0895C764:
|
|
{ const std::int64_t product = static_cast<std::int64_t>(static_cast<std::int32_t>(tier2_gpr_4)) * static_cast<std::int64_t>(static_cast<std::int32_t>(ctx.gpr[22])); ctx.lo = static_cast<std::uint32_t>(product); ctx.hi = static_cast<std::uint32_t>(static_cast<std::uint64_t>(product) >> 32u); }
|
|
tier2_gpr_5 = (ctx.lo);
|
|
tier2_gpr_4 = (ctx.gpr[8] - tier2_gpr_4);
|
|
// nop
|
|
{ const std::int64_t product = static_cast<std::int64_t>(static_cast<std::int32_t>(tier2_gpr_4)) * static_cast<std::int64_t>(static_cast<std::int32_t>(ctx.gpr[22])); ctx.lo = static_cast<std::uint32_t>(product); ctx.hi = static_cast<std::uint32_t>(static_cast<std::uint64_t>(product) >> 32u); }
|
|
tier2_gpr_4 = (ctx.lo);
|
|
tier2_gpr_6 = (57088u << 16u);
|
|
tier2_gpr_6 = (tier2_gpr_6 + static_cast<std::uint32_t>(170));
|
|
tier2_mem.aot_store32(ctx.gpr[16] + static_cast<std::uint32_t>(0), tier2_gpr_6);
|
|
tier2_gpr_6 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (tier2_gpr_5 & ctx.gpr[20]);
|
|
tier2_gpr_5 = (tier2_gpr_5 | ctx.gpr[30]);
|
|
tier2_mem.aot_store32(tier2_gpr_6 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_5 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_4 = (tier2_gpr_4 & ctx.gpr[20]);
|
|
tier2_gpr_4 = (tier2_gpr_4 | ctx.gpr[23]);
|
|
tier2_mem.aot_store32(tier2_gpr_5 + static_cast<std::uint32_t>(0), tier2_gpr_4);
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_gpr_5 = (tier2_gpr_4 + static_cast<std::uint32_t>(4));
|
|
tier2_mem.aot_store32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_5);
|
|
tier2_gpr_4 = (tier2_mem.aot_load16(ctx.gpr[18] + static_cast<std::uint32_t>(4)));
|
|
tier2_gpr_6 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(2));
|
|
tier2_gpr_7 = (tier2_mem.aot_load32(tier2_gpr_6 + static_cast<std::uint32_t>(64)));
|
|
tier2_gpr_7 = (tier2_gpr_6 + tier2_gpr_7);
|
|
ctx.gpr[18] = (tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[18] = (tier2_gpr_7 + ctx.gpr[18]);
|
|
tier2_gpr_7 = (4608u << 16u);
|
|
tier2_gpr_6 = (tier2_mem.aot_load32(tier2_gpr_6 + static_cast<std::uint32_t>(4)));
|
|
tier2_gpr_6 = (tier2_gpr_6 | tier2_gpr_7);
|
|
tier2_mem.aot_store32(tier2_gpr_5 + static_cast<std::uint32_t>(0), tier2_gpr_6);
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
ctx.gpr[16] = (ctx.gpr[16] + static_cast<std::uint32_t>(4));
|
|
{ const bool branch_taken = ctx.gpr[18] == 0u;
|
|
tier2_mem.aot_store32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), ctx.gpr[16]);
|
|
if (branch_taken) {
|
|
goto SB_L_0895C848;
|
|
}
|
|
goto SB_L_0895C800;
|
|
}
|
|
|
|
SB_L_0895C800:
|
|
tier2_gpr_5 = (15u << 16u);
|
|
tier2_gpr_6 = (ctx.gpr[18] >> 8u);
|
|
tier2_gpr_5 = (tier2_gpr_6 & tier2_gpr_5);
|
|
tier2_gpr_6 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(108)));
|
|
tier2_gpr_7 = (4096u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_6 + static_cast<std::uint32_t>(20), tier2_gpr_5);
|
|
tier2_gpr_5 = (tier2_gpr_5 | tier2_gpr_7);
|
|
tier2_mem.aot_store32(ctx.gpr[16] + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_17 + static_cast<std::uint32_t>(29552)));
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(4));
|
|
tier2_gpr_6 = (256u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_5);
|
|
tier2_gpr_7 = (ctx.gpr[18] & ctx.gpr[20]);
|
|
tier2_gpr_6 = (tier2_gpr_7 | tier2_gpr_6);
|
|
tier2_mem.aot_store32(tier2_gpr_5 + static_cast<std::uint32_t>(0), tier2_gpr_6);
|
|
ctx.gpr[16] = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
goto SB_L_0895C848;
|
|
|
|
SB_L_0895C848:
|
|
tier2_gpr_5 = (1028u << 16u);
|
|
tier2_gpr_4 = (tier2_gpr_4 | tier2_gpr_5);
|
|
tier2_mem.aot_store32(ctx.gpr[16] + static_cast<std::uint32_t>(0), tier2_gpr_4);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(100)));
|
|
goto SB_L_0895C864;
|
|
|
|
SB_L_0895C864:
|
|
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(8)));
|
|
goto SB_L_0895C868;
|
|
|
|
SB_L_0895C868:
|
|
ctx.gpr[21] = (ctx.gpr[21] + static_cast<std::uint32_t>(1));
|
|
tier2_gpr_4 = (ctx.gpr[21] < tier2_gpr_4 ? 1u : 0u);
|
|
{ const bool branch_taken = tier2_gpr_4 != 0u;
|
|
ctx.gpr[19] = (ctx.gpr[19] + static_cast<std::uint32_t>(48));
|
|
if (branch_taken) {
|
|
goto SB_L_0895C694;
|
|
}
|
|
goto SB_L_0895C878;
|
|
}
|
|
|
|
SB_L_0895C878:
|
|
tier2_gpr_4 = (0u | 0u);
|
|
ctx.gpr[31] = (0x0895C884u);
|
|
ctx.fpr[12] = std::bit_cast<float>(std::bit_cast<std::uint32_t>(ctx.fpr[20]));
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0199_entry, 199u, 283u, 0x08B217D4u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C884u) goto SB_L_0895C884;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C884:
|
|
ctx.gpr[31] = (0x0895C88Cu);
|
|
// nop
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0023_entry, 23u, 200u, 0x088615BCu>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C88Cu) goto SB_L_0895C88C;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C88C:
|
|
tier2_gpr_4 = (6144u << 16u);
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
tier2_gpr_5 = (6400u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (tier2_mem.aot_load8(tier2_gpr_29 + static_cast<std::uint32_t>(129)));
|
|
ctx.gpr[31] = (0x0895C8C4u);
|
|
tier2_gpr_4 = (0u | 11u);
|
|
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0023_entry, 23u, 203u, 0x08861668u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0895C8C4u) goto SB_L_0895C8C4;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_0895C8C4:
|
|
tier2_gpr_4 = (8704u << 16u);
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(1));
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
tier2_gpr_5 = (49152u << 16u);
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_5 = (49408u << 16u);
|
|
tier2_gpr_5 = (tier2_gpr_5 + static_cast<std::uint32_t>(256));
|
|
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_5);
|
|
tier2_gpr_4 = tier2_mem.aot_advance32(tier2_gpr_17 + static_cast<std::uint32_t>(29552));
|
|
tier2_gpr_4 = (tier2_mem.aot_load8(ctx.gpr[28] + static_cast<std::uint32_t>(-17676)));
|
|
{ const bool branch_taken = tier2_gpr_4 == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_0895C934;
|
|
}
|
|
goto SB_L_0895C918;
|
|
}
|
|
|
|
SB_L_0895C918:
|
|
tier2_gpr_4 = (8960u << 16u);
|
|
tier2_gpr_4 = (tier2_gpr_4 + static_cast<std::uint32_t>(1));
|
|
{ std::uint32_t tier2_old_pointer = 0u;
|
|
tier2_gpr_4 = tier2_mem.aot_append32(tier2_gpr_17 + static_cast<std::uint32_t>(29552), tier2_gpr_4, &tier2_old_pointer);
|
|
tier2_gpr_5 = tier2_old_pointer; }
|
|
goto SB_L_0895C934;
|
|
|
|
SB_L_0895C934:
|
|
ctx.gpr[2] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(96)));
|
|
{ std::uint32_t tier2_words[14]{};
|
|
if (tier2_mem.aot_try_load32_block(tier2_gpr_29 + static_cast<std::uint32_t>(136), tier2_words)) {
|
|
ctx.fpr[20] = std::bit_cast<float>(tier2_words[0]);
|
|
ctx.fpr[22] = std::bit_cast<float>(tier2_words[1]);
|
|
ctx.fpr[24] = std::bit_cast<float>(tier2_words[2]);
|
|
ctx.fpr[26] = std::bit_cast<float>(tier2_words[3]);
|
|
ctx.gpr[16] = tier2_words[4];
|
|
tier2_gpr_17 = tier2_words[5];
|
|
ctx.gpr[18] = tier2_words[6];
|
|
ctx.gpr[19] = tier2_words[7];
|
|
ctx.gpr[20] = tier2_words[8];
|
|
ctx.gpr[21] = tier2_words[9];
|
|
ctx.gpr[22] = tier2_words[10];
|
|
ctx.gpr[23] = tier2_words[11];
|
|
ctx.gpr[30] = tier2_words[12];
|
|
ctx.gpr[31] = tier2_words[13];
|
|
} else {
|
|
ctx.fpr[20] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(136)));
|
|
ctx.fpr[22] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(140)));
|
|
ctx.fpr[24] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(144)));
|
|
ctx.fpr[26] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(148)));
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(152)));
|
|
tier2_gpr_17 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(156)));
|
|
ctx.gpr[18] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(160)));
|
|
ctx.gpr[19] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(164)));
|
|
ctx.gpr[20] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(168)));
|
|
ctx.gpr[21] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(172)));
|
|
ctx.gpr[22] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(176)));
|
|
ctx.gpr[23] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(180)));
|
|
ctx.gpr[30] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(184)));
|
|
ctx.gpr[31] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(188)));
|
|
} }
|
|
jump_target = ctx.gpr[31];
|
|
tier2_gpr_29 = (tier2_gpr_29 + static_cast<std::uint32_t>(192));
|
|
local_pc = jump_target;
|
|
goto TIER2_LOCAL_DISPATCH_U0086;
|
|
// TIER2_GPR_BODY_END
|
|
|
|
#undef TIER2_SB_RETURN
|
|
#undef TIER2_GPR_BEFORE_COLD
|
|
#undef TIER2_GPR_SYNC_IN
|
|
#undef TIER2_GPR_SYNC_OUT
|
|
}
|
|
|
|
} // namespace vcs
|