Loading [MathJax]/extensions/MathMenu.js
Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
J3DTransform.h
Go to the documentation of this file.
1#ifndef J3DTRANSFORM_H
2#define J3DTRANSFORM_H
3
4#include "JSystem/JGeometry.h"
5#include "dolphin/mtx.h"
6
8
14struct J3DTransformInfo {
15 /* 0x00 */ Vec mScale;
16 /* 0x0C */ S16Vec mRotation;
17 /* 0x14 */ Vec mTranslate;
18
19 /* inline J3DTransformInfo& operator=(const J3DTransformInfo& b) {
20 mScale = b.mScale;
21 mRotation = b.mRotation;
22 mTranslate = b.mTranslate;
23 return *this;
24 } */
25
26#ifdef __MWERKS__
27 inline J3DTransformInfo& operator=(const register J3DTransformInfo& b) {
28 register const J3DTransformInfo& var_r31 = b;
29 register J3DTransformInfo& var_r30 = *this;
30
31 register f32 var_f31;
32 register f32 var_f0;
33 register int var_r0;
34 asm {
35 psq_l var_f31, 0x0(var_r31), 0, 0
36 psq_st var_f31, 0x0(var_r30), 0, 0
37 lfs var_f0, 0x8(var_r31)
38 stfs var_f0, 0x8(var_r30)
39 lwz var_r0, 0xc(var_r31)
40 stw var_r0, 0xc(var_r30)
41 lha var_r0, 0x10(var_r31)
42 sth var_r0, 0x10(var_r30)
43 psq_l var_f31, 0x14(var_r31), 0, 0
44 psq_st var_f31, 0x14(var_r30), 0, 0
45 lfs var_f0, 0x1c(var_r31)
46 stfs var_f0, 0x1c(var_r30)
47 }
48 return *this;
49 }
50#endif
51}; // Size: 0x20
52
54extern Vec const j3dDefaultScale;
55extern Mtx const j3dDefaultMtx;
56extern f32 PSMulUnit01[];
57
58void J3DGQRSetup7(u32 param_0, u32 param_1, u32 param_2, u32 param_3);
59void J3DCalcBBoardMtx(f32 (*)[4]);
61void J3DPSCalcInverseTranspose(f32 (*param_0)[4], f32 (*param_1)[3]);
64void J3DGetTextureMtx(const J3DTextureSRTInfo&, const Vec&, f32 (*)[4]);
65void J3DGetTextureMtxOld(const J3DTextureSRTInfo&, const Vec&, f32 (*)[4]);
67void J3DGetTextureMtxMayaOld(const J3DTextureSRTInfo& param_0, f32 (*)[4]);
68void J3DScaleNrmMtx(f32 (*)[4], const Vec&);
69void J3DScaleNrmMtx33(f32 (*)[3], const Vec&);
70void J3DMtxProjConcat(f32 (*)[4], f32 (*)[4], f32 (*)[4]);
71void J3DPSMtxArrayConcat(f32 (*)[4], f32 (*)[4], f32 (*)[4], u32);
72
73inline void J3DPSMtx33Copy(register Mtx3P src, register Mtx3P dst) {
74 register f32 fr4;
75 register f32 fr3;
76 register f32 fr2;
77 register f32 fr1;
78 register f32 fr0;
79#ifdef __MWERKS__
80 asm {
81 psq_l fr4, 0(src), 0, 0
82 psq_l fr3, 8(src), 0, 0
83 psq_l fr2, 0x10(src), 0, 0
84 psq_l fr1, 0x18(src), 0, 0
85 lfs fr0, 0x20(src)
86 psq_st fr4, 0(dst), 0, 0
87 psq_st fr3, 8(dst), 0, 0
88 psq_st fr2, 0x10(dst), 0, 0
89 psq_st fr1, 0x18(dst), 0, 0
90 stfs fr0, 0x20(dst)
91 }
92#endif
93}
94
95inline void J3DPSMtx33CopyFrom34(register MtxP src, register Mtx3P dst) {
96 register f32 x_y1;
97 register f32 z1;
98 register f32 x_y2;
99 register f32 z2;
100 register f32 x_y3;
101 register f32 z3;
102#ifdef __MWERKS__
103 asm {
104 psq_l x_y1, 0(src), 0, 0
105 lfs z1, 8(src)
106 psq_l x_y2, 16(src), 0, 0
107 lfs z2, 0x18(src)
108 psq_l x_y3, 32(src), 0, 0
109 lfs z3, 0x28(src)
110 psq_st x_y1, 0(dst), 0, 0
111 stfs z1, 8(dst)
112 psq_st x_y2, 12(dst), 0, 0
113 stfs z2, 0x14(dst)
114 psq_st x_y3, 24(dst), 0, 0
115 stfs z3, 0x20(dst)
116 }
117#endif
118}
119
120// regalloc issues
121inline void J3DPSMulMtxVec(register MtxP mtx, register Vec* vec, register Vec* dst) {
122 register f32 fr12;
123 register f32 fr11;
124 register f32 fr10;
125 register f32 fr9;
126 register f32 fr8;
127 register f32 fr6;
128 register f32 fra6;
129 register f32 fr5;
130 register f32 fra5;
131 register f32 fra4;
132 register f32 fr4;
133 register f32 fr3;
134 register f32 fr2;
135 register f32 fra2;
136 register f32 fr01;
137 register f32 fr00;
138#ifdef __MWERKS__
139 asm {
140 psq_l fr00, 0(vec), 0, 0
141 psq_l fr2, 0(mtx), 0, 0
142 psq_l fr01, 8(vec), 1, 0
143 ps_mul fr4, fr2, fr00
144 psq_l fr3, 8(mtx), 0, 0
145 ps_madd fr5, fr3, fr01, fr4
146 psq_l fr8, 16(mtx), 0, 0
147 ps_sum0 fr6, fr5, fr6, fr5
148 psq_l fr9, 24(mtx), 0, 0
149 ps_mul fr10, fr8, fr00
150 psq_st fr6, 0(dst), 1, 0
151 ps_madd fr11, fr9, fr01, fr10
152 psq_l fra2, 32(mtx), 0, 0
153 ps_sum0 fr12, fr11, fr12, fr11
154 psq_l fr3, 40(mtx), 0, 0
155 ps_mul fra4, fra2, fr00
156 psq_st fr12, 4(dst), 1, 0
157 ps_madd fra5, fr3, fr01, fra4
158 ps_sum0 fra6, fra5, fra6, fra5
159 psq_st fra6, 8(dst), 1, 0
160 }
161#endif
162}
163
164// regalloc issues
165inline void J3DPSMulMtxVec(register MtxP mtx, register S16Vec* vec, register S16Vec* dst) {
166 register f32 fr12;
167 register f32 fr11;
168 register f32 fr10;
169 register f32 fr9;
170 register f32 fr8;
171 register f32 fr6;
172 register f32 fra6;
173 register f32 fr5;
174 register f32 fra5;
175 register f32 fra4;
176 register f32 fr4;
177 register f32 fr3;
178 register f32 fr2;
179 register f32 fra2;
180 register f32 fr01;
181 register f32 fr00;
182#ifdef __MWERKS__
183 asm {
184 psq_l fr00, 0(vec), 0, 7
185 psq_l fr2, 0(mtx), 0, 0
186 psq_l fr01, 4(vec), 1, 7
187 ps_mul fr4, fr2, fr00
188 psq_l fr3, 8(mtx), 0, 0
189 ps_madd fr5, fr3, fr01, fr4
190 psq_l fr8, 16(mtx), 0, 0
191 ps_sum0 fr6, fr5, fr6, fr5
192 psq_l fr9, 24(mtx), 0, 0
193 ps_mul fr10, fr8, fr00
194 psq_st fr6, 0(dst), 1, 7
195 ps_madd fr11, fr9, fr01, fr10
196 psq_l fra2, 32(mtx), 0, 0
197 ps_sum0 fr12, fr11, fr12, fr11
198 psq_l fr3, 40(mtx), 0, 0
199 ps_mul fra4, fra2, fr00
200 psq_st fr12, 2(dst), 1, 7
201 ps_madd fra5, fr3, fr01, fra4
202 ps_sum0 fra6, fra5, fra6, fra5
203 psq_st fra6, 4(dst), 1, 7
204 }
205#endif
206}
207
208// regalloc issues
209inline void J3DPSMulMtxVec(register Mtx3P mtx, register Vec* vec, register Vec* dst) {
210 register f32* punit;
211 register f32 unit;
212 register f32 fr12;
213 register f32 fr11;
214 register f32 fr10;
215 register f32 fr9;
216 register f32 fr8;
217 register f32 fr6;
218 register f32 fr5;
219 register f32 fr4;
220 register f32 fr3;
221 register f32 fr2;
222 register f32 fr01;
223 register f32 fr00;
224#ifdef __MWERKS__
225 asm {
226 lis punit, PSMulUnit01@ha
227 psq_l fr00, 0(vec), 0, 0
228 addi punit, punit, PSMulUnit01@l
229 psq_l fr2, 0(mtx), 0, 0
230 psq_l unit, 0(punit), 0, 0
231 psq_l fr01, 8(vec), 1, 0
232 ps_add fr01, unit, fr01
233 psq_l fr3, 8(mtx), 1, 0
234 ps_mul fr4, fr2, fr00
235 psq_l fr8, 12(mtx), 0, 0
236 ps_madd fr5, fr3, fr01, fr4
237 ps_sum0 fr6, fr5, fr6, fr5
238 psq_l fr9, 20(mtx), 1, 0
239 ps_mul fr10, fr8, fr00
240 psq_st fr6, 0(dst), 1, 0
241 ps_madd fr11, fr9, fr01, fr10
242 psq_l fr2, 24(mtx), 0, 0
243 ps_sum0 fr12, fr11, fr12, fr11
244 psq_l fr3, 32(mtx), 1, 0
245 ps_mul fr4, fr2, fr00
246 psq_st fr12, 4(dst), 1, 0
247 ps_madd fr5, fr3, fr01, fr4
248 ps_sum0 fr6, fr5, fr6, fr5
249 psq_st fr6, 8(dst), 1, 0
250 }
251#endif
252}
253
254// regalloc issues
255inline void J3DPSMulMtxVec(register Mtx3P mtx, register S16Vec* vec, register S16Vec* dst) {
256 register f32* punit;
257 register f32 unit;
258 register f32 fr6;
259 register f32 fr5;
260 register f32 fr4;
261 register f32 fr3;
262 register f32 fr2;
263 register f32 fr01;
264 register f32 fr00;
265#ifdef __MWERKS__
266 asm {
267 lis punit, PSMulUnit01@ha
268 psq_l fr00, 0(vec), 0, 7
269 addi punit, punit, PSMulUnit01@l
270 psq_l fr2, 0(mtx), 0, 0
271 psq_l unit, 0(punit), 0, 0
272 psq_l fr01, 4(vec), 1, 7
273 ps_add fr01, unit, fr01
274 psq_l fr3, 8(mtx), 1, 0
275 ps_mul fr4, fr2, fr00
276 psq_l fr2, 12(mtx), 0, 0
277 ps_madd fr5, fr3, fr01, fr4
278 ps_sum0 fr6, fr5, fr6, fr5
279 psq_l fr3, 20(mtx), 1, 0
280 ps_mul fr4, fr2, fr00
281 psq_st fr6, 0(dst), 1, 7
282 ps_madd fr5, fr3, fr01, fr4
283 psq_l fr2, 24(mtx), 0, 0
284 ps_sum0 fr6, fr5, fr6, fr5
285 psq_l fr3, 32(mtx), 1, 0
286 ps_mul fr4, fr2, fr00
287 psq_st fr6, 2(dst), 1, 7
288 ps_madd fr5, fr3, fr01, fr4
289 ps_sum0 fr6, fr5, fr6, fr5
290 psq_st fr6, 4(dst), 1, 7
291 }
292#endif
293}
294
295#endif /* J3DTRANSFORM_H */
void J3DGQRSetup7(u32 param_0, u32 param_1, u32 param_2, u32 param_3)
Definition J3DTransform.cpp:21
void J3DGetTextureMtxMayaOld(const J3DTextureSRTInfo &param_0, f32(*)[4])
void J3DPSMulMtxVec(register MtxP mtx, register Vec *vec, register Vec *dst)
Definition J3DTransform.h:121
void J3DGetTextureMtxMaya(const J3DTextureSRTInfo &, f32(*)[4])
void J3DGetTranslateRotateMtx(const J3DTransformInfo &, Mtx)
Definition J3DTransform.cpp:167
void J3DCalcYBBoardMtx(f32(*)[4])
void J3DMtxProjConcat(f32(*)[4], f32(*)[4], f32(*)[4])
void J3DGetTextureMtx(const J3DTextureSRTInfo &, const Vec &, f32(*)[4])
void J3DGetTextureMtxOld(const J3DTextureSRTInfo &, const Vec &, f32(*)[4])
Mtx const j3dDefaultMtx
void J3DPSMtx33CopyFrom34(register MtxP src, register Mtx3P dst)
Definition J3DTransform.h:95
f32 PSMulUnit01[]
Vec const j3dDefaultScale
void J3DPSCalcInverseTranspose(f32(*param_0)[4], f32(*param_1)[3])
void J3DPSMtxArrayConcat(f32(*)[4], f32(*)[4], f32(*)[4], u32)
void J3DScaleNrmMtx33(f32(*)[3], const Vec &)
void J3DCalcBBoardMtx(f32(*)[4])
void J3DPSMtx33Copy(register Mtx3P src, register Mtx3P dst)
Definition J3DTransform.h:73
J3DTransformInfo const j3dDefaultTransformInfo
void J3DScaleNrmMtx(f32(*)[4], const Vec &)
const void * src
Definition __os.h:116
static Mtx mtx[10]
Definition c_lib.cpp:512
f32(* MtxP)[4]
Definition mtx.h:35
f32(* Mtx3P)[3]
Definition mtx.h:34
f32 Mtx[3][4]
Definition mtx.h:22
Definition J3DStruct.h:48
Definition d_a_hozelda.cpp:169
Vec mScale
Definition J3DTransform.h:15
Vec mTranslate
Definition J3DTransform.h:17
J3DTransformInfo & operator=(const register J3DTransformInfo &b)
Definition J3DTransform.h:27
S16Vec mRotation
Definition J3DTransform.h:16
Definition mtx.h:14
Definition d_a_hozelda.cpp:18
unsigned long u32
Definition types.h:9
signed short int s16
Definition types.h:6
float f32
Definition types.h:22