Mario Kart Wii Gecko Codes, Cheats, & Hacks
Optimal Int to Float Function - Printable Version

+- Mario Kart Wii Gecko Codes, Cheats, & Hacks (https://mariokartwii.com)
+-- Forum: Hacks/Modding (https://mariokartwii.com/forumdisplay.php?fid=14)
+--- Forum: Coding & Hacking General Discussion (https://mariokartwii.com/forumdisplay.php?fid=23)
+--- Thread: Optimal Int to Float Function (/showthread.php?tid=1665)



Optimal Int to Float Function - JoshuaMK - 11-10-2020

This code is the most optimal way to convert an integer of any value to float, supporting negative values and being self contained:

Code:
# Args:    r3 = Integer to convert to float
# Returns: f1 = Float representation of the input integer

lis r4, 0x5980
ori r4, r4, 0x0004
stw r4, -0x4 (sp)
lis r4, 0x4330

lfs f1, -0x4 (sp)

xoris r3, r3, 0x8000
stw r3, -0x4 (sp)
stw r4, -0x8 (sp)

lfd f0, -0x8 (sp)
fsubs f1, f0, f1
blr

NOTE: This is meant to be called as a function


RE: Optimal Int to Float Function - Vega - 11-10-2020

How does this differ from way back when Salmon01 posted a version of this he found in the PPC Compiler Writer's Guide? https://mkwii.com/showthread.php?tid=1252

When taking what Salmon provided and changing it to be self-contained, I ended up with this (untested) ---

Code:
#Prologue
stwu sp, -0x30 (sp)
stmw r30, 0x8 (sp)
stfd f31, 0x10 (sp)

#Conversion
lis r30, 0x4330
lis r31, 0x8000
stmw r30, 0x18 (sp)
lfd f31, 0x18 (sp)
xoris r3, r3, 0x8000
stw r3, 0x1C (sp)
lfd f1, 0x18 (sp)
fsub f1, f1, f31

#Epilogue
lfd f31, 0x10 (sp)
lmw r30, 0x8 (sp)
addi sp, sp, 0x30
blr

Also what's the purpose of the lis r31, 0x5980 instruction? Floats are by far my weakest point of my ASM knowledge.