From 88e48bdcff7f29086608892df4a0c6abea0887e7 Mon Sep 17 00:00:00 2001 From: LittleCube Date: Tue, 24 Jun 2025 18:03:35 -0400 Subject: [PATCH] add back dkr math routines --- librecomp/src/math_routines.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/librecomp/src/math_routines.cpp b/librecomp/src/math_routines.cpp index 2bd21ce..bb1f207 100644 --- a/librecomp/src/math_routines.cpp +++ b/librecomp/src/math_routines.cpp @@ -80,3 +80,35 @@ extern "C" void __ull_to_f_recomp(uint8_t * rdram, recomp_context * ctx) { ctx->f0.fl = ret; } + +extern "C" void __ull_rshift_recomp(uint8_t * rdram, recomp_context * ctx) {Add commentMore actions + uint64_t a = (ctx->r4 << 32) | ((ctx->r5 << 0) & 0xFFFFFFFFu); + uint64_t b = (ctx->r6 << 32) | ((ctx->r7 << 0) & 0xFFFFFFFFu); + uint64_t ret = a >> b; + + ctx->r2 = (int32_t)(ret >> 32); + ctx->r3 = (int32_t)(ret >> 0); +} + +extern "C" void __ll_to_f_recomp(uint8_t * rdram, recomp_context * ctx) { + int64_t a = (ctx->r4 << 32) | ((ctx->r5 << 0) & 0xFFFFFFFFu); + float ret = (float)a; + + ctx->f0.fl = ret; +} + +extern "C" void __f_to_ll_recomp(uint8_t * rdram, recomp_context * ctx) { + int64_t ret = (int64_t)ctx->f12.fl; + + ctx->r2 = (int32_t)(ret >> 32); + ctx->r3 = (int32_t)(ret >> 0); +} + +extern "C" void __ll_lshift_recomp(uint8_t * rdram, recomp_context * ctx) { + uint64_t a = (ctx->r4 << 32) | ((ctx->r5 << 0) & 0xFFFFFFFFu); + uint64_t b = (ctx->r6 << 32) | ((ctx->r7 << 0) & 0xFFFFFFFFu); + uint64_t ret = a << b; + + ctx->r2 = (int32_t)(ret >> 32); + ctx->r3 = (int32_t)(ret >> 0); +}