1 |
william |
31 |
/* PCSX2 - PS2 Emulator for PCs |
2 |
|
|
* Copyright (C) 2002-2010 PCSX2 Dev Team |
3 |
|
|
* |
4 |
|
|
* PCSX2 is free software: you can redistribute it and/or modify it under the terms |
5 |
|
|
* of the GNU Lesser General Public License as published by the Free Software Found- |
6 |
|
|
* ation, either version 3 of the License, or (at your option) any later version. |
7 |
|
|
* |
8 |
|
|
* PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
9 |
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |
10 |
|
|
* PURPOSE. See the GNU General Public License for more details. |
11 |
|
|
* |
12 |
|
|
* You should have received a copy of the GNU General Public License along with PCSX2. |
13 |
|
|
* If not, see <http://www.gnu.org/licenses/>. |
14 |
|
|
*/ |
15 |
|
|
|
16 |
|
|
#pragma once |
17 |
|
|
#include "VU.h" |
18 |
|
|
#include "VUops.h" |
19 |
|
|
#include "R5900.h" |
20 |
|
|
#define vuRunCycles (512*12) // Cycles to run ExecuteBlockJIT() for (called from within recs) |
21 |
|
|
#define vu0RunCycles (512*12) // Cycles to run vu0 for whenever ExecuteBlock() is called |
22 |
|
|
#define vu1RunCycles (3000000) // mVU1 uses this for inf loop detection on dev builds |
23 |
|
|
|
24 |
|
|
// -------------------------------------------------------------------------------------- |
25 |
|
|
// BaseCpuProvider |
26 |
|
|
// -------------------------------------------------------------------------------------- |
27 |
|
|
// |
28 |
|
|
// Design Note: This class is only partial C++ style. It still relies on Alloc and Shutdown |
29 |
|
|
// calls for memory and resource management. This is because the underlying implementations |
30 |
|
|
// of our CPU emulators don't have properly encapsulated objects yet -- if we allocate ram |
31 |
|
|
// in a constructor, it won't get free'd if an exception occurs during object construction. |
32 |
|
|
// Once we've resolved all the 'dangling pointers' and stuff in the recompilers, Alloc |
33 |
|
|
// and Shutdown can be removed in favor of constructor/destructor syntax. |
34 |
|
|
// |
35 |
|
|
class BaseCpuProvider |
36 |
|
|
{ |
37 |
|
|
protected: |
38 |
|
|
// allocation counter for multiple init/shutdown calls |
39 |
|
|
// (most or all implementations will need this!) |
40 |
|
|
int m_AllocCount; |
41 |
|
|
|
42 |
|
|
public: |
43 |
|
|
// this boolean indicates to some generic logging facilities if the VU's registers |
44 |
|
|
// are valid for logging or not. (see DisVU1Micro.cpp, etc) [kinda hacky, might |
45 |
|
|
// be removed in the future] |
46 |
|
|
bool IsInterpreter; |
47 |
|
|
|
48 |
|
|
public: |
49 |
|
|
BaseCpuProvider() |
50 |
|
|
{ |
51 |
|
|
m_AllocCount = 0; |
52 |
|
|
} |
53 |
|
|
|
54 |
|
|
virtual ~BaseCpuProvider() throw() |
55 |
|
|
{ |
56 |
|
|
if( m_AllocCount != 0 ) |
57 |
|
|
Console.Warning( "Cleanup miscount detected on CPU provider. Count=%d", m_AllocCount ); |
58 |
|
|
} |
59 |
|
|
|
60 |
|
|
virtual const char* GetShortName() const=0; |
61 |
|
|
virtual wxString GetLongName() const=0; |
62 |
|
|
|
63 |
|
|
virtual void Allocate()=0; |
64 |
|
|
virtual void Shutdown()=0; |
65 |
|
|
virtual void Reset()=0; |
66 |
|
|
virtual void Execute(u32 cycles)=0; |
67 |
|
|
virtual void ExecuteBlock(bool startUp)=0; |
68 |
|
|
|
69 |
|
|
virtual void Step()=0; |
70 |
|
|
virtual void Clear(u32 Addr, u32 Size)=0; |
71 |
|
|
|
72 |
|
|
// C++ Calling Conventions are unstable, and some compilers don't even allow us to take the |
73 |
|
|
// address of C++ methods. We need to use a wrapper function to invoke the ExecuteBlock from |
74 |
|
|
// recompiled code. |
75 |
|
|
static void __fastcall ExecuteBlockJIT( BaseCpuProvider* cpu ) |
76 |
|
|
{ |
77 |
|
|
cpu->Execute(1024); |
78 |
|
|
} |
79 |
|
|
}; |
80 |
|
|
|
81 |
|
|
// -------------------------------------------------------------------------------------- |
82 |
|
|
// BaseVUmicroCPU |
83 |
|
|
// -------------------------------------------------------------------------------------- |
84 |
|
|
// Layer class for possible future implementation (currently is nothing more than a type-safe |
85 |
|
|
// type define). |
86 |
|
|
// |
87 |
|
|
class BaseVUmicroCPU : public BaseCpuProvider { |
88 |
|
|
public: |
89 |
|
|
int m_Idx; |
90 |
|
|
u32 m_lastEEcycles; |
91 |
|
|
|
92 |
|
|
BaseVUmicroCPU() { |
93 |
|
|
m_Idx = 0; |
94 |
|
|
m_lastEEcycles = 0; |
95 |
|
|
} |
96 |
|
|
virtual ~BaseVUmicroCPU() throw() {} |
97 |
|
|
|
98 |
|
|
// Called by the PS2 VM's event manager for every internal vertical sync (occurs at either |
99 |
|
|
// 50hz (pal) or 59.94hz (NTSC). |
100 |
|
|
// |
101 |
|
|
// Exceptions: |
102 |
|
|
// This method is not allowed to throw exceptions, since exceptions may not propagate |
103 |
|
|
// safely from the context of recompiled code stackframes. |
104 |
|
|
// |
105 |
|
|
// Thread Affinity: |
106 |
|
|
// Called from the EEcore thread. No locking is performed, so any necessary locks must |
107 |
|
|
// be implemented by the CPU provider manually. |
108 |
|
|
// |
109 |
|
|
virtual void Vsync() throw() { } |
110 |
|
|
|
111 |
|
|
virtual void Step() { |
112 |
|
|
// Ideally this would fall back on interpretation for executing single instructions |
113 |
|
|
// for all CPU types, but due to VU complexities and large discrepancies between |
114 |
|
|
// clamping in recs and ints, it's not really worth bothering with yet. |
115 |
|
|
} |
116 |
|
|
|
117 |
|
|
// Execute VU for the number of VU cycles (recs might go over 0~30 cycles) |
118 |
|
|
// virtual void Execute(u32 cycles)=0; |
119 |
|
|
|
120 |
|
|
// Executes a Block based on static preset cycles OR |
121 |
|
|
// Executes a Block based on EE delta time (see VUmicro.cpp) |
122 |
|
|
virtual void ExecuteBlock(bool startUp=0); |
123 |
|
|
|
124 |
|
|
static void __fastcall ExecuteBlockJIT(BaseVUmicroCPU* cpu); |
125 |
|
|
}; |
126 |
|
|
|
127 |
|
|
|
128 |
|
|
// -------------------------------------------------------------------------------------- |
129 |
|
|
// InterpVU0 / InterpVU1 |
130 |
|
|
// -------------------------------------------------------------------------------------- |
131 |
|
|
class InterpVU0 : public BaseVUmicroCPU |
132 |
|
|
{ |
133 |
|
|
public: |
134 |
|
|
InterpVU0(); |
135 |
|
|
virtual ~InterpVU0() throw() { Shutdown(); } |
136 |
|
|
|
137 |
|
|
const char* GetShortName() const { return "intVU0"; } |
138 |
|
|
wxString GetLongName() const { return L"VU0 Interpreter"; } |
139 |
|
|
|
140 |
|
|
void Allocate() { } |
141 |
|
|
void Shutdown() throw() { } |
142 |
|
|
void Reset() { } |
143 |
|
|
|
144 |
|
|
void Step(); |
145 |
|
|
void Execute(u32 cycles); |
146 |
|
|
void Clear(u32 addr, u32 size) {} |
147 |
|
|
}; |
148 |
|
|
|
149 |
|
|
class InterpVU1 : public BaseVUmicroCPU |
150 |
|
|
{ |
151 |
|
|
public: |
152 |
|
|
InterpVU1(); |
153 |
|
|
virtual ~InterpVU1() throw() { Shutdown(); } |
154 |
|
|
|
155 |
|
|
const char* GetShortName() const { return "intVU1"; } |
156 |
|
|
wxString GetLongName() const { return L"VU1 Interpreter"; } |
157 |
|
|
|
158 |
|
|
void Allocate() { } |
159 |
|
|
void Shutdown() throw() { } |
160 |
|
|
void Reset() { } |
161 |
|
|
|
162 |
|
|
void Step(); |
163 |
|
|
void Execute(u32 cycles); |
164 |
|
|
void Clear(u32 addr, u32 size) {} |
165 |
|
|
}; |
166 |
|
|
|
167 |
|
|
// -------------------------------------------------------------------------------------- |
168 |
|
|
// recMicroVU0 / recMicroVU1 |
169 |
|
|
// -------------------------------------------------------------------------------------- |
170 |
|
|
class recMicroVU0 : public BaseVUmicroCPU |
171 |
|
|
{ |
172 |
|
|
public: |
173 |
|
|
recMicroVU0(); |
174 |
|
|
virtual ~recMicroVU0() throw() { Shutdown(); } |
175 |
|
|
|
176 |
|
|
const char* GetShortName() const { return "mVU0"; } |
177 |
|
|
wxString GetLongName() const { return L"microVU0 Recompiler"; } |
178 |
|
|
|
179 |
|
|
void Allocate(); |
180 |
|
|
void Shutdown() throw(); |
181 |
|
|
|
182 |
|
|
void Reset(); |
183 |
|
|
void Execute(u32 cycles); |
184 |
|
|
void Clear(u32 addr, u32 size); |
185 |
|
|
void Vsync() throw(); |
186 |
|
|
}; |
187 |
|
|
|
188 |
|
|
class recMicroVU1 : public BaseVUmicroCPU |
189 |
|
|
{ |
190 |
|
|
public: |
191 |
|
|
recMicroVU1(); |
192 |
|
|
virtual ~recMicroVU1() throw() { Shutdown(); } |
193 |
|
|
|
194 |
|
|
const char* GetShortName() const { return "mVU1"; } |
195 |
|
|
wxString GetLongName() const { return L"microVU1 Recompiler"; } |
196 |
|
|
|
197 |
|
|
void Allocate(); |
198 |
|
|
void Shutdown() throw(); |
199 |
|
|
void Reset(); |
200 |
|
|
void Execute(u32 cycles); |
201 |
|
|
void Clear(u32 addr, u32 size); |
202 |
|
|
void Vsync() throw(); |
203 |
|
|
}; |
204 |
|
|
|
205 |
|
|
// -------------------------------------------------------------------------------------- |
206 |
|
|
// recSuperVU0 / recSuperVU1 |
207 |
|
|
// -------------------------------------------------------------------------------------- |
208 |
|
|
|
209 |
|
|
class recSuperVU0 : public BaseVUmicroCPU |
210 |
|
|
{ |
211 |
|
|
public: |
212 |
|
|
recSuperVU0(); |
213 |
|
|
|
214 |
|
|
const char* GetShortName() const { return "sVU0"; } |
215 |
|
|
wxString GetLongName() const { return L"SuperVU0 Recompiler"; } |
216 |
|
|
|
217 |
|
|
void Allocate(); |
218 |
|
|
void Shutdown() throw(); |
219 |
|
|
void Reset(); |
220 |
|
|
void Execute(u32 cycles); |
221 |
|
|
void Clear(u32 Addr, u32 Size); |
222 |
|
|
}; |
223 |
|
|
|
224 |
|
|
class recSuperVU1 : public BaseVUmicroCPU |
225 |
|
|
{ |
226 |
|
|
public: |
227 |
|
|
recSuperVU1(); |
228 |
|
|
|
229 |
|
|
const char* GetShortName() const { return "sVU1"; } |
230 |
|
|
wxString GetLongName() const { return L"SuperVU1 Recompiler"; } |
231 |
|
|
|
232 |
|
|
void Allocate(); |
233 |
|
|
void Shutdown() throw(); |
234 |
|
|
void Reset(); |
235 |
|
|
void Execute(u32 cycles); |
236 |
|
|
void Clear(u32 Addr, u32 Size); |
237 |
|
|
}; |
238 |
|
|
|
239 |
|
|
extern BaseVUmicroCPU* CpuVU0; |
240 |
|
|
extern BaseVUmicroCPU* CpuVU1; |
241 |
|
|
|
242 |
|
|
|
243 |
|
|
///////////////////////////////////////////////////////////////// |
244 |
|
|
// These functions initialize memory for both VUs. |
245 |
|
|
// |
246 |
|
|
void vuMicroMemAlloc(); |
247 |
|
|
void vuMicroMemShutdown(); |
248 |
|
|
void vuMicroMemReset(); |
249 |
|
|
|
250 |
|
|
///////////////////////////////////////////////////////////////// |
251 |
|
|
// Everything else does stuff on a per-VU basis. |
252 |
|
|
// |
253 |
|
|
void iDumpVU0Registers(); |
254 |
|
|
void iDumpVU1Registers(); |
255 |
|
|
|
256 |
|
|
|
257 |
|
|
extern void (*VU0_LOWER_OPCODE[128])(); |
258 |
|
|
extern void (*VU0_UPPER_OPCODE[64])(); |
259 |
|
|
|
260 |
|
|
extern void (*VU0_UPPER_FD_00_TABLE[32])(); |
261 |
|
|
extern void (*VU0_UPPER_FD_01_TABLE[32])(); |
262 |
|
|
extern void (*VU0_UPPER_FD_10_TABLE[32])(); |
263 |
|
|
extern void (*VU0_UPPER_FD_11_TABLE[32])(); |
264 |
|
|
|
265 |
|
|
extern void (*VU0regs_LOWER_OPCODE[128])(_VURegsNum *VUregsn); |
266 |
|
|
extern void (*VU0regs_UPPER_OPCODE[64])(_VURegsNum *VUregsn); |
267 |
|
|
|
268 |
|
|
extern void (*VU0regs_UPPER_FD_00_TABLE[32])(_VURegsNum *VUregsn); |
269 |
|
|
extern void (*VU0regs_UPPER_FD_01_TABLE[32])(_VURegsNum *VUregsn); |
270 |
|
|
extern void (*VU0regs_UPPER_FD_10_TABLE[32])(_VURegsNum *VUregsn); |
271 |
|
|
extern void (*VU0regs_UPPER_FD_11_TABLE[32])(_VURegsNum *VUregsn); |
272 |
|
|
|
273 |
|
|
extern void (*VU1_LOWER_OPCODE[128])(); |
274 |
|
|
extern void (*VU1_UPPER_OPCODE[64])(); |
275 |
|
|
|
276 |
|
|
extern void (*VU1_UPPER_FD_00_TABLE[32])(); |
277 |
|
|
extern void (*VU1_UPPER_FD_01_TABLE[32])(); |
278 |
|
|
extern void (*VU1_UPPER_FD_10_TABLE[32])(); |
279 |
|
|
extern void (*VU1_UPPER_FD_11_TABLE[32])(); |
280 |
|
|
|
281 |
|
|
extern void (*VU1regs_LOWER_OPCODE[128])(_VURegsNum *VUregsn); |
282 |
|
|
extern void (*VU1regs_UPPER_OPCODE[64])(_VURegsNum *VUregsn); |
283 |
|
|
|
284 |
|
|
extern void (*VU1regs_UPPER_FD_00_TABLE[32])(_VURegsNum *VUregsn); |
285 |
|
|
extern void (*VU1regs_UPPER_FD_01_TABLE[32])(_VURegsNum *VUregsn); |
286 |
|
|
extern void (*VU1regs_UPPER_FD_10_TABLE[32])(_VURegsNum *VUregsn); |
287 |
|
|
extern void (*VU1regs_UPPER_FD_11_TABLE[32])(_VURegsNum *VUregsn); |
288 |
|
|
|
289 |
|
|
// VU0 |
290 |
|
|
extern void vu0ResetRegs(); |
291 |
|
|
extern void __fastcall vu0ExecMicro(u32 addr); |
292 |
|
|
extern void vu0Exec(VURegs* VU); |
293 |
|
|
extern void vu0Finish(); |
294 |
|
|
extern void recResetVU0( void ); |
295 |
|
|
|
296 |
|
|
// VU1 |
297 |
|
|
extern void vu1Finish(); |
298 |
|
|
extern void vu1ResetRegs(); |
299 |
|
|
extern void __fastcall vu1ExecMicro(u32 addr); |
300 |
|
|
extern void vu1Exec(VURegs* VU); |
301 |
|
|
|
302 |
|
|
void VU0_UPPER_FD_00(); |
303 |
|
|
void VU0_UPPER_FD_01(); |
304 |
|
|
void VU0_UPPER_FD_10(); |
305 |
|
|
void VU0_UPPER_FD_11(); |
306 |
|
|
|
307 |
|
|
void VU0LowerOP(); |
308 |
|
|
void VU0LowerOP_T3_00(); |
309 |
|
|
void VU0LowerOP_T3_01(); |
310 |
|
|
void VU0LowerOP_T3_10(); |
311 |
|
|
void VU0LowerOP_T3_11(); |
312 |
|
|
|
313 |
|
|
void VU0unknown(); |
314 |
|
|
|
315 |
|
|
void VU1_UPPER_FD_00(); |
316 |
|
|
void VU1_UPPER_FD_01(); |
317 |
|
|
void VU1_UPPER_FD_10(); |
318 |
|
|
void VU1_UPPER_FD_11(); |
319 |
|
|
|
320 |
|
|
void VU1LowerOP(); |
321 |
|
|
void VU1LowerOP_T3_00(); |
322 |
|
|
void VU1LowerOP_T3_01(); |
323 |
|
|
void VU1LowerOP_T3_10(); |
324 |
|
|
void VU1LowerOP_T3_11(); |
325 |
|
|
|
326 |
|
|
void VU1unknown(); |
327 |
|
|
|
328 |
|
|
void VU0regs_UPPER_FD_00(_VURegsNum *VUregsn); |
329 |
|
|
void VU0regs_UPPER_FD_01(_VURegsNum *VUregsn); |
330 |
|
|
void VU0regs_UPPER_FD_10(_VURegsNum *VUregsn); |
331 |
|
|
void VU0regs_UPPER_FD_11(_VURegsNum *VUregsn); |
332 |
|
|
|
333 |
|
|
void VU0regsLowerOP(_VURegsNum *VUregsn); |
334 |
|
|
void VU0regsLowerOP_T3_00(_VURegsNum *VUregsn); |
335 |
|
|
void VU0regsLowerOP_T3_01(_VURegsNum *VUregsn); |
336 |
|
|
void VU0regsLowerOP_T3_10(_VURegsNum *VUregsn); |
337 |
|
|
void VU0regsLowerOP_T3_11(_VURegsNum *VUregsn); |
338 |
|
|
|
339 |
|
|
void VU0regsunknown(_VURegsNum *VUregsn); |
340 |
|
|
|
341 |
|
|
void VU1regs_UPPER_FD_00(_VURegsNum *VUregsn); |
342 |
|
|
void VU1regs_UPPER_FD_01(_VURegsNum *VUregsn); |
343 |
|
|
void VU1regs_UPPER_FD_10(_VURegsNum *VUregsn); |
344 |
|
|
void VU1regs_UPPER_FD_11(_VURegsNum *VUregsn); |
345 |
|
|
|
346 |
|
|
void VU1regsLowerOP(_VURegsNum *VUregsn); |
347 |
|
|
void VU1regsLowerOP_T3_00(_VURegsNum *VUregsn); |
348 |
|
|
void VU1regsLowerOP_T3_01(_VURegsNum *VUregsn); |
349 |
|
|
void VU1regsLowerOP_T3_10(_VURegsNum *VUregsn); |
350 |
|
|
void VU1regsLowerOP_T3_11(_VURegsNum *VUregsn); |
351 |
|
|
|
352 |
|
|
void VU1regsunknown(_VURegsNum *VUregsn); |
353 |
|
|
|
354 |
|
|
/***************************************** |
355 |
|
|
VU0 Micromode Upper instructions |
356 |
|
|
*****************************************/ |
357 |
|
|
|
358 |
|
|
void VU0MI_ABS(); |
359 |
|
|
void VU0MI_ADD(); |
360 |
|
|
void VU0MI_ADDi(); |
361 |
|
|
void VU0MI_ADDq(); |
362 |
|
|
void VU0MI_ADDx(); |
363 |
|
|
void VU0MI_ADDy(); |
364 |
|
|
void VU0MI_ADDz(); |
365 |
|
|
void VU0MI_ADDw(); |
366 |
|
|
void VU0MI_ADDA(); |
367 |
|
|
void VU0MI_ADDAi(); |
368 |
|
|
void VU0MI_ADDAq(); |
369 |
|
|
void VU0MI_ADDAx(); |
370 |
|
|
void VU0MI_ADDAy(); |
371 |
|
|
void VU0MI_ADDAz(); |
372 |
|
|
void VU0MI_ADDAw(); |
373 |
|
|
void VU0MI_SUB(); |
374 |
|
|
void VU0MI_SUBi(); |
375 |
|
|
void VU0MI_SUBq(); |
376 |
|
|
void VU0MI_SUBx(); |
377 |
|
|
void VU0MI_SUBy(); |
378 |
|
|
void VU0MI_SUBz(); |
379 |
|
|
void VU0MI_SUBw(); |
380 |
|
|
void VU0MI_SUBA(); |
381 |
|
|
void VU0MI_SUBAi(); |
382 |
|
|
void VU0MI_SUBAq(); |
383 |
|
|
void VU0MI_SUBAx(); |
384 |
|
|
void VU0MI_SUBAy(); |
385 |
|
|
void VU0MI_SUBAz(); |
386 |
|
|
void VU0MI_SUBAw(); |
387 |
|
|
void VU0MI_MUL(); |
388 |
|
|
void VU0MI_MULi(); |
389 |
|
|
void VU0MI_MULq(); |
390 |
|
|
void VU0MI_MULx(); |
391 |
|
|
void VU0MI_MULy(); |
392 |
|
|
void VU0MI_MULz(); |
393 |
|
|
void VU0MI_MULw(); |
394 |
|
|
void VU0MI_MULA(); |
395 |
|
|
void VU0MI_MULAi(); |
396 |
|
|
void VU0MI_MULAq(); |
397 |
|
|
void VU0MI_MULAx(); |
398 |
|
|
void VU0MI_MULAy(); |
399 |
|
|
void VU0MI_MULAz(); |
400 |
|
|
void VU0MI_MULAw(); |
401 |
|
|
void VU0MI_MADD(); |
402 |
|
|
void VU0MI_MADDi(); |
403 |
|
|
void VU0MI_MADDq(); |
404 |
|
|
void VU0MI_MADDx(); |
405 |
|
|
void VU0MI_MADDy(); |
406 |
|
|
void VU0MI_MADDz(); |
407 |
|
|
void VU0MI_MADDw(); |
408 |
|
|
void VU0MI_MADDA(); |
409 |
|
|
void VU0MI_MADDAi(); |
410 |
|
|
void VU0MI_MADDAq(); |
411 |
|
|
void VU0MI_MADDAx(); |
412 |
|
|
void VU0MI_MADDAy(); |
413 |
|
|
void VU0MI_MADDAz(); |
414 |
|
|
void VU0MI_MADDAw(); |
415 |
|
|
void VU0MI_MSUB(); |
416 |
|
|
void VU0MI_MSUBi(); |
417 |
|
|
void VU0MI_MSUBq(); |
418 |
|
|
void VU0MI_MSUBx(); |
419 |
|
|
void VU0MI_MSUBy(); |
420 |
|
|
void VU0MI_MSUBz(); |
421 |
|
|
void VU0MI_MSUBw(); |
422 |
|
|
void VU0MI_MSUBA(); |
423 |
|
|
void VU0MI_MSUBAi(); |
424 |
|
|
void VU0MI_MSUBAq(); |
425 |
|
|
void VU0MI_MSUBAx(); |
426 |
|
|
void VU0MI_MSUBAy(); |
427 |
|
|
void VU0MI_MSUBAz(); |
428 |
|
|
void VU0MI_MSUBAw(); |
429 |
|
|
void VU0MI_MAX(); |
430 |
|
|
void VU0MI_MAXi(); |
431 |
|
|
void VU0MI_MAXx(); |
432 |
|
|
void VU0MI_MAXy(); |
433 |
|
|
void VU0MI_MAXz(); |
434 |
|
|
void VU0MI_MAXw(); |
435 |
|
|
void VU0MI_MINI(); |
436 |
|
|
void VU0MI_MINIi(); |
437 |
|
|
void VU0MI_MINIx(); |
438 |
|
|
void VU0MI_MINIy(); |
439 |
|
|
void VU0MI_MINIz(); |
440 |
|
|
void VU0MI_MINIw(); |
441 |
|
|
void VU0MI_OPMULA(); |
442 |
|
|
void VU0MI_OPMSUB(); |
443 |
|
|
void VU0MI_NOP(); |
444 |
|
|
void VU0MI_FTOI0(); |
445 |
|
|
void VU0MI_FTOI4(); |
446 |
|
|
void VU0MI_FTOI12(); |
447 |
|
|
void VU0MI_FTOI15(); |
448 |
|
|
void VU0MI_ITOF0(); |
449 |
|
|
void VU0MI_ITOF4(); |
450 |
|
|
void VU0MI_ITOF12(); |
451 |
|
|
void VU0MI_ITOF15(); |
452 |
|
|
void VU0MI_CLIP(); |
453 |
|
|
|
454 |
|
|
/***************************************** |
455 |
|
|
VU0 Micromode Lower instructions |
456 |
|
|
*****************************************/ |
457 |
|
|
|
458 |
|
|
void VU0MI_DIV(); |
459 |
|
|
void VU0MI_SQRT(); |
460 |
|
|
void VU0MI_RSQRT(); |
461 |
|
|
void VU0MI_IADD(); |
462 |
|
|
void VU0MI_IADDI(); |
463 |
|
|
void VU0MI_IADDIU(); |
464 |
|
|
void VU0MI_IAND(); |
465 |
|
|
void VU0MI_IOR(); |
466 |
|
|
void VU0MI_ISUB(); |
467 |
|
|
void VU0MI_ISUBIU(); |
468 |
|
|
void VU0MI_MOVE(); |
469 |
|
|
void VU0MI_MFIR(); |
470 |
|
|
void VU0MI_MTIR(); |
471 |
|
|
void VU0MI_MR32(); |
472 |
|
|
void VU0MI_LQ(); |
473 |
|
|
void VU0MI_LQD(); |
474 |
|
|
void VU0MI_LQI(); |
475 |
|
|
void VU0MI_SQ(); |
476 |
|
|
void VU0MI_SQD(); |
477 |
|
|
void VU0MI_SQI(); |
478 |
|
|
void VU0MI_ILW(); |
479 |
|
|
void VU0MI_ISW(); |
480 |
|
|
void VU0MI_ILWR(); |
481 |
|
|
void VU0MI_ISWR(); |
482 |
|
|
void VU0MI_LOI(); |
483 |
|
|
void VU0MI_RINIT(); |
484 |
|
|
void VU0MI_RGET(); |
485 |
|
|
void VU0MI_RNEXT(); |
486 |
|
|
void VU0MI_RXOR(); |
487 |
|
|
void VU0MI_WAITQ(); |
488 |
|
|
void VU0MI_FSAND(); |
489 |
|
|
void VU0MI_FSEQ(); |
490 |
|
|
void VU0MI_FSOR(); |
491 |
|
|
void VU0MI_FSSET(); |
492 |
|
|
void VU0MI_FMAND(); |
493 |
|
|
void VU0MI_FMEQ(); |
494 |
|
|
void VU0MI_FMOR(); |
495 |
|
|
void VU0MI_FCAND(); |
496 |
|
|
void VU0MI_FCEQ(); |
497 |
|
|
void VU0MI_FCOR(); |
498 |
|
|
void VU0MI_FCSET(); |
499 |
|
|
void VU0MI_FCGET(); |
500 |
|
|
void VU0MI_IBEQ(); |
501 |
|
|
void VU0MI_IBGEZ(); |
502 |
|
|
void VU0MI_IBGTZ(); |
503 |
|
|
void VU0MI_IBLEZ(); |
504 |
|
|
void VU0MI_IBLTZ(); |
505 |
|
|
void VU0MI_IBNE(); |
506 |
|
|
void VU0MI_B(); |
507 |
|
|
void VU0MI_BAL(); |
508 |
|
|
void VU0MI_JR(); |
509 |
|
|
void VU0MI_JALR(); |
510 |
|
|
void VU0MI_MFP(); |
511 |
|
|
void VU0MI_WAITP(); |
512 |
|
|
void VU0MI_ESADD(); |
513 |
|
|
void VU0MI_ERSADD(); |
514 |
|
|
void VU0MI_ELENG(); |
515 |
|
|
void VU0MI_ERLENG(); |
516 |
|
|
void VU0MI_EATANxy(); |
517 |
|
|
void VU0MI_EATANxz(); |
518 |
|
|
void VU0MI_ESUM(); |
519 |
|
|
void VU0MI_ERCPR(); |
520 |
|
|
void VU0MI_ESQRT(); |
521 |
|
|
void VU0MI_ERSQRT(); |
522 |
|
|
void VU0MI_ESIN(); |
523 |
|
|
void VU0MI_EATAN(); |
524 |
|
|
void VU0MI_EEXP(); |
525 |
|
|
void VU0MI_XGKICK(); |
526 |
|
|
void VU0MI_XTOP(); |
527 |
|
|
void VU0MI_XITOP(); |
528 |
|
|
|
529 |
|
|
/***************************************** |
530 |
|
|
VU1 Micromode Upper instructions |
531 |
|
|
*****************************************/ |
532 |
|
|
|
533 |
|
|
void VU0regsMI_ABS(_VURegsNum *VUregsn); |
534 |
|
|
void VU0regsMI_ADD(_VURegsNum *VUregsn); |
535 |
|
|
void VU0regsMI_ADDi(_VURegsNum *VUregsn); |
536 |
|
|
void VU0regsMI_ADDq(_VURegsNum *VUregsn); |
537 |
|
|
void VU0regsMI_ADDx(_VURegsNum *VUregsn); |
538 |
|
|
void VU0regsMI_ADDy(_VURegsNum *VUregsn); |
539 |
|
|
void VU0regsMI_ADDz(_VURegsNum *VUregsn); |
540 |
|
|
void VU0regsMI_ADDw(_VURegsNum *VUregsn); |
541 |
|
|
void VU0regsMI_ADDA(_VURegsNum *VUregsn); |
542 |
|
|
void VU0regsMI_ADDAi(_VURegsNum *VUregsn); |
543 |
|
|
void VU0regsMI_ADDAq(_VURegsNum *VUregsn); |
544 |
|
|
void VU0regsMI_ADDAx(_VURegsNum *VUregsn); |
545 |
|
|
void VU0regsMI_ADDAy(_VURegsNum *VUregsn); |
546 |
|
|
void VU0regsMI_ADDAz(_VURegsNum *VUregsn); |
547 |
|
|
void VU0regsMI_ADDAw(_VURegsNum *VUregsn); |
548 |
|
|
void VU0regsMI_SUB(_VURegsNum *VUregsn); |
549 |
|
|
void VU0regsMI_SUBi(_VURegsNum *VUregsn); |
550 |
|
|
void VU0regsMI_SUBq(_VURegsNum *VUregsn); |
551 |
|
|
void VU0regsMI_SUBx(_VURegsNum *VUregsn); |
552 |
|
|
void VU0regsMI_SUBy(_VURegsNum *VUregsn); |
553 |
|
|
void VU0regsMI_SUBz(_VURegsNum *VUregsn); |
554 |
|
|
void VU0regsMI_SUBw(_VURegsNum *VUregsn); |
555 |
|
|
void VU0regsMI_SUBA(_VURegsNum *VUregsn); |
556 |
|
|
void VU0regsMI_SUBAi(_VURegsNum *VUregsn); |
557 |
|
|
void VU0regsMI_SUBAq(_VURegsNum *VUregsn); |
558 |
|
|
void VU0regsMI_SUBAx(_VURegsNum *VUregsn); |
559 |
|
|
void VU0regsMI_SUBAy(_VURegsNum *VUregsn); |
560 |
|
|
void VU0regsMI_SUBAz(_VURegsNum *VUregsn); |
561 |
|
|
void VU0regsMI_SUBAw(_VURegsNum *VUregsn); |
562 |
|
|
void VU0regsMI_MUL(_VURegsNum *VUregsn); |
563 |
|
|
void VU0regsMI_MULi(_VURegsNum *VUregsn); |
564 |
|
|
void VU0regsMI_MULq(_VURegsNum *VUregsn); |
565 |
|
|
void VU0regsMI_MULx(_VURegsNum *VUregsn); |
566 |
|
|
void VU0regsMI_MULy(_VURegsNum *VUregsn); |
567 |
|
|
void VU0regsMI_MULz(_VURegsNum *VUregsn); |
568 |
|
|
void VU0regsMI_MULw(_VURegsNum *VUregsn); |
569 |
|
|
void VU0regsMI_MULA(_VURegsNum *VUregsn); |
570 |
|
|
void VU0regsMI_MULAi(_VURegsNum *VUregsn); |
571 |
|
|
void VU0regsMI_MULAq(_VURegsNum *VUregsn); |
572 |
|
|
void VU0regsMI_MULAx(_VURegsNum *VUregsn); |
573 |
|
|
void VU0regsMI_MULAy(_VURegsNum *VUregsn); |
574 |
|
|
void VU0regsMI_MULAz(_VURegsNum *VUregsn); |
575 |
|
|
void VU0regsMI_MULAw(_VURegsNum *VUregsn); |
576 |
|
|
void VU0regsMI_MADD(_VURegsNum *VUregsn); |
577 |
|
|
void VU0regsMI_MADDi(_VURegsNum *VUregsn); |
578 |
|
|
void VU0regsMI_MADDq(_VURegsNum *VUregsn); |
579 |
|
|
void VU0regsMI_MADDx(_VURegsNum *VUregsn); |
580 |
|
|
void VU0regsMI_MADDy(_VURegsNum *VUregsn); |
581 |
|
|
void VU0regsMI_MADDz(_VURegsNum *VUregsn); |
582 |
|
|
void VU0regsMI_MADDw(_VURegsNum *VUregsn); |
583 |
|
|
void VU0regsMI_MADDA(_VURegsNum *VUregsn); |
584 |
|
|
void VU0regsMI_MADDAi(_VURegsNum *VUregsn); |
585 |
|
|
void VU0regsMI_MADDAq(_VURegsNum *VUregsn); |
586 |
|
|
void VU0regsMI_MADDAx(_VURegsNum *VUregsn); |
587 |
|
|
void VU0regsMI_MADDAy(_VURegsNum *VUregsn); |
588 |
|
|
void VU0regsMI_MADDAz(_VURegsNum *VUregsn); |
589 |
|
|
void VU0regsMI_MADDAw(_VURegsNum *VUregsn); |
590 |
|
|
void VU0regsMI_MSUB(_VURegsNum *VUregsn); |
591 |
|
|
void VU0regsMI_MSUBi(_VURegsNum *VUregsn); |
592 |
|
|
void VU0regsMI_MSUBq(_VURegsNum *VUregsn); |
593 |
|
|
void VU0regsMI_MSUBx(_VURegsNum *VUregsn); |
594 |
|
|
void VU0regsMI_MSUBy(_VURegsNum *VUregsn); |
595 |
|
|
void VU0regsMI_MSUBz(_VURegsNum *VUregsn); |
596 |
|
|
void VU0regsMI_MSUBw(_VURegsNum *VUregsn); |
597 |
|
|
void VU0regsMI_MSUBA(_VURegsNum *VUregsn); |
598 |
|
|
void VU0regsMI_MSUBAi(_VURegsNum *VUregsn); |
599 |
|
|
void VU0regsMI_MSUBAq(_VURegsNum *VUregsn); |
600 |
|
|
void VU0regsMI_MSUBAx(_VURegsNum *VUregsn); |
601 |
|
|
void VU0regsMI_MSUBAy(_VURegsNum *VUregsn); |
602 |
|
|
void VU0regsMI_MSUBAz(_VURegsNum *VUregsn); |
603 |
|
|
void VU0regsMI_MSUBAw(_VURegsNum *VUregsn); |
604 |
|
|
void VU0regsMI_MAX(_VURegsNum *VUregsn); |
605 |
|
|
void VU0regsMI_MAXi(_VURegsNum *VUregsn); |
606 |
|
|
void VU0regsMI_MAXx(_VURegsNum *VUregsn); |
607 |
|
|
void VU0regsMI_MAXy(_VURegsNum *VUregsn); |
608 |
|
|
void VU0regsMI_MAXz(_VURegsNum *VUregsn); |
609 |
|
|
void VU0regsMI_MAXw(_VURegsNum *VUregsn); |
610 |
|
|
void VU0regsMI_MINI(_VURegsNum *VUregsn); |
611 |
|
|
void VU0regsMI_MINIi(_VURegsNum *VUregsn); |
612 |
|
|
void VU0regsMI_MINIx(_VURegsNum *VUregsn); |
613 |
|
|
void VU0regsMI_MINIy(_VURegsNum *VUregsn); |
614 |
|
|
void VU0regsMI_MINIz(_VURegsNum *VUregsn); |
615 |
|
|
void VU0regsMI_MINIw(_VURegsNum *VUregsn); |
616 |
|
|
void VU0regsMI_OPMULA(_VURegsNum *VUregsn); |
617 |
|
|
void VU0regsMI_OPMSUB(_VURegsNum *VUregsn); |
618 |
|
|
void VU0regsMI_NOP(_VURegsNum *VUregsn); |
619 |
|
|
void VU0regsMI_FTOI0(_VURegsNum *VUregsn); |
620 |
|
|
void VU0regsMI_FTOI4(_VURegsNum *VUregsn); |
621 |
|
|
void VU0regsMI_FTOI12(_VURegsNum *VUregsn); |
622 |
|
|
void VU0regsMI_FTOI15(_VURegsNum *VUregsn); |
623 |
|
|
void VU0regsMI_ITOF0(_VURegsNum *VUregsn); |
624 |
|
|
void VU0regsMI_ITOF4(_VURegsNum *VUregsn); |
625 |
|
|
void VU0regsMI_ITOF12(_VURegsNum *VUregsn); |
626 |
|
|
void VU0regsMI_ITOF15(_VURegsNum *VUregsn); |
627 |
|
|
void VU0regsMI_CLIP(_VURegsNum *VUregsn); |
628 |
|
|
|
629 |
|
|
/***************************************** |
630 |
|
|
VU0 Micromode Lower instructions |
631 |
|
|
*****************************************/ |
632 |
|
|
|
633 |
|
|
void VU0regsMI_DIV(_VURegsNum *VUregsn); |
634 |
|
|
void VU0regsMI_SQRT(_VURegsNum *VUregsn); |
635 |
|
|
void VU0regsMI_RSQRT(_VURegsNum *VUregsn); |
636 |
|
|
void VU0regsMI_IADD(_VURegsNum *VUregsn); |
637 |
|
|
void VU0regsMI_IADDI(_VURegsNum *VUregsn); |
638 |
|
|
void VU0regsMI_IADDIU(_VURegsNum *VUregsn); |
639 |
|
|
void VU0regsMI_IAND(_VURegsNum *VUregsn); |
640 |
|
|
void VU0regsMI_IOR(_VURegsNum *VUregsn); |
641 |
|
|
void VU0regsMI_ISUB(_VURegsNum *VUregsn); |
642 |
|
|
void VU0regsMI_ISUBIU(_VURegsNum *VUregsn); |
643 |
|
|
void VU0regsMI_MOVE(_VURegsNum *VUregsn); |
644 |
|
|
void VU0regsMI_MFIR(_VURegsNum *VUregsn); |
645 |
|
|
void VU0regsMI_MTIR(_VURegsNum *VUregsn); |
646 |
|
|
void VU0regsMI_MR32(_VURegsNum *VUregsn); |
647 |
|
|
void VU0regsMI_LQ(_VURegsNum *VUregsn); |
648 |
|
|
void VU0regsMI_LQD(_VURegsNum *VUregsn); |
649 |
|
|
void VU0regsMI_LQI(_VURegsNum *VUregsn); |
650 |
|
|
void VU0regsMI_SQ(_VURegsNum *VUregsn); |
651 |
|
|
void VU0regsMI_SQD(_VURegsNum *VUregsn); |
652 |
|
|
void VU0regsMI_SQI(_VURegsNum *VUregsn); |
653 |
|
|
void VU0regsMI_ILW(_VURegsNum *VUregsn); |
654 |
|
|
void VU0regsMI_ISW(_VURegsNum *VUregsn); |
655 |
|
|
void VU0regsMI_ILWR(_VURegsNum *VUregsn); |
656 |
|
|
void VU0regsMI_ISWR(_VURegsNum *VUregsn); |
657 |
|
|
void VU0regsMI_LOI(_VURegsNum *VUregsn); |
658 |
|
|
void VU0regsMI_RINIT(_VURegsNum *VUregsn); |
659 |
|
|
void VU0regsMI_RGET(_VURegsNum *VUregsn); |
660 |
|
|
void VU0regsMI_RNEXT(_VURegsNum *VUregsn); |
661 |
|
|
void VU0regsMI_RXOR(_VURegsNum *VUregsn); |
662 |
|
|
void VU0regsMI_WAITQ(_VURegsNum *VUregsn); |
663 |
|
|
void VU0regsMI_FSAND(_VURegsNum *VUregsn); |
664 |
|
|
void VU0regsMI_FSEQ(_VURegsNum *VUregsn); |
665 |
|
|
void VU0regsMI_FSOR(_VURegsNum *VUregsn); |
666 |
|
|
void VU0regsMI_FSSET(_VURegsNum *VUregsn); |
667 |
|
|
void VU0regsMI_FMAND(_VURegsNum *VUregsn); |
668 |
|
|
void VU0regsMI_FMEQ(_VURegsNum *VUregsn); |
669 |
|
|
void VU0regsMI_FMOR(_VURegsNum *VUregsn); |
670 |
|
|
void VU0regsMI_FCAND(_VURegsNum *VUregsn); |
671 |
|
|
void VU0regsMI_FCEQ(_VURegsNum *VUregsn); |
672 |
|
|
void VU0regsMI_FCOR(_VURegsNum *VUregsn); |
673 |
|
|
void VU0regsMI_FCSET(_VURegsNum *VUregsn); |
674 |
|
|
void VU0regsMI_FCGET(_VURegsNum *VUregsn); |
675 |
|
|
void VU0regsMI_IBEQ(_VURegsNum *VUregsn); |
676 |
|
|
void VU0regsMI_IBGEZ(_VURegsNum *VUregsn); |
677 |
|
|
void VU0regsMI_IBGTZ(_VURegsNum *VUregsn); |
678 |
|
|
void VU0regsMI_IBLTZ(_VURegsNum *VUregsn); |
679 |
|
|
void VU0regsMI_IBLEZ(_VURegsNum *VUregsn); |
680 |
|
|
void VU0regsMI_IBNE(_VURegsNum *VUregsn); |
681 |
|
|
void VU0regsMI_B(_VURegsNum *VUregsn); |
682 |
|
|
void VU0regsMI_BAL(_VURegsNum *VUregsn); |
683 |
|
|
void VU0regsMI_JR(_VURegsNum *VUregsn); |
684 |
|
|
void VU0regsMI_JALR(_VURegsNum *VUregsn); |
685 |
|
|
void VU0regsMI_MFP(_VURegsNum *VUregsn); |
686 |
|
|
void VU0regsMI_WAITP(_VURegsNum *VUregsn); |
687 |
|
|
void VU0regsMI_ESADD(_VURegsNum *VUregsn); |
688 |
|
|
void VU0regsMI_ERSADD(_VURegsNum *VUregsn); |
689 |
|
|
void VU0regsMI_ELENG(_VURegsNum *VUregsn); |
690 |
|
|
void VU0regsMI_ERLENG(_VURegsNum *VUregsn); |
691 |
|
|
void VU0regsMI_EATANxy(_VURegsNum *VUregsn); |
692 |
|
|
void VU0regsMI_EATANxz(_VURegsNum *VUregsn); |
693 |
|
|
void VU0regsMI_ESUM(_VURegsNum *VUregsn); |
694 |
|
|
void VU0regsMI_ERCPR(_VURegsNum *VUregsn); |
695 |
|
|
void VU0regsMI_ESQRT(_VURegsNum *VUregsn); |
696 |
|
|
void VU0regsMI_ERSQRT(_VURegsNum *VUregsn); |
697 |
|
|
void VU0regsMI_ESIN(_VURegsNum *VUregsn); |
698 |
|
|
void VU0regsMI_EATAN(_VURegsNum *VUregsn); |
699 |
|
|
void VU0regsMI_EEXP(_VURegsNum *VUregsn); |
700 |
|
|
void VU0regsMI_XGKICK(_VURegsNum *VUregsn); |
701 |
|
|
void VU0regsMI_XTOP(_VURegsNum *VUregsn); |
702 |
|
|
void VU0regsMI_XITOP(_VURegsNum *VUregsn); |
703 |
|
|
|
704 |
|
|
/***************************************** |
705 |
|
|
VU1 Micromode Upper instructions |
706 |
|
|
*****************************************/ |
707 |
|
|
|
708 |
|
|
void VU1MI_ABS(); |
709 |
|
|
void VU1MI_ADD(); |
710 |
|
|
void VU1MI_ADDi(); |
711 |
|
|
void VU1MI_ADDq(); |
712 |
|
|
void VU1MI_ADDx(); |
713 |
|
|
void VU1MI_ADDy(); |
714 |
|
|
void VU1MI_ADDz(); |
715 |
|
|
void VU1MI_ADDw(); |
716 |
|
|
void VU1MI_ADDA(); |
717 |
|
|
void VU1MI_ADDAi(); |
718 |
|
|
void VU1MI_ADDAq(); |
719 |
|
|
void VU1MI_ADDAx(); |
720 |
|
|
void VU1MI_ADDAy(); |
721 |
|
|
void VU1MI_ADDAz(); |
722 |
|
|
void VU1MI_ADDAw(); |
723 |
|
|
void VU1MI_SUB(); |
724 |
|
|
void VU1MI_SUBi(); |
725 |
|
|
void VU1MI_SUBq(); |
726 |
|
|
void VU1MI_SUBx(); |
727 |
|
|
void VU1MI_SUBy(); |
728 |
|
|
void VU1MI_SUBz(); |
729 |
|
|
void VU1MI_SUBw(); |
730 |
|
|
void VU1MI_SUBA(); |
731 |
|
|
void VU1MI_SUBAi(); |
732 |
|
|
void VU1MI_SUBAq(); |
733 |
|
|
void VU1MI_SUBAx(); |
734 |
|
|
void VU1MI_SUBAy(); |
735 |
|
|
void VU1MI_SUBAz(); |
736 |
|
|
void VU1MI_SUBAw(); |
737 |
|
|
void VU1MI_MUL(); |
738 |
|
|
void VU1MI_MULi(); |
739 |
|
|
void VU1MI_MULq(); |
740 |
|
|
void VU1MI_MULx(); |
741 |
|
|
void VU1MI_MULy(); |
742 |
|
|
void VU1MI_MULz(); |
743 |
|
|
void VU1MI_MULw(); |
744 |
|
|
void VU1MI_MULA(); |
745 |
|
|
void VU1MI_MULAi(); |
746 |
|
|
void VU1MI_MULAq(); |
747 |
|
|
void VU1MI_MULAx(); |
748 |
|
|
void VU1MI_MULAy(); |
749 |
|
|
void VU1MI_MULAz(); |
750 |
|
|
void VU1MI_MULAw(); |
751 |
|
|
void VU1MI_MADD(); |
752 |
|
|
void VU1MI_MADDi(); |
753 |
|
|
void VU1MI_MADDq(); |
754 |
|
|
void VU1MI_MADDx(); |
755 |
|
|
void VU1MI_MADDy(); |
756 |
|
|
void VU1MI_MADDz(); |
757 |
|
|
void VU1MI_MADDw(); |
758 |
|
|
void VU1MI_MADDA(); |
759 |
|
|
void VU1MI_MADDAi(); |
760 |
|
|
void VU1MI_MADDAq(); |
761 |
|
|
void VU1MI_MADDAx(); |
762 |
|
|
void VU1MI_MADDAy(); |
763 |
|
|
void VU1MI_MADDAz(); |
764 |
|
|
void VU1MI_MADDAw(); |
765 |
|
|
void VU1MI_MSUB(); |
766 |
|
|
void VU1MI_MSUBi(); |
767 |
|
|
void VU1MI_MSUBq(); |
768 |
|
|
void VU1MI_MSUBx(); |
769 |
|
|
void VU1MI_MSUBy(); |
770 |
|
|
void VU1MI_MSUBz(); |
771 |
|
|
void VU1MI_MSUBw(); |
772 |
|
|
void VU1MI_MSUBA(); |
773 |
|
|
void VU1MI_MSUBAi(); |
774 |
|
|
void VU1MI_MSUBAq(); |
775 |
|
|
void VU1MI_MSUBAx(); |
776 |
|
|
void VU1MI_MSUBAy(); |
777 |
|
|
void VU1MI_MSUBAz(); |
778 |
|
|
void VU1MI_MSUBAw(); |
779 |
|
|
void VU1MI_MAX(); |
780 |
|
|
void VU1MI_MAXi(); |
781 |
|
|
void VU1MI_MAXx(); |
782 |
|
|
void VU1MI_MAXy(); |
783 |
|
|
void VU1MI_MAXz(); |
784 |
|
|
void VU1MI_MAXw(); |
785 |
|
|
void VU1MI_MINI(); |
786 |
|
|
void VU1MI_MINIi(); |
787 |
|
|
void VU1MI_MINIx(); |
788 |
|
|
void VU1MI_MINIy(); |
789 |
|
|
void VU1MI_MINIz(); |
790 |
|
|
void VU1MI_MINIw(); |
791 |
|
|
void VU1MI_OPMULA(); |
792 |
|
|
void VU1MI_OPMSUB(); |
793 |
|
|
void VU1MI_NOP(); |
794 |
|
|
void VU1MI_FTOI0(); |
795 |
|
|
void VU1MI_FTOI4(); |
796 |
|
|
void VU1MI_FTOI12(); |
797 |
|
|
void VU1MI_FTOI15(); |
798 |
|
|
void VU1MI_ITOF0(); |
799 |
|
|
void VU1MI_ITOF4(); |
800 |
|
|
void VU1MI_ITOF12(); |
801 |
|
|
void VU1MI_ITOF15(); |
802 |
|
|
void VU1MI_CLIP(); |
803 |
|
|
|
804 |
|
|
/***************************************** |
805 |
|
|
VU1 Micromode Lower instructions |
806 |
|
|
*****************************************/ |
807 |
|
|
|
808 |
|
|
void VU1MI_DIV(); |
809 |
|
|
void VU1MI_SQRT(); |
810 |
|
|
void VU1MI_RSQRT(); |
811 |
|
|
void VU1MI_IADD(); |
812 |
|
|
void VU1MI_IADDI(); |
813 |
|
|
void VU1MI_IADDIU(); |
814 |
|
|
void VU1MI_IAND(); |
815 |
|
|
void VU1MI_IOR(); |
816 |
|
|
void VU1MI_ISUB(); |
817 |
|
|
void VU1MI_ISUBIU(); |
818 |
|
|
void VU1MI_MOVE(); |
819 |
|
|
void VU1MI_MFIR(); |
820 |
|
|
void VU1MI_MTIR(); |
821 |
|
|
void VU1MI_MR32(); |
822 |
|
|
void VU1MI_LQ(); |
823 |
|
|
void VU1MI_LQD(); |
824 |
|
|
void VU1MI_LQI(); |
825 |
|
|
void VU1MI_SQ(); |
826 |
|
|
void VU1MI_SQD(); |
827 |
|
|
void VU1MI_SQI(); |
828 |
|
|
void VU1MI_ILW(); |
829 |
|
|
void VU1MI_ISW(); |
830 |
|
|
void VU1MI_ILWR(); |
831 |
|
|
void VU1MI_ISWR(); |
832 |
|
|
void VU1MI_LOI(); |
833 |
|
|
void VU1MI_RINIT(); |
834 |
|
|
void VU1MI_RGET(); |
835 |
|
|
void VU1MI_RNEXT(); |
836 |
|
|
void VU1MI_RXOR(); |
837 |
|
|
void VU1MI_WAITQ(); |
838 |
|
|
void VU1MI_FSAND(); |
839 |
|
|
void VU1MI_FSEQ(); |
840 |
|
|
void VU1MI_FSOR(); |
841 |
|
|
void VU1MI_FSSET(); |
842 |
|
|
void VU1MI_FMAND(); |
843 |
|
|
void VU1MI_FMEQ(); |
844 |
|
|
void VU1MI_FMOR(); |
845 |
|
|
void VU1MI_FCAND(); |
846 |
|
|
void VU1MI_FCEQ(); |
847 |
|
|
void VU1MI_FCOR(); |
848 |
|
|
void VU1MI_FCSET(); |
849 |
|
|
void VU1MI_FCGET(); |
850 |
|
|
void VU1MI_IBEQ(); |
851 |
|
|
void VU1MI_IBGEZ(); |
852 |
|
|
void VU1MI_IBGTZ(); |
853 |
|
|
void VU1MI_IBLTZ(); |
854 |
|
|
void VU1MI_IBLEZ(); |
855 |
|
|
void VU1MI_IBNE(); |
856 |
|
|
void VU1MI_B(); |
857 |
|
|
void VU1MI_BAL(); |
858 |
|
|
void VU1MI_JR(); |
859 |
|
|
void VU1MI_JALR(); |
860 |
|
|
void VU1MI_MFP(); |
861 |
|
|
void VU1MI_WAITP(); |
862 |
|
|
void VU1MI_ESADD(); |
863 |
|
|
void VU1MI_ERSADD(); |
864 |
|
|
void VU1MI_ELENG(); |
865 |
|
|
void VU1MI_ERLENG(); |
866 |
|
|
void VU1MI_EATANxy(); |
867 |
|
|
void VU1MI_EATANxz(); |
868 |
|
|
void VU1MI_ESUM(); |
869 |
|
|
void VU1MI_ERCPR(); |
870 |
|
|
void VU1MI_ESQRT(); |
871 |
|
|
void VU1MI_ERSQRT(); |
872 |
|
|
void VU1MI_ESIN(); |
873 |
|
|
void VU1MI_EATAN(); |
874 |
|
|
void VU1MI_EEXP(); |
875 |
|
|
void VU1MI_XGKICK(); |
876 |
|
|
void VU1MI_XTOP(); |
877 |
|
|
void VU1MI_XITOP(); |
878 |
|
|
|
879 |
|
|
/***************************************** |
880 |
|
|
VU1 Micromode Upper instructions |
881 |
|
|
*****************************************/ |
882 |
|
|
|
883 |
|
|
void VU1regsMI_ABS(_VURegsNum *VUregsn); |
884 |
|
|
void VU1regsMI_ADD(_VURegsNum *VUregsn); |
885 |
|
|
void VU1regsMI_ADDi(_VURegsNum *VUregsn); |
886 |
|
|
void VU1regsMI_ADDq(_VURegsNum *VUregsn); |
887 |
|
|
void VU1regsMI_ADDx(_VURegsNum *VUregsn); |
888 |
|
|
void VU1regsMI_ADDy(_VURegsNum *VUregsn); |
889 |
|
|
void VU1regsMI_ADDz(_VURegsNum *VUregsn); |
890 |
|
|
void VU1regsMI_ADDw(_VURegsNum *VUregsn); |
891 |
|
|
void VU1regsMI_ADDA(_VURegsNum *VUregsn); |
892 |
|
|
void VU1regsMI_ADDAi(_VURegsNum *VUregsn); |
893 |
|
|
void VU1regsMI_ADDAq(_VURegsNum *VUregsn); |
894 |
|
|
void VU1regsMI_ADDAx(_VURegsNum *VUregsn); |
895 |
|
|
void VU1regsMI_ADDAy(_VURegsNum *VUregsn); |
896 |
|
|
void VU1regsMI_ADDAz(_VURegsNum *VUregsn); |
897 |
|
|
void VU1regsMI_ADDAw(_VURegsNum *VUregsn); |
898 |
|
|
void VU1regsMI_SUB(_VURegsNum *VUregsn); |
899 |
|
|
void VU1regsMI_SUBi(_VURegsNum *VUregsn); |
900 |
|
|
void VU1regsMI_SUBq(_VURegsNum *VUregsn); |
901 |
|
|
void VU1regsMI_SUBx(_VURegsNum *VUregsn); |
902 |
|
|
void VU1regsMI_SUBy(_VURegsNum *VUregsn); |
903 |
|
|
void VU1regsMI_SUBz(_VURegsNum *VUregsn); |
904 |
|
|
void VU1regsMI_SUBw(_VURegsNum *VUregsn); |
905 |
|
|
void VU1regsMI_SUBA(_VURegsNum *VUregsn); |
906 |
|
|
void VU1regsMI_SUBAi(_VURegsNum *VUregsn); |
907 |
|
|
void VU1regsMI_SUBAq(_VURegsNum *VUregsn); |
908 |
|
|
void VU1regsMI_SUBAx(_VURegsNum *VUregsn); |
909 |
|
|
void VU1regsMI_SUBAy(_VURegsNum *VUregsn); |
910 |
|
|
void VU1regsMI_SUBAz(_VURegsNum *VUregsn); |
911 |
|
|
void VU1regsMI_SUBAw(_VURegsNum *VUregsn); |
912 |
|
|
void VU1regsMI_MUL(_VURegsNum *VUregsn); |
913 |
|
|
void VU1regsMI_MULi(_VURegsNum *VUregsn); |
914 |
|
|
void VU1regsMI_MULq(_VURegsNum *VUregsn); |
915 |
|
|
void VU1regsMI_MULx(_VURegsNum *VUregsn); |
916 |
|
|
void VU1regsMI_MULy(_VURegsNum *VUregsn); |
917 |
|
|
void VU1regsMI_MULz(_VURegsNum *VUregsn); |
918 |
|
|
void VU1regsMI_MULw(_VURegsNum *VUregsn); |
919 |
|
|
void VU1regsMI_MULA(_VURegsNum *VUregsn); |
920 |
|
|
void VU1regsMI_MULAi(_VURegsNum *VUregsn); |
921 |
|
|
void VU1regsMI_MULAq(_VURegsNum *VUregsn); |
922 |
|
|
void VU1regsMI_MULAx(_VURegsNum *VUregsn); |
923 |
|
|
void VU1regsMI_MULAy(_VURegsNum *VUregsn); |
924 |
|
|
void VU1regsMI_MULAz(_VURegsNum *VUregsn); |
925 |
|
|
void VU1regsMI_MULAw(_VURegsNum *VUregsn); |
926 |
|
|
void VU1regsMI_MADD(_VURegsNum *VUregsn); |
927 |
|
|
void VU1regsMI_MADDi(_VURegsNum *VUregsn); |
928 |
|
|
void VU1regsMI_MADDq(_VURegsNum *VUregsn); |
929 |
|
|
void VU1regsMI_MADDx(_VURegsNum *VUregsn); |
930 |
|
|
void VU1regsMI_MADDy(_VURegsNum *VUregsn); |
931 |
|
|
void VU1regsMI_MADDz(_VURegsNum *VUregsn); |
932 |
|
|
void VU1regsMI_MADDw(_VURegsNum *VUregsn); |
933 |
|
|
void VU1regsMI_MADDA(_VURegsNum *VUregsn); |
934 |
|
|
void VU1regsMI_MADDAi(_VURegsNum *VUregsn); |
935 |
|
|
void VU1regsMI_MADDAq(_VURegsNum *VUregsn); |
936 |
|
|
void VU1regsMI_MADDAx(_VURegsNum *VUregsn); |
937 |
|
|
void VU1regsMI_MADDAy(_VURegsNum *VUregsn); |
938 |
|
|
void VU1regsMI_MADDAz(_VURegsNum *VUregsn); |
939 |
|
|
void VU1regsMI_MADDAw(_VURegsNum *VUregsn); |
940 |
|
|
void VU1regsMI_MSUB(_VURegsNum *VUregsn); |
941 |
|
|
void VU1regsMI_MSUBi(_VURegsNum *VUregsn); |
942 |
|
|
void VU1regsMI_MSUBq(_VURegsNum *VUregsn); |
943 |
|
|
void VU1regsMI_MSUBx(_VURegsNum *VUregsn); |
944 |
|
|
void VU1regsMI_MSUBy(_VURegsNum *VUregsn); |
945 |
|
|
void VU1regsMI_MSUBz(_VURegsNum *VUregsn); |
946 |
|
|
void VU1regsMI_MSUBw(_VURegsNum *VUregsn); |
947 |
|
|
void VU1regsMI_MSUBA(_VURegsNum *VUregsn); |
948 |
|
|
void VU1regsMI_MSUBAi(_VURegsNum *VUregsn); |
949 |
|
|
void VU1regsMI_MSUBAq(_VURegsNum *VUregsn); |
950 |
|
|
void VU1regsMI_MSUBAx(_VURegsNum *VUregsn); |
951 |
|
|
void VU1regsMI_MSUBAy(_VURegsNum *VUregsn); |
952 |
|
|
void VU1regsMI_MSUBAz(_VURegsNum *VUregsn); |
953 |
|
|
void VU1regsMI_MSUBAw(_VURegsNum *VUregsn); |
954 |
|
|
void VU1regsMI_MAX(_VURegsNum *VUregsn); |
955 |
|
|
void VU1regsMI_MAXi(_VURegsNum *VUregsn); |
956 |
|
|
void VU1regsMI_MAXx(_VURegsNum *VUregsn); |
957 |
|
|
void VU1regsMI_MAXy(_VURegsNum *VUregsn); |
958 |
|
|
void VU1regsMI_MAXz(_VURegsNum *VUregsn); |
959 |
|
|
void VU1regsMI_MAXw(_VURegsNum *VUregsn); |
960 |
|
|
void VU1regsMI_MINI(_VURegsNum *VUregsn); |
961 |
|
|
void VU1regsMI_MINIi(_VURegsNum *VUregsn); |
962 |
|
|
void VU1regsMI_MINIx(_VURegsNum *VUregsn); |
963 |
|
|
void VU1regsMI_MINIy(_VURegsNum *VUregsn); |
964 |
|
|
void VU1regsMI_MINIz(_VURegsNum *VUregsn); |
965 |
|
|
void VU1regsMI_MINIw(_VURegsNum *VUregsn); |
966 |
|
|
void VU1regsMI_OPMULA(_VURegsNum *VUregsn); |
967 |
|
|
void VU1regsMI_OPMSUB(_VURegsNum *VUregsn); |
968 |
|
|
void VU1regsMI_NOP(_VURegsNum *VUregsn); |
969 |
|
|
void VU1regsMI_FTOI0(_VURegsNum *VUregsn); |
970 |
|
|
void VU1regsMI_FTOI4(_VURegsNum *VUregsn); |
971 |
|
|
void VU1regsMI_FTOI12(_VURegsNum *VUregsn); |
972 |
|
|
void VU1regsMI_FTOI15(_VURegsNum *VUregsn); |
973 |
|
|
void VU1regsMI_ITOF0(_VURegsNum *VUregsn); |
974 |
|
|
void VU1regsMI_ITOF4(_VURegsNum *VUregsn); |
975 |
|
|
void VU1regsMI_ITOF12(_VURegsNum *VUregsn); |
976 |
|
|
void VU1regsMI_ITOF15(_VURegsNum *VUregsn); |
977 |
|
|
void VU1regsMI_CLIP(_VURegsNum *VUregsn); |
978 |
|
|
|
979 |
|
|
/***************************************** |
980 |
|
|
VU1 Micromode Lower instructions |
981 |
|
|
*****************************************/ |
982 |
|
|
|
983 |
|
|
void VU1regsMI_DIV(_VURegsNum *VUregsn); |
984 |
|
|
void VU1regsMI_SQRT(_VURegsNum *VUregsn); |
985 |
|
|
void VU1regsMI_RSQRT(_VURegsNum *VUregsn); |
986 |
|
|
void VU1regsMI_IADD(_VURegsNum *VUregsn); |
987 |
|
|
void VU1regsMI_IADDI(_VURegsNum *VUregsn); |
988 |
|
|
void VU1regsMI_IADDIU(_VURegsNum *VUregsn); |
989 |
|
|
void VU1regsMI_IAND(_VURegsNum *VUregsn); |
990 |
|
|
void VU1regsMI_IOR(_VURegsNum *VUregsn); |
991 |
|
|
void VU1regsMI_ISUB(_VURegsNum *VUregsn); |
992 |
|
|
void VU1regsMI_ISUBIU(_VURegsNum *VUregsn); |
993 |
|
|
void VU1regsMI_MOVE(_VURegsNum *VUregsn); |
994 |
|
|
void VU1regsMI_MFIR(_VURegsNum *VUregsn); |
995 |
|
|
void VU1regsMI_MTIR(_VURegsNum *VUregsn); |
996 |
|
|
void VU1regsMI_MR32(_VURegsNum *VUregsn); |
997 |
|
|
void VU1regsMI_LQ(_VURegsNum *VUregsn); |
998 |
|
|
void VU1regsMI_LQD(_VURegsNum *VUregsn); |
999 |
|
|
void VU1regsMI_LQI(_VURegsNum *VUregsn); |
1000 |
|
|
void VU1regsMI_SQ(_VURegsNum *VUregsn); |
1001 |
|
|
void VU1regsMI_SQD(_VURegsNum *VUregsn); |
1002 |
|
|
void VU1regsMI_SQI(_VURegsNum *VUregsn); |
1003 |
|
|
void VU1regsMI_ILW(_VURegsNum *VUregsn); |
1004 |
|
|
void VU1regsMI_ISW(_VURegsNum *VUregsn); |
1005 |
|
|
void VU1regsMI_ILWR(_VURegsNum *VUregsn); |
1006 |
|
|
void VU1regsMI_ISWR(_VURegsNum *VUregsn); |
1007 |
|
|
void VU1regsMI_LOI(_VURegsNum *VUregsn); |
1008 |
|
|
void VU1regsMI_RINIT(_VURegsNum *VUregsn); |
1009 |
|
|
void VU1regsMI_RGET(_VURegsNum *VUregsn); |
1010 |
|
|
void VU1regsMI_RNEXT(_VURegsNum *VUregsn); |
1011 |
|
|
void VU1regsMI_RXOR(_VURegsNum *VUregsn); |
1012 |
|
|
void VU1regsMI_WAITQ(_VURegsNum *VUregsn); |
1013 |
|
|
void VU1regsMI_FSAND(_VURegsNum *VUregsn); |
1014 |
|
|
void VU1regsMI_FSEQ(_VURegsNum *VUregsn); |
1015 |
|
|
void VU1regsMI_FSOR(_VURegsNum *VUregsn); |
1016 |
|
|
void VU1regsMI_FSSET(_VURegsNum *VUregsn); |
1017 |
|
|
void VU1regsMI_FMAND(_VURegsNum *VUregsn); |
1018 |
|
|
void VU1regsMI_FMEQ(_VURegsNum *VUregsn); |
1019 |
|
|
void VU1regsMI_FMOR(_VURegsNum *VUregsn); |
1020 |
|
|
void VU1regsMI_FCAND(_VURegsNum *VUregsn); |
1021 |
|
|
void VU1regsMI_FCEQ(_VURegsNum *VUregsn); |
1022 |
|
|
void VU1regsMI_FCOR(_VURegsNum *VUregsn); |
1023 |
|
|
void VU1regsMI_FCSET(_VURegsNum *VUregsn); |
1024 |
|
|
void VU1regsMI_FCGET(_VURegsNum *VUregsn); |
1025 |
|
|
void VU1regsMI_IBEQ(_VURegsNum *VUregsn); |
1026 |
|
|
void VU1regsMI_IBGEZ(_VURegsNum *VUregsn); |
1027 |
|
|
void VU1regsMI_IBGTZ(_VURegsNum *VUregsn); |
1028 |
|
|
void VU1regsMI_IBLTZ(_VURegsNum *VUregsn); |
1029 |
|
|
void VU1regsMI_IBLEZ(_VURegsNum *VUregsn); |
1030 |
|
|
void VU1regsMI_IBNE(_VURegsNum *VUregsn); |
1031 |
|
|
void VU1regsMI_B(_VURegsNum *VUregsn); |
1032 |
|
|
void VU1regsMI_BAL(_VURegsNum *VUregsn); |
1033 |
|
|
void VU1regsMI_JR(_VURegsNum *VUregsn); |
1034 |
|
|
void VU1regsMI_JALR(_VURegsNum *VUregsn); |
1035 |
|
|
void VU1regsMI_MFP(_VURegsNum *VUregsn); |
1036 |
|
|
void VU1regsMI_WAITP(_VURegsNum *VUregsn); |
1037 |
|
|
void VU1regsMI_ESADD(_VURegsNum *VUregsn); |
1038 |
|
|
void VU1regsMI_ERSADD(_VURegsNum *VUregsn); |
1039 |
|
|
void VU1regsMI_ELENG(_VURegsNum *VUregsn); |
1040 |
|
|
void VU1regsMI_ERLENG(_VURegsNum *VUregsn); |
1041 |
|
|
void VU1regsMI_EATANxy(_VURegsNum *VUregsn); |
1042 |
|
|
void VU1regsMI_EATANxz(_VURegsNum *VUregsn); |
1043 |
|
|
void VU1regsMI_ESUM(_VURegsNum *VUregsn); |
1044 |
|
|
void VU1regsMI_ERCPR(_VURegsNum *VUregsn); |
1045 |
|
|
void VU1regsMI_ESQRT(_VURegsNum *VUregsn); |
1046 |
|
|
void VU1regsMI_ERSQRT(_VURegsNum *VUregsn); |
1047 |
|
|
void VU1regsMI_ESIN(_VURegsNum *VUregsn); |
1048 |
|
|
void VU1regsMI_EATAN(_VURegsNum *VUregsn); |
1049 |
|
|
void VU1regsMI_EEXP(_VURegsNum *VUregsn); |
1050 |
|
|
void VU1regsMI_XGKICK(_VURegsNum *VUregsn); |
1051 |
|
|
void VU1regsMI_XTOP(_VURegsNum *VUregsn); |
1052 |
|
|
void VU1regsMI_XITOP(_VURegsNum *VUregsn); |
1053 |
|
|
|
1054 |
|
|
/***************************************** |
1055 |
|
|
VU Micromode Tables/Opcodes defs macros |
1056 |
|
|
*****************************************/ |
1057 |
|
|
|
1058 |
|
|
|
1059 |
|
|
#define _vuTables(VU, PREFIX) \ |
1060 |
|
|
\ |
1061 |
|
|
void (*PREFIX##_LOWER_OPCODE[128])() = { \ |
1062 |
|
|
PREFIX##MI_LQ , PREFIX##MI_SQ , PREFIX##unknown , PREFIX##unknown, \ |
1063 |
|
|
PREFIX##MI_ILW , PREFIX##MI_ISW , PREFIX##unknown , PREFIX##unknown, \ |
1064 |
|
|
PREFIX##MI_IADDIU, PREFIX##MI_ISUBIU, PREFIX##unknown , PREFIX##unknown, \ |
1065 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1066 |
|
|
PREFIX##MI_FCEQ , PREFIX##MI_FCSET , PREFIX##MI_FCAND, PREFIX##MI_FCOR, /* 0x10 */ \ |
1067 |
|
|
PREFIX##MI_FSEQ , PREFIX##MI_FSSET , PREFIX##MI_FSAND, PREFIX##MI_FSOR, \ |
1068 |
|
|
PREFIX##MI_FMEQ , PREFIX##unknown , PREFIX##MI_FMAND, PREFIX##MI_FMOR, \ |
1069 |
|
|
PREFIX##MI_FCGET , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1070 |
|
|
PREFIX##MI_B , PREFIX##MI_BAL , PREFIX##unknown , PREFIX##unknown, /* 0x20 */ \ |
1071 |
|
|
PREFIX##MI_JR , PREFIX##MI_JALR , PREFIX##unknown , PREFIX##unknown, \ |
1072 |
|
|
PREFIX##MI_IBEQ , PREFIX##MI_IBNE , PREFIX##unknown , PREFIX##unknown, \ |
1073 |
|
|
PREFIX##MI_IBLTZ , PREFIX##MI_IBGTZ , PREFIX##MI_IBLEZ, PREFIX##MI_IBGEZ, \ |
1074 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x30 */ \ |
1075 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1076 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1077 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1078 |
|
|
PREFIX##LowerOP , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x40*/ \ |
1079 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1080 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1081 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1082 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x50 */ \ |
1083 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1084 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1085 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1086 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x60 */ \ |
1087 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1088 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1089 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1090 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x70 */ \ |
1091 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1092 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1093 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1094 |
|
|
}; \ |
1095 |
|
|
\ |
1096 |
|
|
void (*PREFIX##LowerOP_T3_00_OPCODE[32])() = { \ |
1097 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1098 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1099 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1100 |
|
|
PREFIX##MI_MOVE , PREFIX##MI_LQI , PREFIX##MI_DIV , PREFIX##MI_MTIR, \ |
1101 |
|
|
PREFIX##MI_RNEXT , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1102 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1103 |
|
|
PREFIX##unknown , PREFIX##MI_MFP , PREFIX##MI_XTOP , PREFIX##MI_XGKICK, \ |
1104 |
|
|
PREFIX##MI_ESADD , PREFIX##MI_EATANxy, PREFIX##MI_ESQRT, PREFIX##MI_ESIN, \ |
1105 |
|
|
}; \ |
1106 |
|
|
\ |
1107 |
|
|
void (*PREFIX##LowerOP_T3_01_OPCODE[32])() = { \ |
1108 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1109 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1110 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1111 |
|
|
PREFIX##MI_MR32 , PREFIX##MI_SQI , PREFIX##MI_SQRT , PREFIX##MI_MFIR, \ |
1112 |
|
|
PREFIX##MI_RGET , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1113 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1114 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##MI_XITOP, PREFIX##unknown, \ |
1115 |
|
|
PREFIX##MI_ERSADD, PREFIX##MI_EATANxz, PREFIX##MI_ERSQRT, PREFIX##MI_EATAN, \ |
1116 |
|
|
}; \ |
1117 |
|
|
\ |
1118 |
|
|
void (*PREFIX##LowerOP_T3_10_OPCODE[32])() = { \ |
1119 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1120 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1121 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1122 |
|
|
PREFIX##unknown , PREFIX##MI_LQD , PREFIX##MI_RSQRT, PREFIX##MI_ILWR, \ |
1123 |
|
|
PREFIX##MI_RINIT , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1124 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1125 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1126 |
|
|
PREFIX##MI_ELENG , PREFIX##MI_ESUM , PREFIX##MI_ERCPR, PREFIX##MI_EEXP, \ |
1127 |
|
|
}; \ |
1128 |
|
|
\ |
1129 |
|
|
void (*PREFIX##LowerOP_T3_11_OPCODE[32])() = { \ |
1130 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1131 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1132 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1133 |
|
|
PREFIX##unknown , PREFIX##MI_SQD , PREFIX##MI_WAITQ, PREFIX##MI_ISWR, \ |
1134 |
|
|
PREFIX##MI_RXOR , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1135 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1136 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1137 |
|
|
PREFIX##MI_ERLENG, PREFIX##unknown , PREFIX##MI_WAITP, PREFIX##unknown, \ |
1138 |
|
|
}; \ |
1139 |
|
|
\ |
1140 |
|
|
void (*PREFIX##LowerOP_OPCODE[64])() = { \ |
1141 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1142 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1143 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1144 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1145 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1146 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1147 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1148 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1149 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x20 */ \ |
1150 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1151 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1152 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1153 |
|
|
PREFIX##MI_IADD , PREFIX##MI_ISUB , PREFIX##MI_IADDI, PREFIX##unknown, /* 0x30 */ \ |
1154 |
|
|
PREFIX##MI_IAND , PREFIX##MI_IOR , PREFIX##unknown , PREFIX##unknown, \ |
1155 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1156 |
|
|
PREFIX##LowerOP_T3_00, PREFIX##LowerOP_T3_01, PREFIX##LowerOP_T3_10, PREFIX##LowerOP_T3_11, \ |
1157 |
|
|
}; \ |
1158 |
|
|
\ |
1159 |
|
|
void (*PREFIX##_UPPER_OPCODE[64])() = { \ |
1160 |
|
|
PREFIX##MI_ADDx , PREFIX##MI_ADDy , PREFIX##MI_ADDz , PREFIX##MI_ADDw, \ |
1161 |
|
|
PREFIX##MI_SUBx , PREFIX##MI_SUBy , PREFIX##MI_SUBz , PREFIX##MI_SUBw, \ |
1162 |
|
|
PREFIX##MI_MADDx , PREFIX##MI_MADDy , PREFIX##MI_MADDz , PREFIX##MI_MADDw, \ |
1163 |
|
|
PREFIX##MI_MSUBx , PREFIX##MI_MSUBy , PREFIX##MI_MSUBz , PREFIX##MI_MSUBw, \ |
1164 |
|
|
PREFIX##MI_MAXx , PREFIX##MI_MAXy , PREFIX##MI_MAXz , PREFIX##MI_MAXw, /* 0x10 */ \ |
1165 |
|
|
PREFIX##MI_MINIx , PREFIX##MI_MINIy , PREFIX##MI_MINIz , PREFIX##MI_MINIw, \ |
1166 |
|
|
PREFIX##MI_MULx , PREFIX##MI_MULy , PREFIX##MI_MULz , PREFIX##MI_MULw, \ |
1167 |
|
|
PREFIX##MI_MULq , PREFIX##MI_MAXi , PREFIX##MI_MULi , PREFIX##MI_MINIi, \ |
1168 |
|
|
PREFIX##MI_ADDq , PREFIX##MI_MADDq , PREFIX##MI_ADDi , PREFIX##MI_MADDi, /* 0x20 */ \ |
1169 |
|
|
PREFIX##MI_SUBq , PREFIX##MI_MSUBq , PREFIX##MI_SUBi , PREFIX##MI_MSUBi, \ |
1170 |
|
|
PREFIX##MI_ADD , PREFIX##MI_MADD , PREFIX##MI_MUL , PREFIX##MI_MAX, \ |
1171 |
|
|
PREFIX##MI_SUB , PREFIX##MI_MSUB , PREFIX##MI_OPMSUB, PREFIX##MI_MINI, \ |
1172 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x30 */ \ |
1173 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1174 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1175 |
|
|
PREFIX##_UPPER_FD_00, PREFIX##_UPPER_FD_01, PREFIX##_UPPER_FD_10, PREFIX##_UPPER_FD_11, \ |
1176 |
|
|
}; \ |
1177 |
|
|
\ |
1178 |
|
|
void (*PREFIX##_UPPER_FD_00_TABLE[32])() = { \ |
1179 |
|
|
PREFIX##MI_ADDAx, PREFIX##MI_SUBAx , PREFIX##MI_MADDAx, PREFIX##MI_MSUBAx, \ |
1180 |
|
|
PREFIX##MI_ITOF0, PREFIX##MI_FTOI0, PREFIX##MI_MULAx , PREFIX##MI_MULAq , \ |
1181 |
|
|
PREFIX##MI_ADDAq, PREFIX##MI_SUBAq, PREFIX##MI_ADDA , PREFIX##MI_SUBA , \ |
1182 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1183 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1184 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1185 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1186 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1187 |
|
|
}; \ |
1188 |
|
|
\ |
1189 |
|
|
void (*PREFIX##_UPPER_FD_01_TABLE[32])() = { \ |
1190 |
|
|
PREFIX##MI_ADDAy , PREFIX##MI_SUBAy , PREFIX##MI_MADDAy, PREFIX##MI_MSUBAy, \ |
1191 |
|
|
PREFIX##MI_ITOF4 , PREFIX##MI_FTOI4 , PREFIX##MI_MULAy , PREFIX##MI_ABS , \ |
1192 |
|
|
PREFIX##MI_MADDAq, PREFIX##MI_MSUBAq, PREFIX##MI_MADDA , PREFIX##MI_MSUBA , \ |
1193 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1194 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1195 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1196 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1197 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1198 |
|
|
}; \ |
1199 |
|
|
\ |
1200 |
|
|
void (*PREFIX##_UPPER_FD_10_TABLE[32])() = { \ |
1201 |
|
|
PREFIX##MI_ADDAz , PREFIX##MI_SUBAz , PREFIX##MI_MADDAz, PREFIX##MI_MSUBAz, \ |
1202 |
|
|
PREFIX##MI_ITOF12, PREFIX##MI_FTOI12, PREFIX##MI_MULAz , PREFIX##MI_MULAi , \ |
1203 |
|
|
PREFIX##MI_ADDAi, PREFIX##MI_SUBAi , PREFIX##MI_MULA , PREFIX##MI_OPMULA, \ |
1204 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1205 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1206 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1207 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1208 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1209 |
|
|
}; \ |
1210 |
|
|
\ |
1211 |
|
|
void (*PREFIX##_UPPER_FD_11_TABLE[32])() = { \ |
1212 |
|
|
PREFIX##MI_ADDAw , PREFIX##MI_SUBAw , PREFIX##MI_MADDAw, PREFIX##MI_MSUBAw, \ |
1213 |
|
|
PREFIX##MI_ITOF15, PREFIX##MI_FTOI15, PREFIX##MI_MULAw , PREFIX##MI_CLIP , \ |
1214 |
|
|
PREFIX##MI_MADDAi, PREFIX##MI_MSUBAi, PREFIX##unknown , PREFIX##MI_NOP , \ |
1215 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1216 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1217 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1218 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1219 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1220 |
|
|
}; \ |
1221 |
|
|
\ |
1222 |
|
|
\ |
1223 |
|
|
\ |
1224 |
|
|
void PREFIX##_UPPER_FD_00() { \ |
1225 |
|
|
PREFIX##_UPPER_FD_00_TABLE[(VU.code >> 6) & 0x1f ](); \ |
1226 |
|
|
} \ |
1227 |
|
|
\ |
1228 |
|
|
void PREFIX##_UPPER_FD_01() { \ |
1229 |
|
|
PREFIX##_UPPER_FD_01_TABLE[(VU.code >> 6) & 0x1f](); \ |
1230 |
|
|
} \ |
1231 |
|
|
\ |
1232 |
|
|
void PREFIX##_UPPER_FD_10() { \ |
1233 |
|
|
PREFIX##_UPPER_FD_10_TABLE[(VU.code >> 6) & 0x1f](); \ |
1234 |
|
|
} \ |
1235 |
|
|
\ |
1236 |
|
|
void PREFIX##_UPPER_FD_11() { \ |
1237 |
|
|
PREFIX##_UPPER_FD_11_TABLE[(VU.code >> 6) & 0x1f](); \ |
1238 |
|
|
} \ |
1239 |
|
|
\ |
1240 |
|
|
void PREFIX##LowerOP() { \ |
1241 |
|
|
PREFIX##LowerOP_OPCODE[VU.code & 0x3f](); \ |
1242 |
|
|
} \ |
1243 |
|
|
\ |
1244 |
|
|
void PREFIX##LowerOP_T3_00() { \ |
1245 |
|
|
PREFIX##LowerOP_T3_00_OPCODE[(VU.code >> 6) & 0x1f](); \ |
1246 |
|
|
} \ |
1247 |
|
|
\ |
1248 |
|
|
void PREFIX##LowerOP_T3_01() { \ |
1249 |
|
|
PREFIX##LowerOP_T3_01_OPCODE[(VU.code >> 6) & 0x1f](); \ |
1250 |
|
|
} \ |
1251 |
|
|
\ |
1252 |
|
|
void PREFIX##LowerOP_T3_10() { \ |
1253 |
|
|
PREFIX##LowerOP_T3_10_OPCODE[(VU.code >> 6) & 0x1f](); \ |
1254 |
|
|
} \ |
1255 |
|
|
\ |
1256 |
|
|
void PREFIX##LowerOP_T3_11() { \ |
1257 |
|
|
PREFIX##LowerOP_T3_11_OPCODE[(VU.code >> 6) & 0x1f](); \ |
1258 |
|
|
} |
1259 |
|
|
|
1260 |
|
|
#define _vuRegsTables(VU, PREFIX) \ |
1261 |
|
|
\ |
1262 |
|
|
void (*PREFIX##_LOWER_OPCODE[128])(_VURegsNum *VUregsn) = { \ |
1263 |
|
|
PREFIX##MI_LQ , PREFIX##MI_SQ , PREFIX##unknown , PREFIX##unknown, \ |
1264 |
|
|
PREFIX##MI_ILW , PREFIX##MI_ISW , PREFIX##unknown , PREFIX##unknown, \ |
1265 |
|
|
PREFIX##MI_IADDIU, PREFIX##MI_ISUBIU, PREFIX##unknown , PREFIX##unknown, \ |
1266 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1267 |
|
|
PREFIX##MI_FCEQ , PREFIX##MI_FCSET , PREFIX##MI_FCAND, PREFIX##MI_FCOR, /* 0x10 */ \ |
1268 |
|
|
PREFIX##MI_FSEQ , PREFIX##MI_FSSET , PREFIX##MI_FSAND, PREFIX##MI_FSOR, \ |
1269 |
|
|
PREFIX##MI_FMEQ , PREFIX##unknown , PREFIX##MI_FMAND, PREFIX##MI_FMOR, \ |
1270 |
|
|
PREFIX##MI_FCGET , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1271 |
|
|
PREFIX##MI_B , PREFIX##MI_BAL , PREFIX##unknown , PREFIX##unknown, /* 0x20 */ \ |
1272 |
|
|
PREFIX##MI_JR , PREFIX##MI_JALR , PREFIX##unknown , PREFIX##unknown, \ |
1273 |
|
|
PREFIX##MI_IBEQ , PREFIX##MI_IBNE , PREFIX##unknown , PREFIX##unknown, \ |
1274 |
|
|
PREFIX##MI_IBLTZ , PREFIX##MI_IBGTZ , PREFIX##MI_IBLEZ, PREFIX##MI_IBGEZ, \ |
1275 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x30 */ \ |
1276 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1277 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1278 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1279 |
|
|
PREFIX##LowerOP , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x40*/ \ |
1280 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1281 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1282 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1283 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x50 */ \ |
1284 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1285 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1286 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1287 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x60 */ \ |
1288 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1289 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1290 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1291 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x70 */ \ |
1292 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1293 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1294 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1295 |
|
|
}; \ |
1296 |
|
|
\ |
1297 |
|
|
void (*PREFIX##LowerOP_T3_00_OPCODE[32])(_VURegsNum *VUregsn) = { \ |
1298 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1299 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1300 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1301 |
|
|
PREFIX##MI_MOVE , PREFIX##MI_LQI , PREFIX##MI_DIV , PREFIX##MI_MTIR, \ |
1302 |
|
|
PREFIX##MI_RNEXT , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1303 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1304 |
|
|
PREFIX##unknown , PREFIX##MI_MFP , PREFIX##MI_XTOP , PREFIX##MI_XGKICK, \ |
1305 |
|
|
PREFIX##MI_ESADD , PREFIX##MI_EATANxy, PREFIX##MI_ESQRT, PREFIX##MI_ESIN, \ |
1306 |
|
|
}; \ |
1307 |
|
|
\ |
1308 |
|
|
void (*PREFIX##LowerOP_T3_01_OPCODE[32])(_VURegsNum *VUregsn) = { \ |
1309 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1310 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1311 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1312 |
|
|
PREFIX##MI_MR32 , PREFIX##MI_SQI , PREFIX##MI_SQRT , PREFIX##MI_MFIR, \ |
1313 |
|
|
PREFIX##MI_RGET , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1314 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1315 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##MI_XITOP, PREFIX##unknown, \ |
1316 |
|
|
PREFIX##MI_ERSADD, PREFIX##MI_EATANxz, PREFIX##MI_ERSQRT, PREFIX##MI_EATAN, \ |
1317 |
|
|
}; \ |
1318 |
|
|
\ |
1319 |
|
|
void (*PREFIX##LowerOP_T3_10_OPCODE[32])(_VURegsNum *VUregsn) = { \ |
1320 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1321 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1322 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1323 |
|
|
PREFIX##unknown , PREFIX##MI_LQD , PREFIX##MI_RSQRT, PREFIX##MI_ILWR, \ |
1324 |
|
|
PREFIX##MI_RINIT , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1325 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1326 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1327 |
|
|
PREFIX##MI_ELENG , PREFIX##MI_ESUM , PREFIX##MI_ERCPR, PREFIX##MI_EEXP, \ |
1328 |
|
|
}; \ |
1329 |
|
|
\ |
1330 |
|
|
void (*PREFIX##LowerOP_T3_11_OPCODE[32])(_VURegsNum *VUregsn) = { \ |
1331 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1332 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1333 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1334 |
|
|
PREFIX##unknown , PREFIX##MI_SQD , PREFIX##MI_WAITQ, PREFIX##MI_ISWR, \ |
1335 |
|
|
PREFIX##MI_RXOR , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1336 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1337 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1338 |
|
|
PREFIX##MI_ERLENG, PREFIX##unknown , PREFIX##MI_WAITP, PREFIX##unknown, \ |
1339 |
|
|
}; \ |
1340 |
|
|
\ |
1341 |
|
|
void (*PREFIX##LowerOP_OPCODE[64])(_VURegsNum *VUregsn) = { \ |
1342 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1343 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1344 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1345 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1346 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x10 */ \ |
1347 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1348 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1349 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1350 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x20 */ \ |
1351 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1352 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1353 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1354 |
|
|
PREFIX##MI_IADD , PREFIX##MI_ISUB , PREFIX##MI_IADDI, PREFIX##unknown, /* 0x30 */ \ |
1355 |
|
|
PREFIX##MI_IAND , PREFIX##MI_IOR , PREFIX##unknown , PREFIX##unknown, \ |
1356 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1357 |
|
|
PREFIX##LowerOP_T3_00, PREFIX##LowerOP_T3_01, PREFIX##LowerOP_T3_10, PREFIX##LowerOP_T3_11, \ |
1358 |
|
|
}; \ |
1359 |
|
|
\ |
1360 |
|
|
void (*PREFIX##_UPPER_OPCODE[64])(_VURegsNum *VUregsn) = { \ |
1361 |
|
|
PREFIX##MI_ADDx , PREFIX##MI_ADDy , PREFIX##MI_ADDz , PREFIX##MI_ADDw, \ |
1362 |
|
|
PREFIX##MI_SUBx , PREFIX##MI_SUBy , PREFIX##MI_SUBz , PREFIX##MI_SUBw, \ |
1363 |
|
|
PREFIX##MI_MADDx , PREFIX##MI_MADDy , PREFIX##MI_MADDz , PREFIX##MI_MADDw, \ |
1364 |
|
|
PREFIX##MI_MSUBx , PREFIX##MI_MSUBy , PREFIX##MI_MSUBz , PREFIX##MI_MSUBw, \ |
1365 |
|
|
PREFIX##MI_MAXx , PREFIX##MI_MAXy , PREFIX##MI_MAXz , PREFIX##MI_MAXw, /* 0x10 */ \ |
1366 |
|
|
PREFIX##MI_MINIx , PREFIX##MI_MINIy , PREFIX##MI_MINIz , PREFIX##MI_MINIw, \ |
1367 |
|
|
PREFIX##MI_MULx , PREFIX##MI_MULy , PREFIX##MI_MULz , PREFIX##MI_MULw, \ |
1368 |
|
|
PREFIX##MI_MULq , PREFIX##MI_MAXi , PREFIX##MI_MULi , PREFIX##MI_MINIi, \ |
1369 |
|
|
PREFIX##MI_ADDq , PREFIX##MI_MADDq , PREFIX##MI_ADDi , PREFIX##MI_MADDi, /* 0x20 */ \ |
1370 |
|
|
PREFIX##MI_SUBq , PREFIX##MI_MSUBq , PREFIX##MI_SUBi , PREFIX##MI_MSUBi, \ |
1371 |
|
|
PREFIX##MI_ADD , PREFIX##MI_MADD , PREFIX##MI_MUL , PREFIX##MI_MAX, \ |
1372 |
|
|
PREFIX##MI_SUB , PREFIX##MI_MSUB , PREFIX##MI_OPMSUB, PREFIX##MI_MINI, \ |
1373 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, /* 0x30 */ \ |
1374 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1375 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown, \ |
1376 |
|
|
PREFIX##_UPPER_FD_00, PREFIX##_UPPER_FD_01, PREFIX##_UPPER_FD_10, PREFIX##_UPPER_FD_11, \ |
1377 |
|
|
}; \ |
1378 |
|
|
\ |
1379 |
|
|
void (*PREFIX##_UPPER_FD_00_TABLE[32])(_VURegsNum *VUregsn) = { \ |
1380 |
|
|
PREFIX##MI_ADDAx, PREFIX##MI_SUBAx , PREFIX##MI_MADDAx, PREFIX##MI_MSUBAx, \ |
1381 |
|
|
PREFIX##MI_ITOF0, PREFIX##MI_FTOI0, PREFIX##MI_MULAx , PREFIX##MI_MULAq , \ |
1382 |
|
|
PREFIX##MI_ADDAq, PREFIX##MI_SUBAq, PREFIX##MI_ADDA , PREFIX##MI_SUBA , \ |
1383 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1384 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1385 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1386 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1387 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1388 |
|
|
}; \ |
1389 |
|
|
\ |
1390 |
|
|
void (*PREFIX##_UPPER_FD_01_TABLE[32])(_VURegsNum *VUregsn) = { \ |
1391 |
|
|
PREFIX##MI_ADDAy , PREFIX##MI_SUBAy , PREFIX##MI_MADDAy, PREFIX##MI_MSUBAy, \ |
1392 |
|
|
PREFIX##MI_ITOF4 , PREFIX##MI_FTOI4 , PREFIX##MI_MULAy , PREFIX##MI_ABS , \ |
1393 |
|
|
PREFIX##MI_MADDAq, PREFIX##MI_MSUBAq, PREFIX##MI_MADDA , PREFIX##MI_MSUBA , \ |
1394 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1395 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1396 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1397 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1398 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1399 |
|
|
}; \ |
1400 |
|
|
\ |
1401 |
|
|
void (*PREFIX##_UPPER_FD_10_TABLE[32])(_VURegsNum *VUregsn) = { \ |
1402 |
|
|
PREFIX##MI_ADDAz , PREFIX##MI_SUBAz , PREFIX##MI_MADDAz, PREFIX##MI_MSUBAz, \ |
1403 |
|
|
PREFIX##MI_ITOF12, PREFIX##MI_FTOI12, PREFIX##MI_MULAz , PREFIX##MI_MULAi , \ |
1404 |
|
|
PREFIX##MI_ADDAi, PREFIX##MI_SUBAi , PREFIX##MI_MULA , PREFIX##MI_OPMULA, \ |
1405 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1406 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1407 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1408 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1409 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1410 |
|
|
}; \ |
1411 |
|
|
\ |
1412 |
|
|
void (*PREFIX##_UPPER_FD_11_TABLE[32])(_VURegsNum *VUregsn) = { \ |
1413 |
|
|
PREFIX##MI_ADDAw , PREFIX##MI_SUBAw , PREFIX##MI_MADDAw, PREFIX##MI_MSUBAw, \ |
1414 |
|
|
PREFIX##MI_ITOF15, PREFIX##MI_FTOI15, PREFIX##MI_MULAw , PREFIX##MI_CLIP , \ |
1415 |
|
|
PREFIX##MI_MADDAi, PREFIX##MI_MSUBAi, PREFIX##unknown , PREFIX##MI_NOP , \ |
1416 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1417 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1418 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1419 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1420 |
|
|
PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , PREFIX##unknown , \ |
1421 |
|
|
}; \ |
1422 |
|
|
\ |
1423 |
|
|
\ |
1424 |
|
|
\ |
1425 |
|
|
void PREFIX##_UPPER_FD_00(_VURegsNum *VUregsn) { \ |
1426 |
|
|
PREFIX##_UPPER_FD_00_TABLE[(VU.code >> 6) & 0x1f ](VUregsn); \ |
1427 |
|
|
} \ |
1428 |
|
|
\ |
1429 |
|
|
void PREFIX##_UPPER_FD_01(_VURegsNum *VUregsn) { \ |
1430 |
|
|
PREFIX##_UPPER_FD_01_TABLE[(VU.code >> 6) & 0x1f](VUregsn); \ |
1431 |
|
|
} \ |
1432 |
|
|
\ |
1433 |
|
|
void PREFIX##_UPPER_FD_10(_VURegsNum *VUregsn) { \ |
1434 |
|
|
PREFIX##_UPPER_FD_10_TABLE[(VU.code >> 6) & 0x1f](VUregsn); \ |
1435 |
|
|
} \ |
1436 |
|
|
\ |
1437 |
|
|
void PREFIX##_UPPER_FD_11(_VURegsNum *VUregsn) { \ |
1438 |
|
|
PREFIX##_UPPER_FD_11_TABLE[(VU.code >> 6) & 0x1f](VUregsn); \ |
1439 |
|
|
} \ |
1440 |
|
|
\ |
1441 |
|
|
void PREFIX##LowerOP(_VURegsNum *VUregsn) { \ |
1442 |
|
|
PREFIX##LowerOP_OPCODE[VU.code & 0x3f](VUregsn); \ |
1443 |
|
|
} \ |
1444 |
|
|
\ |
1445 |
|
|
void PREFIX##LowerOP_T3_00(_VURegsNum *VUregsn) { \ |
1446 |
|
|
PREFIX##LowerOP_T3_00_OPCODE[(VU.code >> 6) & 0x1f](VUregsn); \ |
1447 |
|
|
} \ |
1448 |
|
|
\ |
1449 |
|
|
void PREFIX##LowerOP_T3_01(_VURegsNum *VUregsn) { \ |
1450 |
|
|
PREFIX##LowerOP_T3_01_OPCODE[(VU.code >> 6) & 0x1f](VUregsn); \ |
1451 |
|
|
} \ |
1452 |
|
|
\ |
1453 |
|
|
void PREFIX##LowerOP_T3_10(_VURegsNum *VUregsn) { \ |
1454 |
|
|
PREFIX##LowerOP_T3_10_OPCODE[(VU.code >> 6) & 0x1f](VUregsn); \ |
1455 |
|
|
} \ |
1456 |
|
|
\ |
1457 |
|
|
void PREFIX##LowerOP_T3_11(_VURegsNum *VUregsn) { \ |
1458 |
|
|
PREFIX##LowerOP_T3_11_OPCODE[(VU.code >> 6) & 0x1f](VUregsn); \ |
1459 |
|
|
} |
1460 |
|
|
|
1461 |
|
|
|
1462 |
|
|
#ifdef VUM_LOG |
1463 |
|
|
|
1464 |
|
|
#define IdebugUPPER(VU) \ |
1465 |
|
|
VUM_LOG("%s", dis##VU##MicroUF(VU.code, VU.VI[REG_TPC].UL)); |
1466 |
|
|
#define IdebugLOWER(VU) \ |
1467 |
|
|
VUM_LOG("%s", dis##VU##MicroLF(VU.code, VU.VI[REG_TPC].UL)); |
1468 |
|
|
#define _vuExecMicroDebug(VU) \ |
1469 |
|
|
VUM_LOG("_vuExecMicro: %8.8x", VU.VI[REG_TPC].UL); |
1470 |
|
|
|
1471 |
|
|
#else |
1472 |
|
|
|
1473 |
|
|
#define IdebugUPPER(VU) |
1474 |
|
|
#define IdebugLOWER(VU) |
1475 |
|
|
#define _vuExecMicroDebug(VU) |
1476 |
|
|
|
1477 |
|
|
#endif |