Files
PSPRecomp/profiles/vcs/host/vcs_tier2_cluster_collisionloop.cpp
T
Jessica_Natalia d39586741f otimizações round 12
otimizações round 12
2026-08-18 12:34:37 -03:00

1364 lines
62 KiB
C++

// AUTO-GENERATED by profiles/vcs/tools/build_tier2_superblocks.py.
// Tier-2 SUPERBLOCK V4 150FPS cluster: collisionloop
#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_collisionloop(psprecomp::Runtime &rt,
psprecomp::AllegrexContext &ctx,
psprecomp::GuestMemory::AotFastView &aot_mem,
std::uint32_t entry_pc) {
tier2_detail::SampleScope tier2_scope(Tier2ClusterId::CollisionLoop);
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_29 = ctx.gpr[29];
std::uint32_t tier2_gpr_5 = ctx.gpr[5];
std::uint32_t tier2_gpr_18 = ctx.gpr[18];
std::uint32_t tier2_gpr_16 = ctx.gpr[16];
std::uint32_t tier2_gpr_6 = ctx.gpr[6];
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[29] = tier2_gpr_29; ctx.gpr[5] = tier2_gpr_5; ctx.gpr[18] = tier2_gpr_18; ctx.gpr[16] = tier2_gpr_16; ctx.gpr[6] = tier2_gpr_6; } } while (false)
#define TIER2_GPR_SYNC_IN() do { if (tier2_gpr_shadow_valid) { tier2_gpr_4 = ctx.gpr[4]; tier2_gpr_29 = ctx.gpr[29]; tier2_gpr_5 = ctx.gpr[5]; tier2_gpr_18 = ctx.gpr[18]; tier2_gpr_16 = ctx.gpr[16]; tier2_gpr_6 = ctx.gpr[6]; } } 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 0x0889BFC0u: goto SB_L_0889BFC0;
case 0x0889BFD8u: goto SB_L_0889BFD8;
case 0x0889BFE4u: goto SB_L_0889BFE4;
case 0x0889C000u: goto SB_L_0889C000;
case 0x0889C008u: goto SB_L_0889C008;
case 0x0889C014u: goto SB_L_0889C014;
case 0x0889C01Cu: goto SB_L_0889C01C;
case 0x0889C024u: goto SB_L_0889C024;
case 0x0889C054u: goto SB_L_0889C054;
case 0x0889C06Cu: goto SB_L_0889C06C;
case 0x0889C074u: goto SB_L_0889C074;
case 0x0889C084u: goto SB_L_0889C084;
case 0x0889C08Cu: goto SB_L_0889C08C;
case 0x0889C094u: goto SB_L_0889C094;
case 0x0889C09Cu: goto SB_L_0889C09C;
case 0x0889C0A8u: goto SB_L_0889C0A8;
case 0x0889C0B0u: goto SB_L_0889C0B0;
case 0x0889C0B8u: goto SB_L_0889C0B8;
case 0x0889C0C0u: goto SB_L_0889C0C0;
case 0x0889C0D4u: goto SB_L_0889C0D4;
case 0x0889C0E4u: goto SB_L_0889C0E4;
case 0x0889C0F0u: goto SB_L_0889C0F0;
case 0x0889C0F8u: goto SB_L_0889C0F8;
case 0x0889C114u: goto SB_L_0889C114;
case 0x0889C120u: goto SB_L_0889C120;
case 0x0889C13Cu: goto SB_L_0889C13C;
case 0x0889C14Cu: goto SB_L_0889C14C;
case 0x0889C158u: goto SB_L_0889C158;
case 0x0889C160u: goto SB_L_0889C160;
case 0x0889C168u: goto SB_L_0889C168;
case 0x0889C180u: goto SB_L_0889C180;
case 0x0889C188u: goto SB_L_0889C188;
case 0x0889C194u: goto SB_L_0889C194;
case 0x0889C1A4u: goto SB_L_0889C1A4;
case 0x0889C1B4u: goto SB_L_0889C1B4;
case 0x0889C1C4u: goto SB_L_0889C1C4;
case 0x0889C1CCu: goto SB_L_0889C1CC;
case 0x0889C1E0u: goto SB_L_0889C1E0;
case 0x0889C1F0u: goto SB_L_0889C1F0;
case 0x0889C1FCu: goto SB_L_0889C1FC;
case 0x0889C204u: goto SB_L_0889C204;
case 0x0889C21Cu: goto SB_L_0889C21C;
case 0x0889C234u: goto SB_L_0889C234;
case 0x0889C23Cu: goto SB_L_0889C23C;
case 0x0889C254u: goto SB_L_0889C254;
case 0x0889C26Cu: goto SB_L_0889C26C;
case 0x0889C274u: goto SB_L_0889C274;
case 0x0889C298u: goto SB_L_0889C298;
case 0x0889C2A0u: goto SB_L_0889C2A0;
case 0x0889C2A8u: goto SB_L_0889C2A8;
case 0x0889C2C0u: goto SB_L_0889C2C0;
case 0x0889C2C8u: goto SB_L_0889C2C8;
case 0x0889C2D0u: goto SB_L_0889C2D0;
case 0x0889C2F8u: goto SB_L_0889C2F8;
case 0x0889C378u: goto SB_L_0889C378;
case 0x0889C380u: goto SB_L_0889C380;
case 0x0889C388u: goto SB_L_0889C388;
case 0x0889C394u: goto SB_L_0889C394;
case 0x0889C3B0u: goto SB_L_0889C3B0;
case 0x0889C3B8u: goto SB_L_0889C3B8;
case 0x0889C3DCu: goto SB_L_0889C3DC;
case 0x0889C3E4u: goto SB_L_0889C3E4;
case 0x0889C3ECu: goto SB_L_0889C3EC;
case 0x0889C404u: goto SB_L_0889C404;
case 0x0889C40Cu: goto SB_L_0889C40C;
case 0x0889C414u: goto SB_L_0889C414;
case 0x0889C43Cu: goto SB_L_0889C43C;
case 0x0889C4B8u: goto SB_L_0889C4B8;
case 0x0889C4C0u: goto SB_L_0889C4C0;
case 0x0889C4D8u: goto SB_L_0889C4D8;
case 0x0889C4E8u: goto SB_L_0889C4E8;
case 0x0889C4F4u: goto SB_L_0889C4F4;
case 0x0889C570u: goto SB_L_0889C570;
case 0x0889C580u: goto SB_L_0889C580;
case 0x0889C590u: goto SB_L_0889C590;
case 0x0889C5A0u: goto SB_L_0889C5A0;
case 0x0889C5B0u: goto SB_L_0889C5B0;
case 0x0889C5B8u: goto SB_L_0889C5B8;
default: break;
}
switch (tier2_resume_unit) {
default: break;
}
ctx.pc = tier2_resume_pc;
TIER2_SB_RETURN();
TIER2_LOCAL_DISPATCH_U0037:
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 0x0889BFC0u: goto SB_L_0889BFC0;
case 0x0889BFD8u: goto SB_L_0889BFD8;
case 0x0889BFE4u: goto SB_L_0889BFE4;
default:
ctx.pc = local_pc;
TIER2_SB_RETURN();
}
TIER2_LOCAL_DISPATCH_U0038:
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 0x0889C000u: goto SB_L_0889C000;
case 0x0889C008u: goto SB_L_0889C008;
case 0x0889C014u: goto SB_L_0889C014;
case 0x0889C01Cu: goto SB_L_0889C01C;
case 0x0889C024u: goto SB_L_0889C024;
case 0x0889C054u: goto SB_L_0889C054;
case 0x0889C06Cu: goto SB_L_0889C06C;
case 0x0889C074u: goto SB_L_0889C074;
case 0x0889C084u: goto SB_L_0889C084;
case 0x0889C08Cu: goto SB_L_0889C08C;
case 0x0889C094u: goto SB_L_0889C094;
case 0x0889C09Cu: goto SB_L_0889C09C;
case 0x0889C0A8u: goto SB_L_0889C0A8;
case 0x0889C0B0u: goto SB_L_0889C0B0;
case 0x0889C0B8u: goto SB_L_0889C0B8;
case 0x0889C0C0u: goto SB_L_0889C0C0;
case 0x0889C0D4u: goto SB_L_0889C0D4;
case 0x0889C0E4u: goto SB_L_0889C0E4;
case 0x0889C0F0u: goto SB_L_0889C0F0;
case 0x0889C0F8u: goto SB_L_0889C0F8;
case 0x0889C114u: goto SB_L_0889C114;
case 0x0889C120u: goto SB_L_0889C120;
case 0x0889C13Cu: goto SB_L_0889C13C;
case 0x0889C14Cu: goto SB_L_0889C14C;
case 0x0889C158u: goto SB_L_0889C158;
case 0x0889C160u: goto SB_L_0889C160;
case 0x0889C168u: goto SB_L_0889C168;
case 0x0889C180u: goto SB_L_0889C180;
case 0x0889C188u: goto SB_L_0889C188;
case 0x0889C194u: goto SB_L_0889C194;
case 0x0889C1A4u: goto SB_L_0889C1A4;
case 0x0889C1B4u: goto SB_L_0889C1B4;
case 0x0889C1C4u: goto SB_L_0889C1C4;
case 0x0889C1CCu: goto SB_L_0889C1CC;
case 0x0889C1E0u: goto SB_L_0889C1E0;
case 0x0889C1F0u: goto SB_L_0889C1F0;
case 0x0889C1FCu: goto SB_L_0889C1FC;
case 0x0889C204u: goto SB_L_0889C204;
case 0x0889C21Cu: goto SB_L_0889C21C;
case 0x0889C234u: goto SB_L_0889C234;
case 0x0889C23Cu: goto SB_L_0889C23C;
case 0x0889C254u: goto SB_L_0889C254;
case 0x0889C26Cu: goto SB_L_0889C26C;
case 0x0889C274u: goto SB_L_0889C274;
case 0x0889C298u: goto SB_L_0889C298;
case 0x0889C2A0u: goto SB_L_0889C2A0;
case 0x0889C2A8u: goto SB_L_0889C2A8;
case 0x0889C2C0u: goto SB_L_0889C2C0;
case 0x0889C2C8u: goto SB_L_0889C2C8;
case 0x0889C2D0u: goto SB_L_0889C2D0;
case 0x0889C2F8u: goto SB_L_0889C2F8;
case 0x0889C378u: goto SB_L_0889C378;
case 0x0889C380u: goto SB_L_0889C380;
case 0x0889C388u: goto SB_L_0889C388;
case 0x0889C394u: goto SB_L_0889C394;
case 0x0889C3B0u: goto SB_L_0889C3B0;
case 0x0889C3B8u: goto SB_L_0889C3B8;
case 0x0889C3DCu: goto SB_L_0889C3DC;
case 0x0889C3E4u: goto SB_L_0889C3E4;
case 0x0889C3ECu: goto SB_L_0889C3EC;
case 0x0889C404u: goto SB_L_0889C404;
case 0x0889C40Cu: goto SB_L_0889C40C;
case 0x0889C414u: goto SB_L_0889C414;
case 0x0889C43Cu: goto SB_L_0889C43C;
case 0x0889C4B8u: goto SB_L_0889C4B8;
case 0x0889C4C0u: goto SB_L_0889C4C0;
case 0x0889C4D8u: goto SB_L_0889C4D8;
case 0x0889C4E8u: goto SB_L_0889C4E8;
case 0x0889C4F4u: goto SB_L_0889C4F4;
case 0x0889C570u: goto SB_L_0889C570;
case 0x0889C580u: goto SB_L_0889C580;
case 0x0889C590u: goto SB_L_0889C590;
case 0x0889C5A0u: goto SB_L_0889C5A0;
case 0x0889C5B0u: goto SB_L_0889C5B0;
case 0x0889C5B8u: goto SB_L_0889C5B8;
default:
ctx.pc = local_pc;
TIER2_SB_RETURN();
}
TIER2_ENTRY_DISPATCH:
switch (entry_pc) {
case 0x0889BFC0u: goto SB_L_0889BFC0;
case 0x0889C000u: goto SB_L_0889C000;
case 0x0889C5B8u: goto SB_L_0889C5B8;
default:
ctx.pc = entry_pc;
++tier2_stats.fallbacks;
TIER2_SB_RETURN();
}
// TIER2_GPR_BODY_BEGIN
SB_L_0889BFC0:
tier2_gpr_18 = (tier2_mem.aot_load32(ctx.gpr[30] + static_cast<std::uint32_t>(0)));
ctx.gpr[30] = (tier2_mem.aot_load32(ctx.gpr[30] + static_cast<std::uint32_t>(8)));
tier2_gpr_4 = (tier2_mem.aot_load16(tier2_gpr_18 + static_cast<std::uint32_t>(84)));
tier2_gpr_5 = (tier2_mem.aot_load16(ctx.gpr[28] + static_cast<std::uint32_t>(-25492)));
{ const bool branch_taken = tier2_gpr_4 == tier2_gpr_5;
ctx.gpr[17] = (tier2_mem.aot_load8(tier2_gpr_29 + static_cast<std::uint32_t>(596)));
if (branch_taken) {
if (!rt.tier2_enter_fused_transfer<38u, 0x0889C5B8u>(ctx)) {
ctx.pc = 0x0889C5B8u;
TIER2_SB_RETURN();
}
++tier2_pending_transfers;
++tier2_stats.fused_tail_edges;
goto SB_L_0889C5B8;
}
goto SB_L_0889BFD8;
}
SB_L_0889BFD8:
tier2_gpr_4 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(8068)));
{ const bool branch_taken = tier2_gpr_18 == tier2_gpr_4;
// nop
if (branch_taken) {
if (!rt.tier2_enter_fused_transfer<38u, 0x0889C5B8u>(ctx)) {
ctx.pc = 0x0889C5B8u;
TIER2_SB_RETURN();
}
++tier2_pending_transfers;
++tier2_stats.fused_tail_edges;
goto SB_L_0889C5B8;
}
goto SB_L_0889BFE4;
}
SB_L_0889BFE4:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(72)));
tier2_gpr_4 = (tier2_gpr_4 & 512u);
tier2_gpr_4 = (0u < tier2_gpr_4 ? 1u : 0u);
tier2_gpr_16 = (tier2_mem.aot_load8(tier2_gpr_29 + static_cast<std::uint32_t>(608)));
tier2_gpr_4 = (tier2_gpr_4 & 255u);
tier2_gpr_4 = (tier2_gpr_4 | ctx.gpr[17]);
tier2_gpr_4 = (tier2_gpr_4 | tier2_gpr_16);
// Generated corpus boundary: unwind any logical tail-call frames first,
// then account the outer dispatch that this local edge removes.
if (tier2_pending_transfers != 0u) {
const std::uint32_t tier2_static_pending_ = tier2_pending_transfers;
tier2_pending_transfers = 0u;
if (!tier2_complete_shadow(tier2_static_pending_)) {
tier2_gpr_shadow_valid = false;
TIER2_SB_RETURN();
}
}
ctx.pc = 0x0889C000u;
TIER2_GPR_SYNC_OUT();
if (!rt.account_inlined_dispatch_boundary(ctx)) {
tier2_gpr_shadow_valid = false;
TIER2_SB_RETURN();
}
TIER2_GPR_SYNC_IN();
goto SB_L_0889C000;
SB_L_0889C000:
{ const bool branch_taken = tier2_gpr_4 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C5B8;
}
goto SB_L_0889C008;
}
SB_L_0889C008:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(628)));
{ const bool branch_taken = tier2_gpr_4 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C024;
}
goto SB_L_0889C014;
}
SB_L_0889C014:
ctx.gpr[31] = (0x0889C01Cu);
tier2_gpr_4 = (tier2_gpr_18 | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0036_entry, 36u, 434u, 0x088961FCu>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C01Cu) goto SB_L_0889C01C;
TIER2_SB_RETURN();
SB_L_0889C01C:
{ const bool branch_taken = ctx.gpr[2] != 0u;
// nop
if (branch_taken) {
goto SB_L_0889C5B8;
}
goto SB_L_0889C024;
}
SB_L_0889C024:
tier2_gpr_4 = (tier2_mem.aot_load16(ctx.gpr[28] + static_cast<std::uint32_t>(-25492)));
tier2_mem.aot_store16(tier2_gpr_18 + static_cast<std::uint32_t>(84), static_cast<std::uint16_t>(tier2_gpr_4));
ctx.gpr[19] = (0u | 0u);
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(16)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(336), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(72)));
tier2_gpr_4 = (tier2_gpr_4 & 14u);
tier2_gpr_4 = (tier2_gpr_4 ^ 6u);
tier2_gpr_4 = (tier2_gpr_4 < static_cast<std::uint32_t>(1) ? 1u : 0u);
tier2_gpr_4 = (tier2_gpr_4 & 255u);
{ const bool branch_taken = tier2_gpr_4 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C0F8;
}
goto SB_L_0889C054;
}
SB_L_0889C054:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(72)));
tier2_gpr_4 = (tier2_gpr_4 & 512u);
tier2_gpr_4 = (0u < tier2_gpr_4 ? 1u : 0u);
tier2_gpr_4 = (tier2_gpr_4 & 255u);
{ const bool branch_taken = tier2_gpr_4 != 0u;
// nop
if (branch_taken) {
goto SB_L_0889C0C0;
}
goto SB_L_0889C06C;
}
SB_L_0889C06C:
{ const bool branch_taken = ctx.gpr[17] == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C084;
}
goto SB_L_0889C074;
}
SB_L_0889C074:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(2228)));
tier2_gpr_5 = (0u | 58u);
{ const bool branch_taken = tier2_gpr_4 == tier2_gpr_5;
// nop
if (branch_taken) {
goto SB_L_0889C0C0;
}
goto SB_L_0889C084;
}
SB_L_0889C084:
{ const bool branch_taken = tier2_gpr_16 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C0B8;
}
goto SB_L_0889C08C;
}
SB_L_0889C08C:
ctx.gpr[31] = (0x0889C094u);
tier2_gpr_4 = (tier2_gpr_18 | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C094u) goto SB_L_0889C094;
TIER2_SB_RETURN();
SB_L_0889C094:
{ const bool branch_taken = ctx.gpr[2] == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C0B8;
}
goto SB_L_0889C09C;
}
SB_L_0889C09C:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(1152)));
{ const bool branch_taken = tier2_gpr_4 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C0B8;
}
goto SB_L_0889C0A8;
}
SB_L_0889C0A8:
ctx.gpr[31] = (0x0889C0B0u);
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(1152)));
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0191_entry, 191u, 409u, 0x08B017A8u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C0B0u) goto SB_L_0889C0B0;
TIER2_SB_RETURN();
SB_L_0889C0B0:
{ const bool branch_taken = ctx.gpr[2] != 0u;
// nop
if (branch_taken) {
goto SB_L_0889C0C0;
}
goto SB_L_0889C0B8;
}
SB_L_0889C0B8:
{ const bool branch_taken = 0u == 0u;
ctx.gpr[19] = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C26C;
}
goto SB_L_0889C0C0;
}
SB_L_0889C0C0:
tier2_gpr_4 = (static_cast<std::uint32_t>(static_cast<std::int32_t>(static_cast<std::int16_t>(tier2_mem.aot_load16(tier2_gpr_18 + static_cast<std::uint32_t>(86))))));
tier2_gpr_6 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(7656)));
tier2_gpr_6 = (static_cast<std::int32_t>(tier2_gpr_4) < static_cast<std::int32_t>(tier2_gpr_6) ? 1u : 0u);
{ const bool branch_taken = tier2_gpr_6 == 0u;
tier2_gpr_5 = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C0E4;
}
goto SB_L_0889C0D4;
}
SB_L_0889C0D4:
tier2_gpr_4 = (tier2_gpr_4 << 2u);
tier2_gpr_5 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(24)));
tier2_gpr_4 = (tier2_gpr_5 + tier2_gpr_4);
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(0)));
goto SB_L_0889C0E4;
SB_L_0889C0E4:
tier2_gpr_4 = (tier2_gpr_5 | 0u);
ctx.gpr[31] = (0x0889C0F0u);
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(80)));
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0063_entry, 63u, 664u, 0x089039E4u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C0F0u) goto SB_L_0889C0F0;
TIER2_SB_RETURN();
SB_L_0889C0F0:
{ const bool branch_taken = 0u == 0u;
ctx.gpr[19] = (ctx.gpr[2] | 0u);
if (branch_taken) {
goto SB_L_0889C26C;
}
goto SB_L_0889C0F8;
}
SB_L_0889C0F8:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(72)));
tier2_gpr_4 = (tier2_gpr_4 & 14u);
tier2_gpr_4 = (tier2_gpr_4 ^ 14u);
tier2_gpr_4 = (tier2_gpr_4 < static_cast<std::uint32_t>(1) ? 1u : 0u);
tier2_gpr_4 = (tier2_gpr_4 & 255u);
{ const bool branch_taken = tier2_gpr_4 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C23C;
}
goto SB_L_0889C114;
}
SB_L_0889C114:
tier2_gpr_16 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(352)));
{ const bool branch_taken = tier2_gpr_16 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C158;
}
goto SB_L_0889C120;
}
SB_L_0889C120:
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(640), ctx.gpr[21]);
tier2_mem.aot_store8(tier2_gpr_29 + static_cast<std::uint32_t>(596), static_cast<std::uint8_t>(ctx.gpr[17]));
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_16 + static_cast<std::uint32_t>(108)));
ctx.gpr[17] = (tier2_gpr_4 + static_cast<std::uint32_t>(16));
tier2_gpr_4 = (static_cast<std::uint32_t>(static_cast<std::int32_t>(static_cast<std::int16_t>(tier2_mem.aot_load16(ctx.gpr[17] + static_cast<std::uint32_t>(0))))));
ctx.gpr[31] = (0x0889C13Cu);
ctx.gpr[21] = (tier2_gpr_16 + tier2_gpr_4);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0115_entry, 115u, 419u, 0x089D273Cu>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C13Cu) goto SB_L_0889C13C;
TIER2_SB_RETURN();
SB_L_0889C13C:
tier2_gpr_6 = (tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(4)));
tier2_gpr_4 = (ctx.gpr[21] | 0u);
jump_target = tier2_gpr_6;
ctx.gpr[31] = (0x0889C14Cu);
tier2_gpr_5 = (ctx.gpr[2] | 0u);
ctx.pc = jump_target;
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C14Cu) goto SB_L_0889C14C;
TIER2_SB_RETURN();
SB_L_0889C14C:
ctx.gpr[17] = (tier2_mem.aot_load8(tier2_gpr_29 + static_cast<std::uint32_t>(596)));
{ const bool branch_taken = ctx.gpr[2] != 0u;
ctx.gpr[21] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(640)));
if (branch_taken) {
goto SB_L_0889C160;
}
goto SB_L_0889C158;
}
SB_L_0889C158:
{ const bool branch_taken = 0u == 0u;
tier2_gpr_16 = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C160;
}
goto SB_L_0889C160;
}
SB_L_0889C160:
{ const bool branch_taken = tier2_gpr_16 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C204;
}
goto SB_L_0889C168;
}
SB_L_0889C168:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(72)));
tier2_gpr_4 = (tier2_gpr_4 & 512u);
tier2_gpr_4 = (0u < tier2_gpr_4 ? 1u : 0u);
tier2_gpr_4 = (tier2_gpr_4 & 255u);
{ const bool branch_taken = tier2_gpr_4 != 0u;
// nop
if (branch_taken) {
goto SB_L_0889C1CC;
}
goto SB_L_0889C180;
}
SB_L_0889C180:
{ const bool branch_taken = ctx.gpr[17] == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C1C4;
}
goto SB_L_0889C188;
}
SB_L_0889C188:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_16 + static_cast<std::uint32_t>(96)));
if (tier2_gpr_4 != 0u) {
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_16 + static_cast<std::uint32_t>(96)));
goto SB_L_0889C1B4;
}
goto SB_L_0889C194;
SB_L_0889C194:
tier2_gpr_5 = (static_cast<std::uint32_t>(static_cast<std::int32_t>(static_cast<std::int16_t>(tier2_mem.aot_load16(tier2_gpr_16 + static_cast<std::uint32_t>(10))))));
tier2_gpr_6 = (tier2_gpr_29 + static_cast<std::uint32_t>(384));
ctx.gpr[31] = (0x0889C1A4u);
tier2_gpr_4 = (tier2_gpr_16 | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0166_entry, 166u, 47u, 0x08A9C6FCu>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C1A4u) goto SB_L_0889C1A4;
TIER2_SB_RETURN();
SB_L_0889C1A4:
tier2_mem.aot_store32(tier2_gpr_16 + static_cast<std::uint32_t>(96), ctx.gpr[2]);
tier2_gpr_4 = (tier2_mem.aot_load8(tier2_gpr_29 + static_cast<std::uint32_t>(384)));
tier2_mem.aot_store8(tier2_gpr_16 + static_cast<std::uint32_t>(4), static_cast<std::uint8_t>(tier2_gpr_4));
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_16 + static_cast<std::uint32_t>(96)));
goto SB_L_0889C1B4;
SB_L_0889C1B4:
tier2_gpr_4 = (tier2_mem.aot_load8(tier2_gpr_4 + static_cast<std::uint32_t>(180)));
tier2_gpr_5 = (0u | 58u);
{ const bool branch_taken = tier2_gpr_4 == tier2_gpr_5;
// nop
if (branch_taken) {
goto SB_L_0889C1CC;
}
goto SB_L_0889C1C4;
}
SB_L_0889C1C4:
{ const bool branch_taken = 0u == 0u;
ctx.gpr[19] = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C234;
}
goto SB_L_0889C1CC;
}
SB_L_0889C1CC:
tier2_gpr_4 = (static_cast<std::uint32_t>(static_cast<std::int32_t>(static_cast<std::int16_t>(tier2_mem.aot_load16(tier2_gpr_18 + static_cast<std::uint32_t>(86))))));
tier2_gpr_6 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(7656)));
tier2_gpr_6 = (static_cast<std::int32_t>(tier2_gpr_4) < static_cast<std::int32_t>(tier2_gpr_6) ? 1u : 0u);
{ const bool branch_taken = tier2_gpr_6 == 0u;
tier2_gpr_5 = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C1F0;
}
goto SB_L_0889C1E0;
}
SB_L_0889C1E0:
tier2_gpr_4 = (tier2_gpr_4 << 2u);
tier2_gpr_5 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(24)));
tier2_gpr_4 = (tier2_gpr_5 + tier2_gpr_4);
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(0)));
goto SB_L_0889C1F0;
SB_L_0889C1F0:
tier2_gpr_4 = (tier2_gpr_5 | 0u);
ctx.gpr[31] = (0x0889C1FCu);
tier2_gpr_5 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(80)));
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0063_entry, 63u, 664u, 0x089039E4u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C1FCu) goto SB_L_0889C1FC;
TIER2_SB_RETURN();
SB_L_0889C1FC:
{ const bool branch_taken = 0u == 0u;
ctx.gpr[19] = (ctx.gpr[2] | 0u);
if (branch_taken) {
goto SB_L_0889C234;
}
goto SB_L_0889C204;
}
SB_L_0889C204:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(72)));
tier2_gpr_4 = (tier2_gpr_4 & 512u);
tier2_gpr_4 = (0u < tier2_gpr_4 ? 1u : 0u);
tier2_gpr_4 = (tier2_gpr_4 & 255u);
{ const bool branch_taken = tier2_gpr_4 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C234;
}
goto SB_L_0889C21C;
}
SB_L_0889C21C:
tier2_gpr_4 = (static_cast<std::uint32_t>(static_cast<std::int32_t>(static_cast<std::int16_t>(tier2_mem.aot_load16(tier2_gpr_18 + static_cast<std::uint32_t>(86))))));
tier2_gpr_4 = (tier2_gpr_4 << 2u);
tier2_gpr_5 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(24)));
tier2_gpr_4 = (tier2_gpr_5 + tier2_gpr_4);
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(0)));
ctx.gpr[19] = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(20)));
goto SB_L_0889C234;
SB_L_0889C234:
{ const bool branch_taken = 0u == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C26C;
}
goto SB_L_0889C23C;
}
SB_L_0889C23C:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(72)));
tier2_gpr_4 = (tier2_gpr_4 & 512u);
tier2_gpr_4 = (0u < tier2_gpr_4 ? 1u : 0u);
tier2_gpr_4 = (tier2_gpr_4 & 255u);
{ const bool branch_taken = tier2_gpr_4 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C26C;
}
goto SB_L_0889C254;
}
SB_L_0889C254:
tier2_gpr_4 = (static_cast<std::uint32_t>(static_cast<std::int32_t>(static_cast<std::int16_t>(tier2_mem.aot_load16(tier2_gpr_18 + static_cast<std::uint32_t>(86))))));
tier2_gpr_4 = (tier2_gpr_4 << 2u);
tier2_gpr_5 = (tier2_mem.aot_load32(ctx.gpr[28] + static_cast<std::uint32_t>(24)));
tier2_gpr_4 = (tier2_gpr_5 + tier2_gpr_4);
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(0)));
ctx.gpr[19] = (tier2_mem.aot_load32(tier2_gpr_4 + static_cast<std::uint32_t>(20)));
goto SB_L_0889C26C;
SB_L_0889C26C:
{ const bool branch_taken = ctx.gpr[19] == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C388;
}
goto SB_L_0889C274;
}
SB_L_0889C274:
ctx.gpr[17] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(632)));
tier2_gpr_16 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(612)));
ctx.gpr[17] = (ctx.gpr[17] & 255u);
tier2_gpr_16 = (tier2_gpr_16 & 255u);
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(600)));
tier2_gpr_6 = (ctx.gpr[19] + static_cast<std::uint32_t>(16));
ctx.gpr[7] = (tier2_gpr_29 + static_cast<std::uint32_t>(464));
ctx.gpr[31] = (0x0889C298u);
tier2_gpr_5 = (tier2_gpr_18 | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0043_entry, 43u, 207u, 0x088B1820u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C298u) goto SB_L_0889C298;
TIER2_SB_RETURN();
SB_L_0889C298:
{ const bool branch_taken = ctx.gpr[2] != 0u;
tier2_gpr_4 = (tier2_gpr_29 + static_cast<std::uint32_t>(464));
if (branch_taken) {
goto SB_L_0889C2A8;
}
goto SB_L_0889C2A0;
}
SB_L_0889C2A0:
{ const bool branch_taken = 0u == 0u;
tier2_gpr_4 = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C378;
}
goto SB_L_0889C2A8;
}
SB_L_0889C2A8:
ctx.gpr[7] = (tier2_gpr_29 + static_cast<std::uint32_t>(16));
tier2_gpr_5 = (ctx.gpr[19] | 0u);
tier2_gpr_6 = (ctx.gpr[20] | 0u);
ctx.gpr[8] = (ctx.gpr[17] | 0u);
ctx.gpr[31] = (0x0889C2C0u);
ctx.gpr[9] = (tier2_gpr_16 | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0043_entry, 43u, 484u, 0x088B3CECu>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C2C0u) goto SB_L_0889C2C0;
TIER2_SB_RETURN();
SB_L_0889C2C0:
if (ctx.gpr[2] != 0u) {
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[20] + static_cast<std::uint32_t>(0)));
goto SB_L_0889C2D0;
}
goto SB_L_0889C2C8;
SB_L_0889C2C8:
{ const bool branch_taken = 0u == 0u;
tier2_gpr_4 = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C378;
}
goto SB_L_0889C2D0;
}
SB_L_0889C2D0:
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(448), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[20] + static_cast<std::uint32_t>(4)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(452), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[20] + static_cast<std::uint32_t>(8)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(456), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
tier2_gpr_16 = (tier2_gpr_29 + static_cast<std::uint32_t>(448));
tier2_gpr_4 = (ctx.gpr[23] | 0u);
tier2_gpr_5 = (tier2_gpr_18 | 0u);
ctx.gpr[31] = (0x0889C2F8u);
tier2_gpr_6 = (tier2_gpr_16 | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0035_entry, 35u, 194u, 0x08891710u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C2F8u) goto SB_L_0889C2F8;
TIER2_SB_RETURN();
SB_L_0889C2F8:
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(0)));
tier2_gpr_4 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(4)));
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(8)));
tier2_gpr_6 = (std::bit_cast<std::uint32_t>(ctx.fpr[14]));
{ const std::uint32_t tier2_words[3]{tier2_gpr_4, tier2_gpr_5, tier2_gpr_6};
tier2_mem.aot_store32_block(ctx.gpr[20] + static_cast<std::uint32_t>(0), tier2_words); }
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[20] + static_cast<std::uint32_t>(16)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(448), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[20] + static_cast<std::uint32_t>(20)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(452), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[20] + static_cast<std::uint32_t>(24)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(456), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
{ const std::uint32_t vfpu_address = tier2_gpr_18 + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<4u, 4u>(vfpu_value); }
{ const std::uint32_t vfpu_address = tier2_gpr_18 + static_cast<std::uint32_t>(16);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<5u, 4u>(vfpu_value); }
{ const std::uint32_t vfpu_address = tier2_gpr_18 + static_cast<std::uint32_t>(32);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<6u, 4u>(vfpu_value); }
{ const std::uint32_t vfpu_address = tier2_gpr_16 + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<7u, 4u>(vfpu_value); }
{ float vfpu_matrix[16]{}, vfpu_target_raw[4]{}, vfpu_target[4]{}, vfpu_result[4]{};
ctx.read_vfpu_matrix(vfpu_matrix, 36u, 3u);
ctx.read_vfpu_vector_ct<7u, 3u>(vfpu_target_raw);
constexpr std::uint32_t vfpu_side = 3u;
constexpr std::uint32_t vfpu_input_length = 3u;
for (std::uint32_t i = 0; i < 4u; ++i) vfpu_target[i] = i < vfpu_input_length ? vfpu_target_raw[i] : 0.0f;
if (vfpu_side - 1u >= vfpu_input_length) vfpu_target[vfpu_side - 1u] = 1.0f;
if constexpr (vfpu_side == 4u) {
psprecomp::vcs_tier2_mat4_vec_first3_ordered(vfpu_matrix, vfpu_target, vfpu_result);
} else {
for (std::uint32_t row = 0; row + 1u < vfpu_side; ++row) {
float sum = 0.0f;
for (std::uint32_t column = 0; column < vfpu_side; ++column) sum += vfpu_matrix[row * 4u + column] * vfpu_target[column];
vfpu_result[row] = sum;
}
}
float vfpu_final_row[4]{vfpu_matrix[(vfpu_side - 1u) * 4u + 0u], vfpu_matrix[(vfpu_side - 1u) * 4u + 1u],
vfpu_matrix[(vfpu_side - 1u) * 4u + 2u], vfpu_matrix[(vfpu_side - 1u) * 4u + 3u]};
ctx.apply_vfpu_source_prefix_ct<4u, 0u>(vfpu_final_row);
ctx.apply_vfpu_source_prefix_ct<4u, 1u>(vfpu_target);
for (std::uint32_t column = 0; column < 4u; ++column) vfpu_result[vfpu_side - 1u] += vfpu_final_row[column] * vfpu_target[column];
const std::uint32_t vfpu_destination_prefix = ctx.vfpu_ctrl[2];
const std::uint32_t vfpu_last_lane = vfpu_side - 1u;
ctx.vfpu_ctrl[2] = ((vfpu_destination_prefix & (1u << 8u)) << vfpu_last_lane) |
((vfpu_destination_prefix & 3u) << (vfpu_last_lane * 2u));
ctx.write_vfpu_vector_with_destination_prefix(vfpu_result, 0u, vfpu_side); }
{ float vfpu_value[4]{}; ctx.read_vfpu_vector_ct<0u, 4u>(vfpu_value);
const std::uint32_t vfpu_address = ctx.gpr[23] + static_cast<std::uint32_t>(0);
const std::uint32_t tier2_vfpu_words[4]{std::bit_cast<std::uint32_t>(vfpu_value[0]), std::bit_cast<std::uint32_t>(vfpu_value[1]), std::bit_cast<std::uint32_t>(vfpu_value[2]), std::bit_cast<std::uint32_t>(vfpu_value[3])};
tier2_mem.aot_store32_block(vfpu_address, tier2_vfpu_words); }
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(620)));
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(0)));
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(4)));
tier2_gpr_6 = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(8)));
ctx.gpr[7] = (std::bit_cast<std::uint32_t>(ctx.fpr[14]));
{ const std::uint32_t tier2_words[3]{tier2_gpr_5, tier2_gpr_6, ctx.gpr[7]};
tier2_mem.aot_store32_block(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_words); }
tier2_gpr_4 = (0u | 1u);
goto SB_L_0889C378;
SB_L_0889C378:
{ const bool branch_taken = tier2_gpr_4 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C388;
}
goto SB_L_0889C380;
}
SB_L_0889C380:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(604)));
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_18);
goto SB_L_0889C388;
SB_L_0889C388:
tier2_gpr_4 = (tier2_mem.aot_load8(tier2_gpr_29 + static_cast<std::uint32_t>(624)));
{ const bool branch_taken = tier2_gpr_4 == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C5B8;
}
goto SB_L_0889C394;
}
SB_L_0889C394:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_18 + static_cast<std::uint32_t>(92)));
tier2_gpr_5 = (tier2_gpr_4 + static_cast<std::uint32_t>(336));
tier2_gpr_4 = (static_cast<std::uint32_t>(static_cast<std::int32_t>(static_cast<std::int16_t>(tier2_mem.aot_load16(tier2_gpr_5 + static_cast<std::uint32_t>(0))))));
tier2_gpr_4 = (tier2_gpr_18 + tier2_gpr_4);
tier2_gpr_6 = (tier2_mem.aot_load32(tier2_gpr_5 + static_cast<std::uint32_t>(4)));
jump_target = tier2_gpr_6;
ctx.gpr[31] = (0x0889C3B0u);
tier2_gpr_5 = (tier2_gpr_29 + static_cast<std::uint32_t>(64));
ctx.pc = jump_target;
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C3B0u) goto SB_L_0889C3B0;
TIER2_SB_RETURN();
SB_L_0889C3B0:
{ const bool branch_taken = ctx.gpr[2] == 0u;
// nop
if (branch_taken) {
goto SB_L_0889C5B8;
}
goto SB_L_0889C3B8;
}
SB_L_0889C3B8:
tier2_gpr_16 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(612)));
tier2_gpr_16 = (tier2_gpr_16 & 255u);
ctx.gpr[17] = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(600)));
tier2_gpr_4 = (ctx.gpr[17] | 0u);
tier2_gpr_6 = (tier2_gpr_29 + static_cast<std::uint32_t>(80));
ctx.gpr[19] = (tier2_gpr_29 + static_cast<std::uint32_t>(544));
tier2_gpr_5 = (tier2_gpr_18 | 0u);
ctx.gpr[31] = (0x0889C3DCu);
ctx.gpr[7] = (ctx.gpr[19] | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0043_entry, 43u, 207u, 0x088B1820u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C3DCu) goto SB_L_0889C3DC;
TIER2_SB_RETURN();
SB_L_0889C3DC:
{ const bool branch_taken = ctx.gpr[2] != 0u;
ctx.gpr[8] = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C3EC;
}
goto SB_L_0889C3E4;
}
SB_L_0889C3E4:
{ const bool branch_taken = 0u == 0u;
tier2_gpr_4 = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C4B8;
}
goto SB_L_0889C3EC;
}
SB_L_0889C3EC:
tier2_gpr_5 = (tier2_gpr_29 + static_cast<std::uint32_t>(64));
tier2_gpr_6 = (tier2_gpr_29 + static_cast<std::uint32_t>(32));
tier2_gpr_4 = (ctx.gpr[19] | 0u);
ctx.gpr[7] = (tier2_gpr_29 + static_cast<std::uint32_t>(336));
ctx.gpr[31] = (0x0889C404u);
ctx.gpr[9] = (tier2_gpr_16 | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0043_entry, 43u, 484u, 0x088B3CECu>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C404u) goto SB_L_0889C404;
TIER2_SB_RETURN();
SB_L_0889C404:
if (ctx.gpr[2] != 0u) {
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(32)));
goto SB_L_0889C414;
}
goto SB_L_0889C40C;
SB_L_0889C40C:
{ const bool branch_taken = 0u == 0u;
tier2_gpr_4 = (0u | 0u);
if (branch_taken) {
goto SB_L_0889C4B8;
}
goto SB_L_0889C414;
}
SB_L_0889C414:
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(528), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(36)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(532), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(40)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(536), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
tier2_gpr_16 = (tier2_gpr_29 + static_cast<std::uint32_t>(528));
tier2_gpr_4 = (ctx.gpr[22] | 0u);
tier2_gpr_5 = (tier2_gpr_18 | 0u);
ctx.gpr[31] = (0x0889C43Cu);
tier2_gpr_6 = (tier2_gpr_16 | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0035_entry, 35u, 194u, 0x08891710u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C43Cu) goto SB_L_0889C43C;
TIER2_SB_RETURN();
SB_L_0889C43C:
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(0)));
tier2_gpr_4 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(4)));
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(8)));
tier2_gpr_6 = (std::bit_cast<std::uint32_t>(ctx.fpr[14]));
{ const std::uint32_t tier2_words[3]{tier2_gpr_4, tier2_gpr_5, tier2_gpr_6};
tier2_mem.aot_store32_block(tier2_gpr_29 + static_cast<std::uint32_t>(32), tier2_words); }
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(48)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(528), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(52)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(532), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(56)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(536), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
{ const std::uint32_t vfpu_address = tier2_gpr_18 + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<4u, 4u>(vfpu_value); }
{ const std::uint32_t vfpu_address = tier2_gpr_18 + static_cast<std::uint32_t>(16);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<5u, 4u>(vfpu_value); }
{ const std::uint32_t vfpu_address = tier2_gpr_18 + static_cast<std::uint32_t>(32);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<6u, 4u>(vfpu_value); }
{ const std::uint32_t vfpu_address = tier2_gpr_16 + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<7u, 4u>(vfpu_value); }
{ float vfpu_matrix[16]{}, vfpu_target_raw[4]{}, vfpu_target[4]{}, vfpu_result[4]{};
ctx.read_vfpu_matrix(vfpu_matrix, 36u, 3u);
ctx.read_vfpu_vector_ct<7u, 3u>(vfpu_target_raw);
constexpr std::uint32_t vfpu_side = 3u;
constexpr std::uint32_t vfpu_input_length = 3u;
for (std::uint32_t i = 0; i < 4u; ++i) vfpu_target[i] = i < vfpu_input_length ? vfpu_target_raw[i] : 0.0f;
if (vfpu_side - 1u >= vfpu_input_length) vfpu_target[vfpu_side - 1u] = 1.0f;
if constexpr (vfpu_side == 4u) {
psprecomp::vcs_tier2_mat4_vec_first3_ordered(vfpu_matrix, vfpu_target, vfpu_result);
} else {
for (std::uint32_t row = 0; row + 1u < vfpu_side; ++row) {
float sum = 0.0f;
for (std::uint32_t column = 0; column < vfpu_side; ++column) sum += vfpu_matrix[row * 4u + column] * vfpu_target[column];
vfpu_result[row] = sum;
}
}
float vfpu_final_row[4]{vfpu_matrix[(vfpu_side - 1u) * 4u + 0u], vfpu_matrix[(vfpu_side - 1u) * 4u + 1u],
vfpu_matrix[(vfpu_side - 1u) * 4u + 2u], vfpu_matrix[(vfpu_side - 1u) * 4u + 3u]};
ctx.apply_vfpu_source_prefix_ct<4u, 0u>(vfpu_final_row);
ctx.apply_vfpu_source_prefix_ct<4u, 1u>(vfpu_target);
for (std::uint32_t column = 0; column < 4u; ++column) vfpu_result[vfpu_side - 1u] += vfpu_final_row[column] * vfpu_target[column];
const std::uint32_t vfpu_destination_prefix = ctx.vfpu_ctrl[2];
const std::uint32_t vfpu_last_lane = vfpu_side - 1u;
ctx.vfpu_ctrl[2] = ((vfpu_destination_prefix & (1u << 8u)) << vfpu_last_lane) |
((vfpu_destination_prefix & 3u) << (vfpu_last_lane * 2u));
ctx.write_vfpu_vector_with_destination_prefix(vfpu_result, 0u, vfpu_side); }
{ float vfpu_value[4]{}; ctx.read_vfpu_vector_ct<0u, 4u>(vfpu_value);
const std::uint32_t vfpu_address = ctx.gpr[22] + static_cast<std::uint32_t>(0);
const std::uint32_t tier2_vfpu_words[4]{std::bit_cast<std::uint32_t>(vfpu_value[0]), std::bit_cast<std::uint32_t>(vfpu_value[1]), std::bit_cast<std::uint32_t>(vfpu_value[2]), std::bit_cast<std::uint32_t>(vfpu_value[3])};
tier2_mem.aot_store32_block(vfpu_address, tier2_vfpu_words); }
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(0)));
tier2_gpr_4 = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(4)));
tier2_gpr_5 = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(8)));
tier2_gpr_6 = (std::bit_cast<std::uint32_t>(ctx.fpr[14]));
{ const std::uint32_t tier2_words[3]{tier2_gpr_4, tier2_gpr_5, tier2_gpr_6};
tier2_mem.aot_store32_block(tier2_gpr_29 + static_cast<std::uint32_t>(48), tier2_words); }
tier2_gpr_4 = (0u | 1u);
goto SB_L_0889C4B8;
SB_L_0889C4B8:
{ const bool branch_taken = tier2_gpr_4 == 0u;
tier2_gpr_5 = (tier2_gpr_29 + static_cast<std::uint32_t>(32));
if (branch_taken) {
goto SB_L_0889C5B8;
}
goto SB_L_0889C4C0;
}
SB_L_0889C4C0:
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(16)));
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(336)));
ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[12] <= ctx.fpr[13])) ? 0x00800000u : 0u);
// nop
{ const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u);
// nop
if (branch_taken) {
goto SB_L_0889C4F4;
}
goto SB_L_0889C4D8;
}
SB_L_0889C4D8:
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(336)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(16), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.gpr[31] = (0x0889C4E8u);
tier2_gpr_4 = (ctx.gpr[20] | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0000_entry, 0u, 157u, 0x08805288u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C4E8u) goto SB_L_0889C4E8;
TIER2_SB_RETURN();
SB_L_0889C4E8:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(604)));
{ const bool branch_taken = 0u == 0u;
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_18);
if (branch_taken) {
goto SB_L_0889C5B8;
}
goto SB_L_0889C4F4;
}
SB_L_0889C4F4:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(616)));
{ const std::uint32_t vfpu_address = tier2_gpr_4 + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<0u, 4u>(vfpu_value); }
{ const std::uint32_t vfpu_address = ctx.gpr[17] + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<1u, 4u>(vfpu_value); }
{ float vfpu_s[4]{}, vfpu_t[4]{}, vfpu_d[4]{};
ctx.read_vfpu_vector_with_source_prefix_ct<0u, 3u, 0u>(vfpu_s);
ctx.read_vfpu_vector_with_source_prefix_ct<1u, 3u, 1u>(vfpu_t);
for (std::uint32_t i = 0; i < 3u; ++i) vfpu_d[i] = vfpu_s[i] - vfpu_t[i];
ctx.write_vfpu_vector_with_destination_prefix_ct<0u, 3u>(vfpu_d); }
{ float vfpu_value[4]{}; ctx.read_vfpu_vector_ct<0u, 4u>(vfpu_value);
const std::uint32_t vfpu_address = ctx.gpr[21] + static_cast<std::uint32_t>(0);
const std::uint32_t tier2_vfpu_words[4]{std::bit_cast<std::uint32_t>(vfpu_value[0]), std::bit_cast<std::uint32_t>(vfpu_value[1]), std::bit_cast<std::uint32_t>(vfpu_value[2]), std::bit_cast<std::uint32_t>(vfpu_value[3])};
tier2_mem.aot_store32_block(vfpu_address, tier2_vfpu_words); }
{ const std::uint32_t vfpu_address = ctx.gpr[21] + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<0u, 4u>(vfpu_value); }
{ const std::uint32_t vfpu_address = tier2_gpr_18 + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<1u, 4u>(vfpu_value); }
ctx.execute_vfpu_vdot_ct<28u, 0u, 1u, 3u>();
tier2_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>());
ctx.fpr[12] = std::bit_cast<float>(tier2_gpr_4);
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[20] + static_cast<std::uint32_t>(0)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(368), std::bit_cast<std::uint32_t>(ctx.fpr[13]));
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[20] + static_cast<std::uint32_t>(4)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(372), std::bit_cast<std::uint32_t>(ctx.fpr[13]));
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[20] + static_cast<std::uint32_t>(8)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(376), std::bit_cast<std::uint32_t>(ctx.fpr[13]));
tier2_gpr_4 = (tier2_gpr_29 + static_cast<std::uint32_t>(368));
{ const std::uint32_t vfpu_address = tier2_gpr_4 + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<0u, 4u>(vfpu_value); }
tier2_gpr_4 = (tier2_gpr_18 + static_cast<std::uint32_t>(48));
{ const std::uint32_t vfpu_address = tier2_gpr_4 + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<1u, 4u>(vfpu_value); }
{ float vfpu_s[4]{}, vfpu_t[4]{}, vfpu_d[4]{};
ctx.read_vfpu_vector_with_source_prefix_ct<0u, 3u, 0u>(vfpu_s);
ctx.read_vfpu_vector_with_source_prefix_ct<1u, 3u, 1u>(vfpu_t);
for (std::uint32_t i = 0; i < 3u; ++i) vfpu_d[i] = vfpu_s[i] - vfpu_t[i];
ctx.write_vfpu_vector_with_destination_prefix_ct<0u, 3u>(vfpu_d); }
{ float vfpu_value[4]{}; ctx.read_vfpu_vector_ct<0u, 4u>(vfpu_value);
const std::uint32_t vfpu_address = ctx.gpr[21] + static_cast<std::uint32_t>(0);
const std::uint32_t tier2_vfpu_words[4]{std::bit_cast<std::uint32_t>(vfpu_value[0]), std::bit_cast<std::uint32_t>(vfpu_value[1]), std::bit_cast<std::uint32_t>(vfpu_value[2]), std::bit_cast<std::uint32_t>(vfpu_value[3])};
tier2_mem.aot_store32_block(vfpu_address, tier2_vfpu_words); }
{ const std::uint32_t vfpu_address = ctx.gpr[21] + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<0u, 4u>(vfpu_value); }
{ const std::uint32_t vfpu_address = tier2_gpr_18 + static_cast<std::uint32_t>(0);
std::uint32_t tier2_vfpu_words[4]{}; tier2_mem.aot_load32_block(vfpu_address, tier2_vfpu_words);
float vfpu_value[4]{
std::bit_cast<float>(tier2_vfpu_words[0]),
std::bit_cast<float>(tier2_vfpu_words[1]),
std::bit_cast<float>(tier2_vfpu_words[2]),
std::bit_cast<float>(tier2_vfpu_words[3])};
ctx.write_vfpu_vector_ct<1u, 4u>(vfpu_value); }
ctx.execute_vfpu_vdot_ct<28u, 0u, 1u, 3u>();
tier2_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>());
ctx.fpr[13] = std::bit_cast<float>(tier2_gpr_4);
ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[12] < ctx.fpr[20])) ? 0x00800000u : 0u);
// nop
{ const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u);
// nop
if (branch_taken) {
goto SB_L_0889C580;
}
goto SB_L_0889C570;
}
SB_L_0889C570:
ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= ctx.fpr[22])) ? 0x00800000u : 0u);
// nop
{ const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u);
// nop
if (branch_taken) {
goto SB_L_0889C5A0;
}
goto SB_L_0889C580;
}
SB_L_0889C580:
ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[12] <= ctx.fpr[24])) ? 0x00800000u : 0u);
// nop
{ const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u);
// nop
if (branch_taken) {
goto SB_L_0889C5B8;
}
goto SB_L_0889C590;
}
SB_L_0889C590:
ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] < ctx.fpr[22])) ? 0x00800000u : 0u);
// nop
{ const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u);
// nop
if (branch_taken) {
goto SB_L_0889C5B8;
}
goto SB_L_0889C5A0;
}
SB_L_0889C5A0:
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(336)));
tier2_mem.aot_store32(tier2_gpr_29 + static_cast<std::uint32_t>(16), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
ctx.gpr[31] = (0x0889C5B0u);
tier2_gpr_4 = (ctx.gpr[20] | 0u);
if (([&]() { TIER2_GPR_SYNC_OUT(); const bool tier2_same_ = (rt.invoke_chained_direct<&recomp_unit_0000_entry, 0u, 157u, 0x08805288u>(ctx, &aot_mem)); if (tier2_same_) TIER2_GPR_SYNC_IN(); else tier2_gpr_shadow_valid = false; return tier2_same_; }()) && ctx.pc == 0x0889C5B0u) goto SB_L_0889C5B0;
TIER2_SB_RETURN();
SB_L_0889C5B0:
tier2_gpr_4 = (tier2_mem.aot_load32(tier2_gpr_29 + static_cast<std::uint32_t>(604)));
tier2_mem.aot_store32(tier2_gpr_4 + static_cast<std::uint32_t>(0), tier2_gpr_18);
goto SB_L_0889C5B8;
SB_L_0889C5B8:
{ const bool branch_taken = ctx.gpr[30] != 0u;
// nop
if (branch_taken) {
if (!rt.tier2_enter_fused_transfer<37u, 0x0889BFC0u>(ctx)) {
ctx.pc = 0x0889BFC0u;
TIER2_SB_RETURN();
}
++tier2_pending_transfers;
++tier2_stats.fused_tail_edges;
goto SB_L_0889BFC0;
}
++tier2_stats.cold_exits; tier2_scope.finish(); TIER2_GPR_BEFORE_COLD(); psprecomp::recomp_unit_0038_entry(rt, ctx, 76u, aot_mem); TIER2_SB_RETURN();
}
// 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