summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTharo <17233964+Thar0@users.noreply.github.com>2025-01-10 20:24:37 +0000
committerGitHub <noreply@github.com>2025-01-10 15:24:37 -0500
commit62c0effccdf56a02f5df741fd31c93080854a150 (patch)
treeef8fafcdad1bfaae5c6e27f48e20cc759fb0584c /src
parent0f6c2f9e78eed96e175651d00bcec92dc9cbcd04 (diff)
[iQue] Match libultra/gu (#2402)
* [iQue] Match libultra/gu * Match sqrtf
Diffstat (limited to 'src')
-rw-r--r--src/libultra/gu/rotate.c17
-rw-r--r--src/libultra/gu/sqrtf.c9
-rw-r--r--src/libultra/gu/sqrtf.s9
-rw-r--r--src/libultra/gu/us2dex.c22
4 files changed, 29 insertions, 28 deletions
diff --git a/src/libultra/gu/rotate.c b/src/libultra/gu/rotate.c
index 7d495e98e..dc50aba3c 100644
--- a/src/libultra/gu/rotate.c
+++ b/src/libultra/gu/rotate.c
@@ -1,7 +1,7 @@
#include "global.h"
void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) {
- static f32 D_80134D10 = M_PI / 180.0f;
+ static f32 dtor = M_PI / 180.0f;
f32 sine;
f32 cosine;
f32 ab;
@@ -16,14 +16,15 @@ void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) {
guNormalize(&x, &y, &z);
- a *= D_80134D10;
+ a *= dtor;
sine = sinf(a);
cosine = cosf(a);
- ab = x * y * (1 - cosine);
- bc = y * z * (1 - cosine);
- ca = z * x * (1 - cosine);
+ t = 1.0f - cosine;
+ ab = x * y * t;
+ bc = y * z * t;
+ ca = z * x * t;
guMtxIdentF(m);
@@ -38,15 +39,15 @@ void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) {
#endif
t = x * x;
- m[0][0] = (1 - t) * cosine + t;
+ m[0][0] = t + cosine * (1.0f - t);
m[2][1] = bc - xs;
m[1][2] = bc + xs;
t = y * y;
- m[1][1] = (1 - t) * cosine + t;
+ m[1][1] = t + cosine * (1.0f - t);
m[2][0] = ca + ys;
m[0][2] = ca - ys;
t = z * z;
- m[2][2] = (1 - t) * cosine + t;
+ m[2][2] = t + cosine * (1.0f - t);
m[1][0] = ab - zs;
m[0][1] = ab + zs;
}
diff --git a/src/libultra/gu/sqrtf.c b/src/libultra/gu/sqrtf.c
deleted file mode 100644
index 5e5fa233c..000000000
--- a/src/libultra/gu/sqrtf.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "global.h"
-
-#ifndef __GNUC__
-#define __builtin_sqrtf sqrtf
-#endif
-
-f32 sqrtf(f32 f) {
- return __builtin_sqrtf(f);
-}
diff --git a/src/libultra/gu/sqrtf.s b/src/libultra/gu/sqrtf.s
new file mode 100644
index 000000000..aaf502359
--- /dev/null
+++ b/src/libultra/gu/sqrtf.s
@@ -0,0 +1,9 @@
+#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
+
+.text
+
+LEAF(sqrtf)
+ sqrt.s fv0, fa0
+ j ra
+END(sqrtf)
diff --git a/src/libultra/gu/us2dex.c b/src/libultra/gu/us2dex.c
index d2e5a2b04..b8708c086 100644
--- a/src/libultra/gu/us2dex.c
+++ b/src/libultra/gu/us2dex.c
@@ -1,25 +1,25 @@
#include "global.h"
void guS2DInitBg(uObjBg* bg) {
- u32 size;
- s32 tmem = (bg->b.imageFmt == G_IM_FMT_CI) ? 0x100 : 0x200;
- u16 shift = (6 - bg->b.imageSiz);
+ u16 tmem = (bg->b.imageFmt == G_IM_FMT_CI) ? 0x100 : 0x200;
+ u16 shift = 6 - bg->b.imageSiz;
+ u32 tsize;
if (bg->b.imageLoad == G_BGLT_LOADBLOCK) {
bg->b.tmemW = bg->b.imageW >> shift;
- bg->b.tmemH = (tmem / bg->b.tmemW) * 4;
- bg->b.tmemSizeW = bg->b.tmemW * 2;
+ bg->b.tmemH = (tmem / bg->b.tmemW) << 2;
+ bg->b.tmemSizeW = bg->b.tmemW << 1;
bg->b.tmemSize = bg->b.tmemH * bg->b.tmemSizeW;
bg->b.tmemLoadSH = (bg->b.tmemSize >> 1) - 1;
- bg->b.tmemLoadTH = (0x7FF / bg->b.tmemW) + 1;
+ bg->b.tmemLoadTH = GS_CALC_DXT(bg->b.tmemW);
} else { // G_BGLT_LOADTILE
bg->b.tmemW = (bg->b.frameW >> shift) + 3;
- bg->b.tmemH = (tmem / bg->b.tmemW) * 4;
- bg->b.tmemSizeW = (bg->b.imageW >> shift) * 2;
+ bg->b.tmemH = (tmem / bg->b.tmemW) << 2;
+ bg->b.tmemSizeW = (bg->b.imageW >> shift) << 1;
- size = bg->b.tmemH * bg->b.tmemSizeW;
- bg->b.tmemSize = (size >> 16);
- bg->b.tmemLoadSH = (size >> 0) & 0xFFFF;
+ tsize = bg->b.tmemH * bg->b.tmemSizeW;
+ bg->b.tmemSize = tsize >> 16;
+ bg->b.tmemLoadSH = tsize & 0xFFFF;
bg->b.tmemLoadTH = bg->b.tmemH - 1;
}
}