Handwritten asm: fp (#1818)

This commit is contained in:
Tharo 2025-08-09 06:02:03 +01:00 committed by GitHub
parent 9612575930
commit 1ca6ca804d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 163 additions and 2 deletions

View File

@ -42,8 +42,7 @@ beginseg
include "$(BUILD_DIR)/src/boot/libu64/system_heap.o"
include "$(BUILD_DIR)/src/boot/libu64/padsetup.o"
include "$(BUILD_DIR)/src/boot/libc64/math64.o"
include "$(BUILD_DIR)/asm/boot/fp.text.o" // Part of libc64
include "$(BUILD_DIR)/data/boot/fp.data.o"
include "$(BUILD_DIR)/src/boot/libc64/fp.o"
include "$(BUILD_DIR)/src/boot/libc64/malloc.o"
include "$(BUILD_DIR)/src/boot/libc64/qrand.o"
include "$(BUILD_DIR)/src/boot/libc64/__osMalloc.o"

162
src/boot/libc64/fp.s Normal file
View File

@ -0,0 +1,162 @@
#include "PR/asm.h"
#include "PR/regdef.h"
.data
DATA(gPositiveInfinity)
.word 0x7F800000
ENDDATA(gPositiveInfinity)
DATA(gNegativeInfinity)
.word 0xFF800000
ENDDATA(gNegativeInfinity)
DATA(gPositiveZero)
.word 0x00000000
ENDDATA(gPositiveZero)
DATA(gNegativeZero)
.word 0x80000000
ENDDATA(gNegativeZero)
DATA(qNaN0x3FFFFF)
.word 0x7FBFFFFF
ENDDATA(qNaN0x3FFFFF)
DATA(qNaN0x10000)
.word 0x7F810000
ENDDATA(qNaN0x10000)
DATA(sNaN0x3FFFFF)
.word 0x7FFFFFFF
ENDDATA(sNaN0x3FFFFF)
.text
LEAF(floorf)
floor.w.s fa0, fa0
cvt.s.w fv0, fa0
jr ra
END(floorf)
LEAF(floor)
floor.w.d fa0, fa0
cvt.d.w fv0, fa0
jr ra
END(floor)
LEAF(lfloorf)
floor.w.s ft0, fa0
mfc1 v0, ft0
jr ra
END(lfloorf)
LEAF(lfloor)
floor.w.d ft0, fa0
mfc1 v0, ft0
jr ra
END(lfloor)
LEAF(ceilf)
ceil.w.s fa0, fa0
cvt.s.w fv0, fa0
jr ra
END(ceilf)
LEAF(ceil)
ceil.w.d fa0, fa0
cvt.d.w fv0, fa0
jr ra
END(ceil)
LEAF(lceilf)
ceil.w.s ft0, fa0
mfc1 v0, ft0
jr ra
END(lceilf)
LEAF(lceil)
ceil.w.d ft0, fa0
mfc1 v0, ft0
jr ra
END(lceil)
LEAF(truncf)
trunc.w.s fa0, fa0
cvt.s.w fv0, fa0
jr ra
END(truncf)
LEAF(trunc)
trunc.w.d fa0, fa0
cvt.d.w fv0, fa0
jr ra
END(trunc)
LEAF(ltruncf)
trunc.w.s ft0, fa0
mfc1 v0, ft0
jr ra
END(ltruncf)
LEAF(ltrunc)
trunc.w.d ft0, fa0
mfc1 v0, ft0
jr ra
END(ltrunc)
LEAF(nearbyintf)
round.w.s fa0, fa0
cvt.s.w fv0, fa0
jr ra
END(nearbyintf)
LEAF(nearbyint)
round.w.d fa0, fa0
cvt.d.w fv0, fa0
jr ra
END(nearbyint)
LEAF(lnearbyintf)
round.w.s ft0, fa0
mfc1 v0, ft0
jr ra
END(lnearbyintf)
LEAF(lnearbyint)
round.w.d ft0, fa0
mfc1 v0, ft0
jr ra
END(lnearbyint)
LEAF(roundf)
li.s ft0, 0.5
add.s fv0, fa0, ft0
floor.w.s fv0, fv0
cvt.s.w fv0, fv0
jr ra
END(roundf)
LEAF(round)
li.d ft0, 0.5
add.d fv0, fa0, ft0
floor.w.d fv0, fv0
cvt.d.w fv0, fv0
jr ra
END(round)
LEAF(lroundf)
li.s ft0, 0.5
add.s fv0, fa0, ft0
floor.w.s fv0, fv0
mfc1 v0, fv0
jr ra
END(lroundf)
LEAF(lround)
li.d ft0, 0.5
add.d fv0, fa0, ft0
floor.w.d fv0, fv0
mfc1 v0, fv0
jr ra
END(lround)