/[pcsx2_0.9.7]/trunk/pcsx2/VU.h
ViewVC logotype

Diff of /trunk/pcsx2/VU.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 31 by william, Tue Sep 7 03:24:11 2010 UTC revision 62 by william, Tue Sep 7 11:08:22 2010 UTC
# Line 54  union VECTOR { Line 54  union VECTOR {
54    
55          float F[4];          float F[4];
56    
57            u128 UQ;
58            s128 SQ;
59          u64 UD[2];      //128 bits          u64 UD[2];      //128 bits
60          s64 SD[2];          s64 SD[2];
61          u32 UL[4];          u32 UL[4];
# Line 114  struct ialuPipe { Line 116  struct ialuPipe {
116          u32 Cycle;          u32 Cycle;
117  };  };
118    
119  struct VURegs {  struct __aligned16 VURegs {
120          VECTOR  VF[32]; // VF and VI need to be first in this struct for proper mapping          VECTOR  VF[32]; // VF and VI need to be first in this struct for proper mapping
121          REG_VI  VI[32]; // needs to be 128bit x 32 (cottonvibes)          REG_VI  VI[32]; // needs to be 128bit x 32 (cottonvibes)
122    
123          VECTOR ACC;          VECTOR ACC;
124          REG_VI q;          REG_VI q;
125          REG_VI p;          REG_VI p;
126    
127          u32 macflag;          uint idx;               // VU index (0 or 1)
         u32 statusflag;  
         u32 clipflag;  
128    
129            // flags/cycle are needed by VIF dma code, so they have to be here (for now)
130            // We may replace these by accessors in the future, if merited.
131          u32 cycle;          u32 cycle;
132          u32 flags;          u32 flags;
133    
134          void (*vuExec)(VURegs*);          // Current opcode being interpreted or recompiled (this var is used by Interps and superVU
135          VIFregisters *vifRegs;          // but not microVU.  Would like to have it local to their respective classes... someday)
136            u32 code;
137    
138            // branch/branchpc are used by interpreter only, but making them local to the interpreter
139            // classes requires considerable code refactoring.  Maybe later. >_<
140            u32 branch;
141            u32 branchpc;
142    
143            // MAC/Status flags -- these are used by interpreters and superVU, but are kind of hacky
144            // and shouldn't be relied on for any useful/valid info.  Would like to move them out of
145            // this struct eventually.
146            u32 macflag;
147            u32 statusflag;
148            u32 clipflag;
149    
150          u8 *Mem;          u8 *Mem;
151          u8 *Micro;          u8 *Micro;
152    
153          u32 code;          u32 ebit;
         u32 maxmem;  
         u32 maxmicro;  
   
         u16 branch;  
         u16 ebit;  
         u32 branchpc;  
154    
155          fmacPipe fmac[8];          fmacPipe fmac[8];
156          fdivPipe fdiv;          fdivPipe fdiv;
157          efuPipe efu;          efuPipe efu;
158          ialuPipe ialu[8];          ialuPipe ialu[8];
159    
160          VURegs() :          VURegs()
161                  Mem( NULL )          {
162          ,       Micro( NULL )                  Mem = NULL;
163                    Micro = NULL;
164            }
165    
166            bool IsVU1() const;
167            bool IsVU0() const;
168    
169            VIFregisters& GetVifRegs() const
170          {          {
171                    return IsVU1() ? vif1Regs : vif0Regs;
172          }          }
173  };  };
174    
175  enum VUPipeState  enum VUPipeState
176  {  {
177      VUPIPE_NONE = 0,      VUPIPE_NONE = 0,
# Line 164  enum VUPipeState Line 183  enum VUPipeState
183      VUPIPE_XGKICK      VUPIPE_XGKICK
184  };  };
185    
186  struct _VURegsNum {  extern __aligned16 VURegs vuRegs[2];
         u8 pipe; // if 0xff, COP2  
         u8 VFwrite;  
         u8 VFwxyzw;  
         u8 VFr0xyzw;  
         u8 VFr1xyzw;  
         u8 VFread0;  
         u8 VFread1;  
         u32 VIwrite;  
         u32 VIread;  
         int cycles;  
 };  
   
 extern VURegs* g_pVU1;  
 extern __aligned16 VURegs VU0;  
187    
188  #define VU1 (*g_pVU1)  // Obsolete(?)  -- I think I'd rather use vu0Regs/vu1Regs or actually have these explicit to any
189    // CPP file that needs them only. --air
190    static VURegs& VU0 = vuRegs[0];
191    static VURegs& VU1 = vuRegs[1];
192    
193    // Do not use __fi here because it fires 'multiple definition' error in GCC
194    inline bool VURegs::IsVU1() const  { return this == &vuRegs[1]; }
195    inline bool VURegs::IsVU0() const  { return this == &vuRegs[0]; }
196    
197  extern u32* GET_VU_MEM(VURegs* VU, u32 addr);  extern u32* GET_VU_MEM(VURegs* VU, u32 addr);
198    

Legend:
Removed from v.31  
changed lines
  Added in v.62

  ViewVC Help
Powered by ViewVC 1.1.22