/[pcsx2_0.9.7]/trunk/common/include/x86emitter/tools.h
ViewVC logotype

Diff of /trunk/common/include/x86emitter/tools.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 17  Line 17 
17    
18  #include "x86emitter.h"  #include "x86emitter.h"
19    
20  // this is all that needs to be called and will fill up the below structs  enum x86VendorType
21  extern void cpudetectInit();  {
22            x86Vendor_Intel=0,
23  // Returns the number of available logical CPUs (cores plus hyperthreaded cpus)          x86Vendor_AMD,
24  extern void CountLogicalCores( int LogicalCoresPerPhysicalCPU, int PhysicalCoresPerPhysicalCPU );          x86Vendor_Unknown,
25    };
26    
27  // --------------------------------------------------------------------------------------  // --------------------------------------------------------------------------------------
28  //  x86CPU_INFO  //  x86capabilities
29  // --------------------------------------------------------------------------------------  // --------------------------------------------------------------------------------------
30  struct x86CPU_INFO  class x86capabilities
31  {  {
32          u32 FamilyID;           // Processor Family  public:
33          u32 Model;                      // Processor Model          bool isIdentified;
34          u32 TypeID;                     // Processor Type          u32 LogicalCoresPerPhysicalCPU;
35          u32 StepID;                     // Stepping ID          u32 PhysicalCoresPerPhysicalCPU;
36    
37    public:
38            x86VendorType VendorID;
39    
40            uint FamilyID;          // Processor Family
41            uint Model;                     // Processor Model
42            uint TypeID;            // Processor Type
43            uint StepID;            // Stepping ID
44    
45          u32 Flags;                      // Feature Flags          u32 Flags;                      // Feature Flags
46          u32 Flags2;                     // More Feature Flags          u32 Flags2;                     // More Feature Flags
47          u32 EFlags;                     // Extended Feature Flags          u32 EFlags;                     // Extended Feature Flags
48          u32 EFlags2;            // Extended Feature Flags pg2          u32 EFlags2;            // Extended Feature Flags pg2
49    
         u32 PhysicalCores;  
         u32 LogicalCores;  
   
50          char VendorName[16];    // Vendor/Creator ID          char VendorName[16];    // Vendor/Creator ID
         char TypeName[20];      // cpu type  
51          char FamilyName[50];    // the original cpu name          char FamilyName[50];    // the original cpu name
52    
         // Speed - speed of cpu in mhz  
         // This is a rough "real" measure of the cpu speed, taken at application startup.  
         // Not to be considered totally accurate: Power saving CPUs and SpeedStep can skew  
         // results considerably.  
         u32 Speed;  
   
53          // ----------------------------------------------------------------------------          // ----------------------------------------------------------------------------
54          //   x86 CPU Capabilities Section (all boolean flags!)          //   x86 CPU Capabilities Section (all boolean flags!)
55          // ----------------------------------------------------------------------------          // ----------------------------------------------------------------------------
56    
57     u32 hasFloatingPointUnit:1;          u32 hasFloatingPointUnit                                                :1;
58     u32 hasVirtual8086ModeEnhancements:1;          u32 hasVirtual8086ModeEnhancements                              :1;
59     u32 hasDebuggingExtensions:1;          u32 hasDebuggingExtensions                                              :1;
60     u32 hasPageSizeExtensions:1;          u32 hasPageSizeExtensions                                               :1;
61     u32 hasTimeStampCounter:1;          u32 hasTimeStampCounter                                                 :1;
62     u32 hasModelSpecificRegisters:1;          u32 hasModelSpecificRegisters                                   :1;
63     u32 hasPhysicalAddressExtension:1;          u32 hasPhysicalAddressExtension                                 :1;
64     u32 hasCOMPXCHG8BInstruction:1;          u32 hasCOMPXCHG8BInstruction                                    :1;
65     u32 hasAdvancedProgrammableInterruptController:1;          u32 hasAdvancedProgrammableInterruptController  :1;
66     u32 hasSEPFastSystemCall:1;          u32 hasSEPFastSystemCall                                                :1;
67     u32 hasMemoryTypeRangeRegisters:1;          u32 hasMemoryTypeRangeRegisters                                 :1;
68     u32 hasPTEGlobalFlag:1;          u32 hasPTEGlobalFlag                                                    :1;
69     u32 hasMachineCheckArchitecture:1;          u32 hasMachineCheckArchitecture                                 :1;
70     u32 hasConditionalMoveAndCompareInstructions:1;          u32 hasConditionalMoveAndCompareInstructions    :1;
71     u32 hasFGPageAttributeTable:1;          u32 hasFGPageAttributeTable                                             :1;
72     u32 has36bitPageSizeExtension:1;          u32 has36bitPageSizeExtension                                   :1;
73     u32 hasProcessorSerialNumber:1;          u32 hasProcessorSerialNumber                                    :1;
74     u32 hasCFLUSHInstruction:1;          u32 hasCFLUSHInstruction                                                :1;
75     u32 hasDebugStore:1;          u32 hasDebugStore                                                               :1;
76     u32 hasACPIThermalMonitorAndClockControl:1;          u32 hasACPIThermalMonitorAndClockControl                :1;
77     u32 hasMultimediaExtensions:1;          u32 hasMultimediaExtensions                                             :1;
78     u32 hasFastStreamingSIMDExtensionsSaveRestore:1;          u32 hasFastStreamingSIMDExtensionsSaveRestore   :1;
79     u32 hasStreamingSIMDExtensions:1;          u32 hasStreamingSIMDExtensions                                  :1;
80     u32 hasStreamingSIMD2Extensions:1;          u32 hasStreamingSIMD2Extensions                                 :1;
81     u32 hasSelfSnoop:1;          u32 hasSelfSnoop                                                                :1;
82     u32 hasMultiThreading:1;                     // is TRUE for both multi-core and Hyperthreaded CPUs.  
83     u32 hasThermalMonitor:1;          // is TRUE for both multi-core and Hyperthreaded CPUs.
84     u32 hasIntel64BitArchitecture:1;          u32 hasMultiThreading                                                   :1;
85     u32 hasStreamingSIMD3Extensions:1;  
86     u32 hasSupplementalStreamingSIMD3Extensions:1;          u32 hasThermalMonitor                                                   :1;
87     u32 hasStreamingSIMD4Extensions:1;          u32 hasIntel64BitArchitecture                                   :1;
88     u32 hasStreamingSIMD4Extensions2:1;          u32 hasStreamingSIMD3Extensions                                 :1;
89            u32 hasSupplementalStreamingSIMD3Extensions             :1;
90     // AMD-specific CPU Features          u32 hasStreamingSIMD4Extensions                                 :1;
91     u32 hasMultimediaExtensionsExt:1;          u32 hasStreamingSIMD4Extensions2                                :1;
92     u32 hasAMD64BitArchitecture:1;  
93     u32 has3DNOWInstructionExtensionsExt:1;          // AMD-specific CPU Features
94     u32 has3DNOWInstructionExtensions:1;          u32 hasMultimediaExtensionsExt                                  :1;
95     u32 hasStreamingSIMD4ExtensionsA:1;          u32 hasAMD64BitArchitecture                                             :1;
96            u32 has3DNOWInstructionExtensionsExt                    :1;
97            u32 has3DNOWInstructionExtensions                               :1;
98            u32 hasStreamingSIMD4ExtensionsA                                :1;
99    
100            // Core Counts!
101            u32 PhysicalCores;
102            u32 LogicalCores;
103    
104    public:
105            x86capabilities()
106            {
107                    isIdentified = false;
108                    VendorID = x86Vendor_Unknown;
109                    LogicalCoresPerPhysicalCPU = 1;
110                    PhysicalCoresPerPhysicalCPU = 1;
111            }
112    
113            void Identify();
114            void CountCores();
115            wxString GetTypeName() const;
116    
117            u32 CalculateMHz() const;
118    
119            void SIMD_ExceptionTest();
120            void SIMD_EstablishMXCSRmask();
121    
122    protected:
123            s64 _CPUSpeedHz( u64 time ) const;
124            void CountLogicalCores();
125  };  };
126    
127  enum SSE_RoundMode  enum SSE_RoundMode
128  {  {
129            SSE_RoundMode_FIRST = 0,
130          SSEround_Nearest = 0,          SSEround_Nearest = 0,
131          SSEround_NegInf,          SSEround_NegInf,
132          SSEround_PosInf,          SSEround_PosInf,
133          SSEround_Chop,          SSEround_Chop,
134            SSE_RoundMode_COUNT
135  };  };
136    
137    ImplementEnumOperators( SSE_RoundMode );
138    
139  // --------------------------------------------------------------------------------------  // --------------------------------------------------------------------------------------
140  //  SSE_MXCSR  -  Control/Status Register (bitfield)  //  SSE_MXCSR  -  Control/Status Register (bitfield)
141  // --------------------------------------------------------------------------------------  // --------------------------------------------------------------------------------------
# Line 160  union SSE_MXCSR Line 193  union SSE_MXCSR
193                  return bitmask != right.bitmask;                  return bitmask != right.bitmask;
194          }          }
195    
196          operator x86Emitter::ModSib32() const;          operator x86Emitter::xIndirect32() const;
197  };  };
198    
199  extern SSE_MXCSR        MXCSR_Mask;  extern SSE_MXCSR        MXCSR_Mask;
200    
 //////////////////////////////////////////////////////////////////////////////////////////  
   
   
 extern __aligned16 x86CPU_INFO x86caps;  
   
 extern bool g_EEFreezeRegs;  
   
 // when using mmx/xmm regs, use these functions.  
   
 namespace MMXRegisters  
 {  
     extern void Freeze();  
     extern void Thaw();  
     extern bool Saved();  
     extern __aligned16 u64 data[8];  
 };  
201    
202  namespace XMMRegisters  extern __aligned16 x86capabilities x86caps;
 {  
     extern void Freeze();  
     extern void Thaw();  
     extern bool Saved();  
     extern __aligned16 u64 data[2*iREGCNT_XMM];  
 };  
   
 namespace Registers  
 {  
     extern void Freeze();  
     extern void Thaw();  
     extern bool Saved();  
 };  
203    

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

  ViewVC Help
Powered by ViewVC 1.1.22