mirror of
https://github.com/jessicanataliagta/PSPRecomp
synced 2026-09-28 09:14:43 -04:00
6e85449aad
otimizações round 16
1348 lines
64 KiB
C++
1348 lines
64 KiB
C++
// AUTO-GENERATED by profiles/vcs/tools/build_tier2_superblocks.py.
|
|
// Tier-2 SUPERBLOCK V4 150FPS cluster: matrix
|
|
#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_matrix(psprecomp::Runtime &rt,
|
|
psprecomp::AllegrexContext &ctx,
|
|
psprecomp::GuestMemory::AotFastView &aot_mem,
|
|
std::uint32_t entry_pc) {
|
|
tier2_detail::SampleScope tier2_scope(Tier2ClusterId::Matrix);
|
|
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;
|
|
bool tier2_gpr_shadow_valid = true;
|
|
#define TIER2_GPR_SYNC_OUT() do {} while (false)
|
|
#define TIER2_GPR_SYNC_IN() do {} while (false)
|
|
#define TIER2_GPR_BEFORE_COLD() do { 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 0x088B4738u: goto SB_L_088B4738;
|
|
case 0x088B47E4u: goto SB_L_088B47E4;
|
|
case 0x088B47F0u: goto SB_L_088B47F0;
|
|
case 0x088B4810u: goto SB_L_088B4810;
|
|
case 0x088B4830u: goto SB_L_088B4830;
|
|
case 0x088B483Cu: goto SB_L_088B483C;
|
|
case 0x088B4850u: goto SB_L_088B4850;
|
|
case 0x088B485Cu: goto SB_L_088B485C;
|
|
case 0x088B486Cu: goto SB_L_088B486C;
|
|
case 0x088B4878u: goto SB_L_088B4878;
|
|
case 0x088B4890u: goto SB_L_088B4890;
|
|
case 0x088B4898u: goto SB_L_088B4898;
|
|
case 0x088B48A0u: goto SB_L_088B48A0;
|
|
case 0x088B48A8u: goto SB_L_088B48A8;
|
|
case 0x088B48C0u: goto SB_L_088B48C0;
|
|
case 0x088B48D4u: goto SB_L_088B48D4;
|
|
case 0x088B48F0u: goto SB_L_088B48F0;
|
|
case 0x088B48F4u: goto SB_L_088B48F4;
|
|
case 0x088B4948u: goto SB_L_088B4948;
|
|
case 0x088B4958u: goto SB_L_088B4958;
|
|
case 0x088B4960u: goto SB_L_088B4960;
|
|
case 0x088B497Cu: goto SB_L_088B497C;
|
|
case 0x088B49ECu: goto SB_L_088B49EC;
|
|
case 0x088B4A08u: goto SB_L_088B4A08;
|
|
case 0x088B4AC8u: goto SB_L_088B4AC8;
|
|
case 0x088B4B18u: goto SB_L_088B4B18;
|
|
case 0x088B4B1Cu: goto SB_L_088B4B1C;
|
|
case 0x088B4B3Cu: goto SB_L_088B4B3C;
|
|
case 0x088B4B44u: goto SB_L_088B4B44;
|
|
case 0x088B4B48u: goto SB_L_088B4B48;
|
|
case 0x088B4B5Cu: goto SB_L_088B4B5C;
|
|
case 0x088B4B6Cu: goto SB_L_088B4B6C;
|
|
case 0x088B4B70u: goto SB_L_088B4B70;
|
|
case 0x088B4B98u: goto SB_L_088B4B98;
|
|
case 0x088B4BA0u: goto SB_L_088B4BA0;
|
|
case 0x088B4BA4u: goto SB_L_088B4BA4;
|
|
case 0x088B4BB4u: goto SB_L_088B4BB4;
|
|
case 0x088B4BBCu: goto SB_L_088B4BBC;
|
|
case 0x088B4BD4u: goto SB_L_088B4BD4;
|
|
case 0x088B4BDCu: goto SB_L_088B4BDC;
|
|
case 0x088B4BE0u: goto SB_L_088B4BE0;
|
|
case 0x088B4C28u: goto SB_L_088B4C28;
|
|
case 0x088B4C3Cu: goto SB_L_088B4C3C;
|
|
case 0x088B4C54u: goto SB_L_088B4C54;
|
|
case 0x088B4C7Cu: goto SB_L_088B4C7C;
|
|
case 0x088B4D08u: goto SB_L_088B4D08;
|
|
case 0x088B4D14u: goto SB_L_088B4D14;
|
|
case 0x088B4D1Cu: goto SB_L_088B4D1C;
|
|
case 0x088B4D30u: goto SB_L_088B4D30;
|
|
case 0x088B4D6Cu: goto SB_L_088B4D6C;
|
|
case 0x088B4D94u: goto SB_L_088B4D94;
|
|
case 0x088B4DA0u: goto SB_L_088B4DA0;
|
|
case 0x088B4DB4u: goto SB_L_088B4DB4;
|
|
case 0x088B4DB8u: goto SB_L_088B4DB8;
|
|
case 0x088B4DD8u: goto SB_L_088B4DD8;
|
|
case 0x088B4DE0u: goto SB_L_088B4DE0;
|
|
case 0x088B4DE4u: goto SB_L_088B4DE4;
|
|
case 0x088B4DF8u: goto SB_L_088B4DF8;
|
|
case 0x088B4E08u: goto SB_L_088B4E08;
|
|
case 0x088B4E0Cu: goto SB_L_088B4E0C;
|
|
case 0x088B4E34u: goto SB_L_088B4E34;
|
|
case 0x088B4E3Cu: goto SB_L_088B4E3C;
|
|
case 0x088B4E40u: goto SB_L_088B4E40;
|
|
case 0x088B4E50u: goto SB_L_088B4E50;
|
|
case 0x088B4E54u: goto SB_L_088B4E54;
|
|
case 0x088B4E80u: goto SB_L_088B4E80;
|
|
case 0x088B4E94u: goto SB_L_088B4E94;
|
|
case 0x088B4EACu: goto SB_L_088B4EAC;
|
|
case 0x088B4EBCu: goto SB_L_088B4EBC;
|
|
case 0x088B4EE4u: goto SB_L_088B4EE4;
|
|
case 0x088B4F60u: goto SB_L_088B4F60;
|
|
case 0x088B4F70u: goto SB_L_088B4F70;
|
|
case 0x088B4F74u: goto SB_L_088B4F74;
|
|
default: break;
|
|
}
|
|
switch (tier2_resume_unit) {
|
|
|
|
default: break;
|
|
}
|
|
ctx.pc = tier2_resume_pc;
|
|
TIER2_SB_RETURN();
|
|
|
|
TIER2_LOCAL_DISPATCH_U0044:
|
|
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 0x088B4738u: goto SB_L_088B4738;
|
|
case 0x088B47E4u: goto SB_L_088B47E4;
|
|
case 0x088B47F0u: goto SB_L_088B47F0;
|
|
case 0x088B4810u: goto SB_L_088B4810;
|
|
case 0x088B4830u: goto SB_L_088B4830;
|
|
case 0x088B483Cu: goto SB_L_088B483C;
|
|
case 0x088B4850u: goto SB_L_088B4850;
|
|
case 0x088B485Cu: goto SB_L_088B485C;
|
|
case 0x088B486Cu: goto SB_L_088B486C;
|
|
case 0x088B4878u: goto SB_L_088B4878;
|
|
case 0x088B4890u: goto SB_L_088B4890;
|
|
case 0x088B4898u: goto SB_L_088B4898;
|
|
case 0x088B48A0u: goto SB_L_088B48A0;
|
|
case 0x088B48A8u: goto SB_L_088B48A8;
|
|
case 0x088B48C0u: goto SB_L_088B48C0;
|
|
case 0x088B48D4u: goto SB_L_088B48D4;
|
|
case 0x088B48F0u: goto SB_L_088B48F0;
|
|
case 0x088B48F4u: goto SB_L_088B48F4;
|
|
case 0x088B4948u: goto SB_L_088B4948;
|
|
case 0x088B4958u: goto SB_L_088B4958;
|
|
case 0x088B4960u: goto SB_L_088B4960;
|
|
case 0x088B497Cu: goto SB_L_088B497C;
|
|
case 0x088B49ECu: goto SB_L_088B49EC;
|
|
case 0x088B4A08u: goto SB_L_088B4A08;
|
|
case 0x088B4AC8u: goto SB_L_088B4AC8;
|
|
case 0x088B4B18u: goto SB_L_088B4B18;
|
|
case 0x088B4B1Cu: goto SB_L_088B4B1C;
|
|
case 0x088B4B3Cu: goto SB_L_088B4B3C;
|
|
case 0x088B4B44u: goto SB_L_088B4B44;
|
|
case 0x088B4B48u: goto SB_L_088B4B48;
|
|
case 0x088B4B5Cu: goto SB_L_088B4B5C;
|
|
case 0x088B4B6Cu: goto SB_L_088B4B6C;
|
|
case 0x088B4B70u: goto SB_L_088B4B70;
|
|
case 0x088B4B98u: goto SB_L_088B4B98;
|
|
case 0x088B4BA0u: goto SB_L_088B4BA0;
|
|
case 0x088B4BA4u: goto SB_L_088B4BA4;
|
|
case 0x088B4BB4u: goto SB_L_088B4BB4;
|
|
case 0x088B4BBCu: goto SB_L_088B4BBC;
|
|
case 0x088B4BD4u: goto SB_L_088B4BD4;
|
|
case 0x088B4BDCu: goto SB_L_088B4BDC;
|
|
case 0x088B4BE0u: goto SB_L_088B4BE0;
|
|
case 0x088B4C28u: goto SB_L_088B4C28;
|
|
case 0x088B4C3Cu: goto SB_L_088B4C3C;
|
|
case 0x088B4C54u: goto SB_L_088B4C54;
|
|
case 0x088B4C7Cu: goto SB_L_088B4C7C;
|
|
case 0x088B4D08u: goto SB_L_088B4D08;
|
|
case 0x088B4D14u: goto SB_L_088B4D14;
|
|
case 0x088B4D1Cu: goto SB_L_088B4D1C;
|
|
case 0x088B4D30u: goto SB_L_088B4D30;
|
|
case 0x088B4D6Cu: goto SB_L_088B4D6C;
|
|
case 0x088B4D94u: goto SB_L_088B4D94;
|
|
case 0x088B4DA0u: goto SB_L_088B4DA0;
|
|
case 0x088B4DB4u: goto SB_L_088B4DB4;
|
|
case 0x088B4DB8u: goto SB_L_088B4DB8;
|
|
case 0x088B4DD8u: goto SB_L_088B4DD8;
|
|
case 0x088B4DE0u: goto SB_L_088B4DE0;
|
|
case 0x088B4DE4u: goto SB_L_088B4DE4;
|
|
case 0x088B4DF8u: goto SB_L_088B4DF8;
|
|
case 0x088B4E08u: goto SB_L_088B4E08;
|
|
case 0x088B4E0Cu: goto SB_L_088B4E0C;
|
|
case 0x088B4E34u: goto SB_L_088B4E34;
|
|
case 0x088B4E3Cu: goto SB_L_088B4E3C;
|
|
case 0x088B4E40u: goto SB_L_088B4E40;
|
|
case 0x088B4E50u: goto SB_L_088B4E50;
|
|
case 0x088B4E54u: goto SB_L_088B4E54;
|
|
case 0x088B4E80u: goto SB_L_088B4E80;
|
|
case 0x088B4E94u: goto SB_L_088B4E94;
|
|
case 0x088B4EACu: goto SB_L_088B4EAC;
|
|
case 0x088B4EBCu: goto SB_L_088B4EBC;
|
|
case 0x088B4EE4u: goto SB_L_088B4EE4;
|
|
case 0x088B4F60u: goto SB_L_088B4F60;
|
|
case 0x088B4F70u: goto SB_L_088B4F70;
|
|
case 0x088B4F74u: goto SB_L_088B4F74;
|
|
default:
|
|
ctx.pc = local_pc;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
|
|
|
|
TIER2_ENTRY_DISPATCH:
|
|
switch (entry_pc) {
|
|
case 0x088B4738u: goto SB_L_088B4738;
|
|
default:
|
|
ctx.pc = entry_pc;
|
|
++tier2_stats.fallbacks;
|
|
TIER2_SB_RETURN();
|
|
}
|
|
|
|
// TIER2_GPR_BODY_BEGIN
|
|
SB_L_088B4738:
|
|
ctx.gpr[29] = (ctx.gpr[29] + static_cast<std::uint32_t>(-352));
|
|
{ const std::uint32_t tier2_words[11]{std::bit_cast<std::uint32_t>(ctx.fpr[20]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]};
|
|
tier2_mem.aot_store32_block(ctx.gpr[29] + static_cast<std::uint32_t>(296), tier2_words); }
|
|
{ const std::uint32_t vfpu_address = ctx.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[4] + 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<1u, 4u>(vfpu_value); }
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[4] + 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<2u, 4u>(vfpu_value); }
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[4] + static_cast<std::uint32_t>(48);
|
|
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<3u, 4u>(vfpu_value); }
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[6] + 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<36u, 4u>(vfpu_value); }
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[6] + 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<37u, 4u>(vfpu_value); }
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[6] + 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<38u, 4u>(vfpu_value); }
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[6] + static_cast<std::uint32_t>(48);
|
|
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<19u, 4u>(vfpu_value); }
|
|
{ float vfpu_value[4]{};
|
|
ctx.write_vfpu_vector_with_destination_prefix_ct<39u, 3u>(vfpu_value); }
|
|
{ float vfpu_value[4]{};
|
|
ctx.write_vfpu_vector_with_destination_prefix_ct<35u, 3u>(vfpu_value); }
|
|
ctx.execute_vfpu_vtfm_ct<7u, 36u, 19u, 3u, 3u>();
|
|
ctx.execute_vfpu_unary_ct<7u, 7u, 3u, 2u>();
|
|
{ float vfpu_value[4]{1.0f, 1.0f, 1.0f, 1.0f};
|
|
ctx.write_vfpu_vector_with_destination_prefix_ct<99u, 1u>(vfpu_value); }
|
|
{ float vfpu_value[4]{1.0f, 1.0f, 1.0f, 1.0f};
|
|
ctx.write_vfpu_vector_with_destination_prefix_ct<103u, 1u>(vfpu_value); }
|
|
{ float vfpu_s[16]{}, vfpu_t[16]{}, vfpu_d[16]{};
|
|
ctx.read_vfpu_matrix(vfpu_s, 0u, 4u);
|
|
ctx.read_vfpu_matrix(vfpu_t, 36u, 4u);
|
|
psprecomp::vcs_tier2_mat4_mul_ordered(vfpu_s, vfpu_t, vfpu_d);
|
|
ctx.write_vfpu_matrix(vfpu_d, 44u, 4u);
|
|
ctx.eat_vfpu_prefixes(); }
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[5] + 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<8u, 4u>(vfpu_value); }
|
|
ctx.gpr[4] = (ctx.gpr[7] + static_cast<std::uint32_t>(16));
|
|
{ const std::uint32_t vfpu_address = ctx.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<28u, 4u>(vfpu_value); }
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[4] + 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<29u, 4u>(vfpu_value); }
|
|
ctx.execute_vfpu_unary_ct<117u, 104u, 1u, 0u>();
|
|
ctx.execute_vfpu_unary_ct<118u, 104u, 1u, 0u>();
|
|
ctx.execute_vfpu_unary_ct<116u, 104u, 1u, 0u>();
|
|
ctx.execute_vfpu_vtfm_ct<20u, 44u, 8u, 3u, 3u>();
|
|
ctx.execute_vfpu_vec3_ct<20u, 20u, 15u, 3u, 0u>();
|
|
ctx.execute_vfpu_vec3_ct<16u, 28u, 55u, 3u, 1u>();
|
|
ctx.execute_vfpu_vec3_ct<17u, 29u, 55u, 3u, 0u>();
|
|
ctx.gpr[4] = (ctx.gpr[29] + static_cast<std::uint32_t>(16));
|
|
{ float vfpu_value[4]{}; ctx.read_vfpu_vector_ct<20u, 4u>(vfpu_value);
|
|
const std::uint32_t vfpu_address = ctx.gpr[4] + 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.execute_vfpu_vcmp_ct<20u, 16u, 3u, 2u>();
|
|
{ const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4810;
|
|
}
|
|
goto SB_L_088B47E4;
|
|
}
|
|
|
|
SB_L_088B47E4:
|
|
ctx.execute_vfpu_vcmp_ct<20u, 17u, 3u, 7u>();
|
|
{ const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4810;
|
|
}
|
|
goto SB_L_088B47F0;
|
|
}
|
|
|
|
SB_L_088B47F0:
|
|
ctx.gpr[2] = (0u + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[2] = (ctx.gpr[2] & 255u);
|
|
ctx.execute_vfpu_vtfm_ct<35u, 0u, 3u, 3u, 3u>();
|
|
{ float vfpu_value[4]{};
|
|
ctx.write_vfpu_vector_with_destination_prefix_ct<3u, 3u>(vfpu_value); }
|
|
ctx.execute_vfpu_unary_ct<35u, 35u, 3u, 2u>();
|
|
ctx.execute_vfpu_unary_ct<39u, 19u, 3u, 0u>();
|
|
{ float vfpu_value[4]{};
|
|
ctx.write_vfpu_vector_with_destination_prefix_ct<7u, 3u>(vfpu_value); }
|
|
{ float vfpu_s[16]{}, vfpu_t[16]{}, vfpu_d[16]{};
|
|
ctx.read_vfpu_matrix(vfpu_s, 36u, 4u);
|
|
ctx.read_vfpu_matrix(vfpu_t, 0u, 4u);
|
|
psprecomp::vcs_tier2_mat4_mul_ordered(vfpu_s, vfpu_t, vfpu_d);
|
|
ctx.write_vfpu_matrix(vfpu_d, 48u, 4u);
|
|
ctx.eat_vfpu_prefixes(); }
|
|
goto SB_L_088B4810;
|
|
|
|
SB_L_088B4810:
|
|
ctx.gpr[30] = (ctx.gpr[5] | 0u);
|
|
ctx.gpr[23] = (ctx.gpr[7] | 0u);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(256), ctx.gpr[6]);
|
|
ctx.gpr[17] = (ctx.gpr[9] | 0u);
|
|
ctx.gpr[18] = (ctx.gpr[10] | 0u);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(292), ctx.gpr[8]);
|
|
{ const bool branch_taken = ctx.gpr[2] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B48A0;
|
|
}
|
|
goto SB_L_088B4830;
|
|
}
|
|
|
|
SB_L_088B4830:
|
|
ctx.gpr[4] = (ctx.gpr[30] | 0u);
|
|
ctx.gpr[31] = (0x088B483Cu);
|
|
ctx.gpr[5] = (ctx.gpr[23] | 0u);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 138u, 0x088B0E34u>(ctx, &aot_mem) && ctx.pc == 0x088B483Cu) goto SB_L_088B483C;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B483C:
|
|
ctx.gpr[4] = (tier2_mem.aot_load8(ctx.gpr[30] + static_cast<std::uint32_t>(53)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(276), ctx.gpr[2]);
|
|
ctx.gpr[5] = (ctx.gpr[4] | ctx.gpr[2]);
|
|
{ const bool branch_taken = ctx.gpr[5] == 0u;
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(272), ctx.gpr[4]);
|
|
if (branch_taken) {
|
|
goto SB_L_088B4898;
|
|
}
|
|
goto SB_L_088B4850;
|
|
}
|
|
|
|
SB_L_088B4850:
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(288), ctx.gpr[18]);
|
|
ctx.gpr[31] = (0x088B485Cu);
|
|
ctx.gpr[4] = (ctx.gpr[30] | 0u);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 135u, 0x088B0DD4u>(ctx, &aot_mem) && ctx.pc == 0x088B485Cu) goto SB_L_088B485C;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B485C:
|
|
ctx.gpr[6] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(276)));
|
|
ctx.gpr[4] = (ctx.gpr[23] | 0u);
|
|
ctx.gpr[31] = (0x088B486Cu);
|
|
ctx.gpr[5] = (ctx.gpr[30] | 0u);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 145u, 0x088B0EE0u>(ctx, &aot_mem) && ctx.pc == 0x088B486Cu) goto SB_L_088B486C;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B486C:
|
|
ctx.gpr[19] = (ctx.gpr[2] | 0u);
|
|
ctx.gpr[31] = (0x088B4878u);
|
|
ctx.gpr[4] = (ctx.gpr[23] | 0u);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 152u, 0x088B0FA4u>(ctx, &aot_mem) && ctx.pc == 0x088B4878u) goto SB_L_088B4878;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B4878:
|
|
ctx.gpr[30] = (ctx.gpr[2] | 0u);
|
|
ctx.gpr[16] = (2235u << 16u);
|
|
ctx.gpr[16] = (ctx.gpr[16] + static_cast<std::uint32_t>(28480));
|
|
ctx.gpr[8] = (2236u << 16u);
|
|
{ const bool branch_taken = ctx.gpr[17] != 0u;
|
|
ctx.gpr[8] = (ctx.gpr[8] + static_cast<std::uint32_t>(-28864));
|
|
if (branch_taken) {
|
|
goto SB_L_088B48A8;
|
|
}
|
|
goto SB_L_088B4890;
|
|
}
|
|
|
|
SB_L_088B4890:
|
|
{ const bool branch_taken = 0u == 0u;
|
|
ctx.gpr[11] = (ctx.gpr[8] | 0u);
|
|
if (branch_taken) {
|
|
goto SB_L_088B48F4;
|
|
}
|
|
goto SB_L_088B4898;
|
|
}
|
|
|
|
SB_L_088B4898:
|
|
{ const bool branch_taken = 0u == 0u;
|
|
ctx.gpr[2] = (0u | 0u);
|
|
if (branch_taken) {
|
|
goto SB_L_088B4F74;
|
|
}
|
|
goto SB_L_088B48A0;
|
|
}
|
|
|
|
SB_L_088B48A0:
|
|
{ const bool branch_taken = 0u == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4F74;
|
|
}
|
|
goto SB_L_088B48A8;
|
|
}
|
|
|
|
SB_L_088B48A8:
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(288), ctx.gpr[18]);
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(272)));
|
|
ctx.gpr[4] = (0u | 0u);
|
|
ctx.gpr[5] = (static_cast<std::int32_t>(ctx.gpr[4]) < static_cast<std::int32_t>(ctx.gpr[5]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[5] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B48F0;
|
|
}
|
|
goto SB_L_088B48C0;
|
|
}
|
|
|
|
SB_L_088B48C0:
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(288), ctx.gpr[18]);
|
|
ctx.gpr[5] = (0u | 0u);
|
|
ctx.gpr[5] = (ctx.gpr[17] + ctx.gpr[5]);
|
|
ctx.gpr[6] = (ctx.gpr[18] | 0u);
|
|
ctx.gpr[7] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(272)));
|
|
goto SB_L_088B48D4;
|
|
|
|
SB_L_088B48D4:
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[6] + static_cast<std::uint32_t>(0)));
|
|
tier2_mem.aot_store32(ctx.gpr[5] + static_cast<std::uint32_t>(12), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.gpr[4] = (ctx.gpr[4] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[5] = (ctx.gpr[5] + static_cast<std::uint32_t>(32));
|
|
ctx.gpr[9] = (static_cast<std::int32_t>(ctx.gpr[4]) < static_cast<std::int32_t>(ctx.gpr[7]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[9] != 0u;
|
|
ctx.gpr[6] = (ctx.gpr[6] + static_cast<std::uint32_t>(4));
|
|
if (branch_taken) {
|
|
goto SB_L_088B48D4;
|
|
}
|
|
goto SB_L_088B48F0;
|
|
}
|
|
|
|
SB_L_088B48F0:
|
|
ctx.gpr[11] = (ctx.gpr[8] | 0u);
|
|
goto SB_L_088B48F4;
|
|
|
|
SB_L_088B48F4:
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(224), ctx.gpr[19]);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(284), ctx.gpr[17]);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(280), ctx.gpr[11]);
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(68)));
|
|
ctx.gpr[5] = (tier2_mem.aot_load8(ctx.gpr[23] + static_cast<std::uint32_t>(54)));
|
|
ctx.gpr[5] = (ctx.gpr[5] << 4u);
|
|
ctx.gpr[5] = (ctx.gpr[4] + ctx.gpr[5]);
|
|
ctx.gpr[6] = (tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(76)));
|
|
ctx.gpr[7] = (tier2_mem.aot_load16(ctx.gpr[23] + static_cast<std::uint32_t>(50)));
|
|
ctx.gpr[8] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(276)));
|
|
ctx.gpr[9] = (tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(72)));
|
|
ctx.gpr[2] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(272)));
|
|
ctx.gpr[10] = (ctx.gpr[8] << 6u);
|
|
ctx.gpr[10] = (ctx.gpr[10] + ctx.gpr[16]);
|
|
ctx.gpr[8] = (ctx.gpr[2] << 5u);
|
|
ctx.gpr[2] = (ctx.gpr[8] + ctx.gpr[11]);
|
|
ctx.gpr[8] = (ctx.gpr[9] | 0u);
|
|
ctx.gpr[9] = (ctx.gpr[16] | 0u);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(0), ctx.gpr[2]);
|
|
ctx.gpr[31] = (0x088B4948u);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(4), ctx.gpr[17]);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 75u, 0x088B08ACu>(ctx, &aot_mem) && ctx.pc == 0x088B4948u) goto SB_L_088B4948;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B4948:
|
|
ctx.gpr[4] = (ctx.gpr[30] | ctx.gpr[19]);
|
|
ctx.gpr[4] = (ctx.gpr[4] | ctx.gpr[2]);
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4960;
|
|
}
|
|
goto SB_L_088B4958;
|
|
}
|
|
|
|
SB_L_088B4958:
|
|
{ const bool branch_taken = 0u == 0u;
|
|
ctx.gpr[2] = (0u | 0u);
|
|
if (branch_taken) {
|
|
goto SB_L_088B4F74;
|
|
}
|
|
goto SB_L_088B4960;
|
|
}
|
|
|
|
SB_L_088B4960:
|
|
ctx.gpr[4] = (0u | 0u);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(260), ctx.gpr[4]);
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(276)));
|
|
ctx.gpr[5] = (0u | 0u);
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[5]) < static_cast<std::int32_t>(ctx.gpr[4]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] == 0u;
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(252), ctx.gpr[5]);
|
|
if (branch_taken) {
|
|
goto SB_L_088B4C28;
|
|
}
|
|
goto SB_L_088B497C;
|
|
}
|
|
|
|
SB_L_088B497C:
|
|
ctx.gpr[21] = (ctx.gpr[29] + static_cast<std::uint32_t>(80));
|
|
ctx.gpr[4] = (2236u << 16u);
|
|
ctx.gpr[4] = (ctx.gpr[4] + static_cast<std::uint32_t>(-27840));
|
|
ctx.gpr[20] = (ctx.gpr[29] + static_cast<std::uint32_t>(64));
|
|
ctx.gpr[5] = (2236u << 16u);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(264), ctx.gpr[4]);
|
|
ctx.gpr[4] = (ctx.gpr[5] + static_cast<std::uint32_t>(-28352));
|
|
ctx.gpr[5] = (19224u << 16u);
|
|
ctx.gpr[5] = (ctx.gpr[5] | 38528u);
|
|
ctx.fpr[20] = std::bit_cast<float>(ctx.gpr[5]);
|
|
ctx.gpr[5] = (ctx.gpr[16] + static_cast<std::uint32_t>(16));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(268), ctx.gpr[4]);
|
|
ctx.gpr[4] = (ctx.gpr[16] + static_cast<std::uint32_t>(32));
|
|
ctx.gpr[6] = (ctx.gpr[16] + static_cast<std::uint32_t>(44));
|
|
ctx.gpr[7] = (ctx.gpr[16] + static_cast<std::uint32_t>(46));
|
|
ctx.gpr[8] = (0u | 0u);
|
|
ctx.gpr[19] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(292)));
|
|
ctx.gpr[22] = (ctx.gpr[16] | 0u);
|
|
ctx.gpr[9] = (0u | 0u);
|
|
ctx.gpr[19] = (ctx.gpr[19] + ctx.gpr[9]);
|
|
ctx.gpr[5] = (ctx.gpr[8] + ctx.gpr[5]);
|
|
ctx.gpr[4] = (ctx.gpr[8] + ctx.gpr[4]);
|
|
ctx.gpr[6] = (ctx.gpr[8] + ctx.gpr[6]);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(248), ctx.gpr[5]);
|
|
ctx.gpr[5] = (ctx.gpr[8] + ctx.gpr[7]);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(244), ctx.gpr[4]);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(236), ctx.gpr[6]);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(240), ctx.gpr[5]);
|
|
goto SB_L_088B49EC;
|
|
|
|
SB_L_088B49EC:
|
|
ctx.gpr[18] = (0u | 0u);
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(28)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(64), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[12] < ctx.fpr[20])) ? 0x00800000u : 0u);
|
|
// nop
|
|
{ const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u);
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(236)));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4AC8;
|
|
}
|
|
goto SB_L_088B4A08;
|
|
}
|
|
|
|
SB_L_088B4A08:
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(248)));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[5] + static_cast<std::uint32_t>(0)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(112), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[5] + static_cast<std::uint32_t>(4)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(116), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[5] + static_cast<std::uint32_t>(8)));
|
|
ctx.gpr[5] = (ctx.gpr[29] + static_cast<std::uint32_t>(112));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(120), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[5] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[6] = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[5] + static_cast<std::uint32_t>(4)));
|
|
ctx.gpr[7] = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
|
|
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[5] + static_cast<std::uint32_t>(8)));
|
|
ctx.gpr[8] = (std::bit_cast<std::uint32_t>(ctx.fpr[14]));
|
|
tier2_mem.aot_store32(ctx.gpr[19] + static_cast<std::uint32_t>(0), ctx.gpr[6]);
|
|
tier2_mem.aot_store32(ctx.gpr[19] + static_cast<std::uint32_t>(4), ctx.gpr[7]);
|
|
ctx.gpr[6] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(244)));
|
|
tier2_mem.aot_store32(ctx.gpr[19] + static_cast<std::uint32_t>(8), ctx.gpr[8]);
|
|
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[6] + static_cast<std::uint32_t>(0)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(112), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[6] + static_cast<std::uint32_t>(4)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(116), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[6] + static_cast<std::uint32_t>(8)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(120), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.gpr[6] = (ctx.gpr[19] + static_cast<std::uint32_t>(16));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[5] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[7] = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[5] + static_cast<std::uint32_t>(4)));
|
|
ctx.gpr[8] = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
|
|
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[5] + static_cast<std::uint32_t>(8)));
|
|
ctx.gpr[5] = (std::bit_cast<std::uint32_t>(ctx.fpr[14]));
|
|
{ const std::uint32_t tier2_words[3]{ctx.gpr[7], ctx.gpr[8], ctx.gpr[5]};
|
|
tier2_mem.aot_store32_block(ctx.gpr[6] + static_cast<std::uint32_t>(0), tier2_words); }
|
|
ctx.gpr[5] = (ctx.gpr[19] + static_cast<std::uint32_t>(28));
|
|
ctx.gpr[6] = (tier2_mem.aot_load8(ctx.gpr[4] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[7] = (tier2_mem.aot_load8(ctx.gpr[4] + static_cast<std::uint32_t>(1)));
|
|
tier2_mem.aot_store8(ctx.gpr[5] + static_cast<std::uint32_t>(0), static_cast<std::uint8_t>(ctx.gpr[6]));
|
|
tier2_mem.aot_store8(ctx.gpr[5] + static_cast<std::uint32_t>(1), static_cast<std::uint8_t>(ctx.gpr[7]));
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(240)));
|
|
ctx.gpr[6] = (ctx.gpr[19] + static_cast<std::uint32_t>(30));
|
|
ctx.gpr[7] = (tier2_mem.aot_load8(ctx.gpr[5] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[5] = (tier2_mem.aot_load8(ctx.gpr[5] + static_cast<std::uint32_t>(1)));
|
|
tier2_mem.aot_store8(ctx.gpr[6] + static_cast<std::uint32_t>(0), static_cast<std::uint8_t>(ctx.gpr[7]));
|
|
tier2_mem.aot_store8(ctx.gpr[6] + static_cast<std::uint32_t>(1), static_cast<std::uint8_t>(ctx.gpr[5]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(48)));
|
|
tier2_mem.aot_store32(ctx.gpr[19] + static_cast<std::uint32_t>(12), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.gpr[18] = (0u | 1u);
|
|
goto SB_L_088B4AC8;
|
|
|
|
SB_L_088B4AC8:
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[5] = (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)));
|
|
ctx.gpr[6] = (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)));
|
|
ctx.gpr[7] = (std::bit_cast<std::uint32_t>(ctx.fpr[14]));
|
|
{ const std::uint32_t tier2_words[3]{ctx.gpr[5], ctx.gpr[6], ctx.gpr[7]};
|
|
tier2_mem.aot_store32_block(ctx.gpr[29] + static_cast<std::uint32_t>(80), tier2_words); }
|
|
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[22] + static_cast<std::uint32_t>(12)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(92), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
|
|
ctx.gpr[5] = (tier2_mem.aot_load8(ctx.gpr[4] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[4] = (tier2_mem.aot_load8(ctx.gpr[4] + static_cast<std::uint32_t>(1)));
|
|
tier2_mem.aot_store8(ctx.gpr[29] + static_cast<std::uint32_t>(96), static_cast<std::uint8_t>(ctx.gpr[5]));
|
|
tier2_mem.aot_store8(ctx.gpr[29] + static_cast<std::uint32_t>(97), static_cast<std::uint8_t>(ctx.gpr[4]));
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(224)));
|
|
ctx.gpr[17] = (0u | 0u);
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[17]) < static_cast<std::int32_t>(ctx.gpr[4]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4B5C;
|
|
}
|
|
goto SB_L_088B4B18;
|
|
}
|
|
|
|
SB_L_088B4B18:
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(268)));
|
|
goto SB_L_088B4B1C;
|
|
|
|
SB_L_088B4B1C:
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(56)));
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[4] = (ctx.gpr[4] << 5u);
|
|
ctx.gpr[5] = (ctx.gpr[5] + ctx.gpr[4]);
|
|
ctx.gpr[4] = (ctx.gpr[21] | 0u);
|
|
ctx.gpr[6] = (ctx.gpr[19] | 0u);
|
|
ctx.gpr[31] = (0x088B4B3Cu);
|
|
ctx.gpr[7] = (ctx.gpr[20] | 0u);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 159u, 0x088B1028u>(ctx, &aot_mem) && ctx.pc == 0x088B4B3Cu) goto SB_L_088B4B3C;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B4B3C:
|
|
{ const bool branch_taken = ctx.gpr[2] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4B48;
|
|
}
|
|
goto SB_L_088B4B44;
|
|
}
|
|
|
|
SB_L_088B4B44:
|
|
ctx.gpr[18] = (0u | 1u);
|
|
goto SB_L_088B4B48;
|
|
|
|
SB_L_088B4B48:
|
|
ctx.gpr[17] = (ctx.gpr[17] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(224)));
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[17]) < static_cast<std::int32_t>(ctx.gpr[4]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
ctx.gpr[16] = (ctx.gpr[16] + static_cast<std::uint32_t>(4));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4B1C;
|
|
}
|
|
goto SB_L_088B4B5C;
|
|
}
|
|
|
|
SB_L_088B4B5C:
|
|
ctx.gpr[17] = (0u | 0u);
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[17]) < static_cast<std::int32_t>(ctx.gpr[30]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4BB4;
|
|
}
|
|
goto SB_L_088B4B6C;
|
|
}
|
|
|
|
SB_L_088B4B6C:
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(264)));
|
|
goto SB_L_088B4B70;
|
|
|
|
SB_L_088B4B70:
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(64)));
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[4] = (ctx.gpr[4] << 4u);
|
|
ctx.gpr[6] = (ctx.gpr[4] + ctx.gpr[4]);
|
|
ctx.gpr[4] = (ctx.gpr[4] + ctx.gpr[6]);
|
|
ctx.gpr[5] = (ctx.gpr[5] + ctx.gpr[4]);
|
|
ctx.gpr[4] = (ctx.gpr[21] | 0u);
|
|
ctx.gpr[6] = (ctx.gpr[19] | 0u);
|
|
ctx.gpr[31] = (0x088B4B98u);
|
|
ctx.gpr[7] = (ctx.gpr[20] | 0u);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 239u, 0x088B1C50u>(ctx, &aot_mem) && ctx.pc == 0x088B4B98u) goto SB_L_088B4B98;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B4B98:
|
|
{ const bool branch_taken = ctx.gpr[2] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4BA4;
|
|
}
|
|
goto SB_L_088B4BA0;
|
|
}
|
|
|
|
SB_L_088B4BA0:
|
|
ctx.gpr[18] = (0u | 1u);
|
|
goto SB_L_088B4BA4;
|
|
|
|
SB_L_088B4BA4:
|
|
ctx.gpr[17] = (ctx.gpr[17] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[17]) < static_cast<std::int32_t>(ctx.gpr[30]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
ctx.gpr[16] = (ctx.gpr[16] + static_cast<std::uint32_t>(4));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4B70;
|
|
}
|
|
goto SB_L_088B4BB4;
|
|
}
|
|
|
|
SB_L_088B4BB4:
|
|
if (ctx.gpr[18] == 0u) {
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(252)));
|
|
goto SB_L_088B4BE0;
|
|
}
|
|
goto SB_L_088B4BBC;
|
|
|
|
SB_L_088B4BBC:
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(260)));
|
|
ctx.gpr[4] = (ctx.gpr[4] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[19] = (ctx.gpr[19] + static_cast<std::uint32_t>(32));
|
|
ctx.gpr[5] = (static_cast<std::int32_t>(ctx.gpr[4]) < 32 ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[5] != 0u;
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(260), ctx.gpr[4]);
|
|
if (branch_taken) {
|
|
goto SB_L_088B4BDC;
|
|
}
|
|
goto SB_L_088B4BD4;
|
|
}
|
|
|
|
SB_L_088B4BD4:
|
|
{ const bool branch_taken = 0u == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4C28;
|
|
}
|
|
goto SB_L_088B4BDC;
|
|
}
|
|
|
|
SB_L_088B4BDC:
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(252)));
|
|
goto SB_L_088B4BE0;
|
|
|
|
SB_L_088B4BE0:
|
|
ctx.gpr[4] = (ctx.gpr[4] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[22] = (ctx.gpr[22] + static_cast<std::uint32_t>(64));
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(248)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(252), ctx.gpr[4]);
|
|
ctx.gpr[6] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(236)));
|
|
ctx.gpr[7] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(244)));
|
|
ctx.gpr[5] = (ctx.gpr[5] + static_cast<std::uint32_t>(64));
|
|
ctx.gpr[8] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(240)));
|
|
ctx.gpr[7] = (ctx.gpr[7] + static_cast<std::uint32_t>(64));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(248), ctx.gpr[5]);
|
|
ctx.gpr[5] = (ctx.gpr[6] + static_cast<std::uint32_t>(64));
|
|
ctx.gpr[6] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(276)));
|
|
ctx.gpr[8] = (ctx.gpr[8] + static_cast<std::uint32_t>(64));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(244), ctx.gpr[7]);
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[4]) < static_cast<std::int32_t>(ctx.gpr[6]) ? 1u : 0u);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(236), ctx.gpr[5]);
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(240), ctx.gpr[8]);
|
|
if (branch_taken) {
|
|
goto SB_L_088B49EC;
|
|
}
|
|
goto SB_L_088B4C28;
|
|
}
|
|
|
|
SB_L_088B4C28:
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(260)));
|
|
ctx.gpr[18] = (0u | 0u);
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[18]) < static_cast<std::int32_t>(ctx.gpr[4]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] == 0u;
|
|
ctx.gpr[17] = (ctx.gpr[29] + static_cast<std::uint32_t>(128));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4D08;
|
|
}
|
|
goto SB_L_088B4C3C;
|
|
}
|
|
|
|
SB_L_088B4C3C:
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(292)));
|
|
ctx.gpr[19] = (ctx.gpr[29] + static_cast<std::uint32_t>(144));
|
|
ctx.gpr[4] = (0u | 0u);
|
|
ctx.gpr[16] = (ctx.gpr[16] + ctx.gpr[4]);
|
|
ctx.gpr[20] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(256)));
|
|
ctx.gpr[21] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(260)));
|
|
goto SB_L_088B4C54;
|
|
|
|
SB_L_088B4C54:
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(0)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(144), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(4)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(148), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(8)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(152), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.gpr[4] = (ctx.gpr[17] | 0u);
|
|
ctx.gpr[5] = (ctx.gpr[20] | 0u);
|
|
ctx.gpr[31] = (0x088B4C7Cu);
|
|
ctx.gpr[6] = (ctx.gpr[19] | 0u);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 73u, 0x088B086Cu>(ctx, &aot_mem) && ctx.pc == 0x088B4C7Cu) goto SB_L_088B4C7C;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B4C7C:
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[4] = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(4)));
|
|
ctx.gpr[5] = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
|
|
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(8)));
|
|
ctx.gpr[6] = (std::bit_cast<std::uint32_t>(ctx.fpr[14]));
|
|
{ const std::uint32_t tier2_words[3]{ctx.gpr[4], ctx.gpr[5], ctx.gpr[6]};
|
|
tier2_mem.aot_store32_block(ctx.gpr[16] + static_cast<std::uint32_t>(0), tier2_words); }
|
|
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(16)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(144), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
|
|
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(20)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(148), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(24)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(152), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[20] + 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 = ctx.gpr[20] + 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 = ctx.gpr[20] + 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 = ctx.gpr[19] + 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); }
|
|
ctx.execute_vfpu_vtfm_ct<0u, 36u, 7u, 3u, 3u>();
|
|
{ float vfpu_value[4]{}; ctx.read_vfpu_vector_ct<0u, 4u>(vfpu_value);
|
|
const std::uint32_t vfpu_address = ctx.gpr[17] + 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.gpr[4] = (ctx.gpr[16] + static_cast<std::uint32_t>(16));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[5] = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(4)));
|
|
ctx.gpr[6] = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
|
|
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + 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]{ctx.gpr[5], ctx.gpr[6], ctx.gpr[7]};
|
|
tier2_mem.aot_store32_block(ctx.gpr[4] + static_cast<std::uint32_t>(0), tier2_words); }
|
|
ctx.gpr[18] = (ctx.gpr[18] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[18]) < static_cast<std::int32_t>(ctx.gpr[21]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
ctx.gpr[16] = (ctx.gpr[16] + static_cast<std::uint32_t>(32));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4C54;
|
|
}
|
|
goto SB_L_088B4D08;
|
|
}
|
|
|
|
SB_L_088B4D08:
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(284)));
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4D1C;
|
|
}
|
|
goto SB_L_088B4D14;
|
|
}
|
|
|
|
SB_L_088B4D14:
|
|
{ const bool branch_taken = 0u == 0u;
|
|
ctx.gpr[2] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(260)));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4F74;
|
|
}
|
|
goto SB_L_088B4D1C;
|
|
}
|
|
|
|
SB_L_088B4D1C:
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(272)));
|
|
ctx.gpr[6] = (0u | 0u);
|
|
ctx.gpr[5] = (static_cast<std::int32_t>(ctx.gpr[6]) < static_cast<std::int32_t>(ctx.gpr[5]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[5] == 0u;
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(232), ctx.gpr[6]);
|
|
if (branch_taken) {
|
|
goto SB_L_088B4E80;
|
|
}
|
|
goto SB_L_088B4D30;
|
|
}
|
|
|
|
SB_L_088B4D30:
|
|
ctx.gpr[5] = (2236u << 16u);
|
|
ctx.gpr[5] = (ctx.gpr[5] + static_cast<std::uint32_t>(-27840));
|
|
ctx.gpr[22] = (0u | 1u);
|
|
ctx.gpr[6] = (2236u << 16u);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(264), ctx.gpr[5]);
|
|
ctx.gpr[5] = (ctx.gpr[6] + static_cast<std::uint32_t>(-28352));
|
|
ctx.gpr[21] = (0u | 0u);
|
|
ctx.gpr[19] = (ctx.gpr[4] + ctx.gpr[21]);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(268), ctx.gpr[5]);
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(288)));
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(280)));
|
|
ctx.gpr[20] = (0u | 0u);
|
|
ctx.gpr[21] = (ctx.gpr[21] + ctx.gpr[5]);
|
|
ctx.gpr[20] = (ctx.gpr[4] + ctx.gpr[20]);
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(228), ctx.gpr[4]);
|
|
goto SB_L_088B4D6C;
|
|
|
|
SB_L_088B4D6C:
|
|
ctx.gpr[18] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(232)));
|
|
ctx.gpr[18] = (ctx.gpr[29] + ctx.gpr[18]);
|
|
tier2_mem.aot_store8(ctx.gpr[18] + static_cast<std::uint32_t>(48), static_cast<std::uint8_t>(0u));
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(228)));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[19] + static_cast<std::uint32_t>(12)));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[4] + static_cast<std::uint32_t>(0)));
|
|
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_088B4DA0;
|
|
}
|
|
goto SB_L_088B4D94;
|
|
}
|
|
|
|
SB_L_088B4D94:
|
|
tier2_mem.aot_store8(ctx.gpr[18] + static_cast<std::uint32_t>(48), static_cast<std::uint8_t>(ctx.gpr[22]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[19] + static_cast<std::uint32_t>(12)));
|
|
tier2_mem.aot_store32(ctx.gpr[4] + static_cast<std::uint32_t>(0), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
goto SB_L_088B4DA0;
|
|
|
|
SB_L_088B4DA0:
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(224)));
|
|
ctx.gpr[17] = (0u | 0u);
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[17]) < static_cast<std::int32_t>(ctx.gpr[4]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4DF8;
|
|
}
|
|
goto SB_L_088B4DB4;
|
|
}
|
|
|
|
SB_L_088B4DB4:
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(268)));
|
|
goto SB_L_088B4DB8;
|
|
|
|
SB_L_088B4DB8:
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(56)));
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[4] = (ctx.gpr[4] << 5u);
|
|
ctx.gpr[5] = (ctx.gpr[5] + ctx.gpr[4]);
|
|
ctx.gpr[4] = (ctx.gpr[21] | 0u);
|
|
ctx.gpr[6] = (ctx.gpr[19] | 0u);
|
|
ctx.gpr[31] = (0x088B4DD8u);
|
|
ctx.gpr[7] = (ctx.gpr[20] | 0u);
|
|
ctx.pc = 0x088B1554u;
|
|
rt.invoke_native_fast_path(0x088B1554u, ctx);
|
|
if (ctx.pc == 0x088B4DD8u) goto SB_L_088B4DD8;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B4DD8:
|
|
{ const bool branch_taken = ctx.gpr[2] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4DE4;
|
|
}
|
|
goto SB_L_088B4DE0;
|
|
}
|
|
|
|
SB_L_088B4DE0:
|
|
tier2_mem.aot_store8(ctx.gpr[18] + static_cast<std::uint32_t>(48), static_cast<std::uint8_t>(ctx.gpr[22]));
|
|
goto SB_L_088B4DE4;
|
|
|
|
SB_L_088B4DE4:
|
|
ctx.gpr[17] = (ctx.gpr[17] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(224)));
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[17]) < static_cast<std::int32_t>(ctx.gpr[4]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
ctx.gpr[16] = (ctx.gpr[16] + static_cast<std::uint32_t>(4));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4DB8;
|
|
}
|
|
goto SB_L_088B4DF8;
|
|
}
|
|
|
|
SB_L_088B4DF8:
|
|
ctx.gpr[17] = (0u | 0u);
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[17]) < static_cast<std::int32_t>(ctx.gpr[30]) ? 1u : 0u);
|
|
if (ctx.gpr[4] == 0u) {
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(232)));
|
|
goto SB_L_088B4E54;
|
|
}
|
|
goto SB_L_088B4E08;
|
|
|
|
SB_L_088B4E08:
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(264)));
|
|
goto SB_L_088B4E0C;
|
|
|
|
SB_L_088B4E0C:
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[23] + static_cast<std::uint32_t>(64)));
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[16] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[4] = (ctx.gpr[4] << 4u);
|
|
ctx.gpr[6] = (ctx.gpr[4] + ctx.gpr[4]);
|
|
ctx.gpr[4] = (ctx.gpr[4] + ctx.gpr[6]);
|
|
ctx.gpr[5] = (ctx.gpr[5] + ctx.gpr[4]);
|
|
ctx.gpr[4] = (ctx.gpr[21] | 0u);
|
|
ctx.gpr[6] = (ctx.gpr[19] | 0u);
|
|
ctx.gpr[31] = (0x088B4E34u);
|
|
ctx.gpr[7] = (ctx.gpr[20] | 0u);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 382u, 0x088B3060u>(ctx, &aot_mem) && ctx.pc == 0x088B4E34u) goto SB_L_088B4E34;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B4E34:
|
|
{ const bool branch_taken = ctx.gpr[2] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4E40;
|
|
}
|
|
goto SB_L_088B4E3C;
|
|
}
|
|
|
|
SB_L_088B4E3C:
|
|
tier2_mem.aot_store8(ctx.gpr[18] + static_cast<std::uint32_t>(48), static_cast<std::uint8_t>(ctx.gpr[22]));
|
|
goto SB_L_088B4E40;
|
|
|
|
SB_L_088B4E40:
|
|
ctx.gpr[17] = (ctx.gpr[17] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[17]) < static_cast<std::int32_t>(ctx.gpr[30]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
ctx.gpr[16] = (ctx.gpr[16] + static_cast<std::uint32_t>(4));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4E0C;
|
|
}
|
|
goto SB_L_088B4E50;
|
|
}
|
|
|
|
SB_L_088B4E50:
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(232)));
|
|
goto SB_L_088B4E54;
|
|
|
|
SB_L_088B4E54:
|
|
ctx.gpr[4] = (ctx.gpr[4] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[5] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(228)));
|
|
ctx.gpr[19] = (ctx.gpr[19] + static_cast<std::uint32_t>(32));
|
|
ctx.gpr[5] = (ctx.gpr[5] + static_cast<std::uint32_t>(4));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(232), ctx.gpr[4]);
|
|
ctx.gpr[21] = (ctx.gpr[21] + static_cast<std::uint32_t>(32));
|
|
ctx.gpr[6] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(272)));
|
|
ctx.gpr[20] = (ctx.gpr[20] + static_cast<std::uint32_t>(4));
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[4]) < static_cast<std::int32_t>(ctx.gpr[6]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(228), ctx.gpr[5]);
|
|
if (branch_taken) {
|
|
goto SB_L_088B4D6C;
|
|
}
|
|
goto SB_L_088B4E80;
|
|
}
|
|
|
|
SB_L_088B4E80:
|
|
ctx.gpr[4] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(272)));
|
|
ctx.gpr[16] = (0u | 0u);
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[16]) < static_cast<std::int32_t>(ctx.gpr[4]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] == 0u;
|
|
ctx.gpr[18] = (ctx.gpr[29] + static_cast<std::uint32_t>(160));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4F70;
|
|
}
|
|
goto SB_L_088B4E94;
|
|
}
|
|
|
|
SB_L_088B4E94:
|
|
ctx.gpr[17] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(284)));
|
|
ctx.gpr[19] = (ctx.gpr[29] + static_cast<std::uint32_t>(176));
|
|
ctx.gpr[4] = (0u | 0u);
|
|
ctx.gpr[17] = (ctx.gpr[17] + ctx.gpr[4]);
|
|
ctx.gpr[20] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(256)));
|
|
ctx.gpr[21] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(272)));
|
|
goto SB_L_088B4EAC;
|
|
|
|
SB_L_088B4EAC:
|
|
ctx.gpr[4] = (ctx.gpr[29] + ctx.gpr[16]);
|
|
ctx.gpr[4] = (tier2_mem.aot_load8(ctx.gpr[4] + static_cast<std::uint32_t>(48)));
|
|
{ const bool branch_taken = ctx.gpr[4] == 0u;
|
|
// nop
|
|
if (branch_taken) {
|
|
goto SB_L_088B4F60;
|
|
}
|
|
goto SB_L_088B4EBC;
|
|
}
|
|
|
|
SB_L_088B4EBC:
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(0)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(176), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(4)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(180), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(8)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(184), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.gpr[4] = (ctx.gpr[18] | 0u);
|
|
ctx.gpr[5] = (ctx.gpr[20] | 0u);
|
|
ctx.gpr[31] = (0x088B4EE4u);
|
|
ctx.gpr[6] = (ctx.gpr[19] | 0u);
|
|
if (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 73u, 0x088B086Cu>(ctx, &aot_mem) && ctx.pc == 0x088B4EE4u) goto SB_L_088B4EE4;
|
|
TIER2_SB_RETURN();
|
|
|
|
SB_L_088B4EE4:
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[4] = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(4)));
|
|
ctx.gpr[5] = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
|
|
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(8)));
|
|
ctx.gpr[6] = (std::bit_cast<std::uint32_t>(ctx.fpr[14]));
|
|
{ const std::uint32_t tier2_words[3]{ctx.gpr[4], ctx.gpr[5], ctx.gpr[6]};
|
|
tier2_mem.aot_store32_block(ctx.gpr[17] + static_cast<std::uint32_t>(0), tier2_words); }
|
|
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(16)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(176), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
|
|
ctx.fpr[15] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(20)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(180), std::bit_cast<std::uint32_t>(ctx.fpr[15]));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[17] + static_cast<std::uint32_t>(24)));
|
|
tier2_mem.aot_store32(ctx.gpr[29] + static_cast<std::uint32_t>(184), std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
{ const std::uint32_t vfpu_address = ctx.gpr[20] + 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 = ctx.gpr[20] + 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 = ctx.gpr[20] + 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 = ctx.gpr[19] + 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); }
|
|
ctx.execute_vfpu_vtfm_ct<0u, 36u, 7u, 3u, 3u>();
|
|
{ float vfpu_value[4]{}; ctx.read_vfpu_vector_ct<0u, 4u>(vfpu_value);
|
|
const std::uint32_t vfpu_address = ctx.gpr[18] + 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.gpr[4] = (ctx.gpr[17] + static_cast<std::uint32_t>(16));
|
|
ctx.fpr[12] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(0)));
|
|
ctx.gpr[5] = (std::bit_cast<std::uint32_t>(ctx.fpr[12]));
|
|
ctx.fpr[13] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[18] + static_cast<std::uint32_t>(4)));
|
|
ctx.gpr[6] = (std::bit_cast<std::uint32_t>(ctx.fpr[13]));
|
|
ctx.fpr[14] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[18] + 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]{ctx.gpr[5], ctx.gpr[6], ctx.gpr[7]};
|
|
tier2_mem.aot_store32_block(ctx.gpr[4] + static_cast<std::uint32_t>(0), tier2_words); }
|
|
goto SB_L_088B4F60;
|
|
|
|
SB_L_088B4F60:
|
|
ctx.gpr[16] = (ctx.gpr[16] + static_cast<std::uint32_t>(1));
|
|
ctx.gpr[4] = (static_cast<std::int32_t>(ctx.gpr[16]) < static_cast<std::int32_t>(ctx.gpr[21]) ? 1u : 0u);
|
|
{ const bool branch_taken = ctx.gpr[4] != 0u;
|
|
ctx.gpr[17] = (ctx.gpr[17] + static_cast<std::uint32_t>(32));
|
|
if (branch_taken) {
|
|
goto SB_L_088B4EAC;
|
|
}
|
|
goto SB_L_088B4F70;
|
|
}
|
|
|
|
SB_L_088B4F70:
|
|
ctx.gpr[2] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(260)));
|
|
goto SB_L_088B4F74;
|
|
|
|
SB_L_088B4F74:
|
|
{ std::uint32_t tier2_words[11]{};
|
|
if (tier2_mem.aot_try_load32_block(ctx.gpr[29] + static_cast<std::uint32_t>(296), tier2_words)) {
|
|
ctx.fpr[20] = std::bit_cast<float>(tier2_words[0]);
|
|
ctx.gpr[16] = tier2_words[1];
|
|
ctx.gpr[17] = tier2_words[2];
|
|
ctx.gpr[18] = tier2_words[3];
|
|
ctx.gpr[19] = tier2_words[4];
|
|
ctx.gpr[20] = tier2_words[5];
|
|
ctx.gpr[21] = tier2_words[6];
|
|
ctx.gpr[22] = tier2_words[7];
|
|
ctx.gpr[23] = tier2_words[8];
|
|
ctx.gpr[30] = tier2_words[9];
|
|
ctx.gpr[31] = tier2_words[10];
|
|
} else {
|
|
ctx.fpr[20] = std::bit_cast<float>(tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(296)));
|
|
ctx.gpr[16] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(300)));
|
|
ctx.gpr[17] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(304)));
|
|
ctx.gpr[18] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(308)));
|
|
ctx.gpr[19] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(312)));
|
|
ctx.gpr[20] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(316)));
|
|
ctx.gpr[21] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(320)));
|
|
ctx.gpr[22] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(324)));
|
|
ctx.gpr[23] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(328)));
|
|
ctx.gpr[30] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(332)));
|
|
ctx.gpr[31] = (tier2_mem.aot_load32(ctx.gpr[29] + static_cast<std::uint32_t>(336)));
|
|
} }
|
|
jump_target = ctx.gpr[31];
|
|
ctx.gpr[29] = (ctx.gpr[29] + static_cast<std::uint32_t>(352));
|
|
local_pc = jump_target;
|
|
goto TIER2_LOCAL_DISPATCH_U0044;
|
|
// 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
|