/[pcsx2_0.9.7]/trunk/common/include/Utilities/lnx_memzero.h
ViewVC logotype

Diff of /trunk/common/include/Utilities/lnx_memzero.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 20  Line 20 
20  // memset16, etc.  // memset16, etc.
21    
22  template< u32 data, typename T >  template< u32 data, typename T >
23  static __forceinline void memset32( T& obj )  static __fi void memset32( T& obj )
24  {  {
25          // this function works on 32-bit aligned lengths of data only.          // this function works on 32-bit aligned lengths of data only.
26          // If the data length is not a factor of 32 bits, the C++ optimizing compiler will          // If the data length is not a factor of 32 bits, the C++ optimizing compiler will
# Line 34  static __forceinline void memset32( T& o Line 34  static __forceinline void memset32( T& o
34  }  }
35    
36  template< uint size >  template< uint size >
37  static __forceinline void memzero_ptr( void* dest )  static __fi void memzero_ptr( void* dest )
38  {  {
39          memset( dest, 0, size );          memset( dest, 0, size );
40  }  }
41    
42  template< typename T >  template< typename T >
43  static __forceinline void memzero( T& obj )  static __fi void memzero( T& obj )
44  {  {
45          memset( &obj, 0, sizeof( T ) );          memset( &obj, 0, sizeof( T ) );
46  }  }
47    
48  template< u8 data, typename T >  template< u8 data, typename T >
49  static __forceinline void memset8( T& obj )  static __fi void memset8( T& obj )
50  {  {
51          // Aligned sizes use the optimized 32 bit inline memset.  Unaligned sizes use memset.          // Aligned sizes use the optimized 32 bit inline memset.  Unaligned sizes use memset.
52          if( (sizeof(T) & 0x3) != 0 )          if( (sizeof(T) & 0x3) != 0 )
# Line 56  static __forceinline void memset8( T& ob Line 56  static __forceinline void memset8( T& ob
56  }  }
57    
58  template< u16 data, typename T >  template< u16 data, typename T >
59  static __forceinline void memset16( T& obj )  static __fi void memset16( T& obj )
60  {  {
61          if( (sizeof(T) & 0x3) != 0 )          if( (sizeof(T) & 0x3) != 0 )
62                  _memset16_unaligned( &obj, data, sizeof( T ) );                  _memset16_unaligned( &obj, data, sizeof( T ) );
# Line 67  static __forceinline void memset16( T& o Line 67  static __forceinline void memset16( T& o
67    
68  // An optimized memset for 8 bit destination data.  // An optimized memset for 8 bit destination data.
69  template< u8 data, size_t bytes >  template< u8 data, size_t bytes >
70  static __forceinline void memset_8( void *dest )  static __fi void memset_8( void *dest )
71  {  {
72          if( bytes == 0 ) return;          if( bytes == 0 ) return;
73    
# Line 112  static __forceinline void memset_8( void Line 112  static __forceinline void memset_8( void
112                                  "stosd\n"                                  "stosd\n"
113                                  "stosd\n"                                  "stosd\n"
114                                  ".att_syntax\n"                                  ".att_syntax\n"
115                                  :                                  : "=D"(dest)
116                                  // Input specifiers: D - edi, a -- eax, c ecx                                  // Input specifiers: D - edi, a -- eax, c ecx
117                                  : [dest]"D"(dest), [data32]"a"(data32)                                  : [dest]"D"(dest), [data32]"a"(data32)
118                                  : "memory"                                  : "memory"
# Line 131  static __forceinline void memset_8( void Line 131  static __forceinline void memset_8( void
131                                  "stosd\n"                                  "stosd\n"
132                                  "stosd\n"                                  "stosd\n"
133                                  ".att_syntax\n"                                  ".att_syntax\n"
134                                  :                                  :  "=D"(dest)
135                                  :  [dest]"D"(dest), [data32]"a"(data32)                                  :  [dest]"D"(dest), [data32]"a"(data32)
136                                  :  "memory"                                  :  "memory"
137    
# Line 151  static __forceinline void memset_8( void Line 151  static __forceinline void memset_8( void
151                                  "stosd\n"                                  "stosd\n"
152                                  "stosd\n"                                  "stosd\n"
153                                  ".att_syntax\n"                                  ".att_syntax\n"
154                                  :                                  : "=D"(dest)
155                                  : [dest]"D"(dest), [data32]"a"(data32)                                  : [dest]"D"(dest), [data32]"a"(data32)
156                                  : "memory"                                  : "memory"
157    
# Line 168  static __forceinline void memset_8( void Line 168  static __forceinline void memset_8( void
168  //                              "mov eax, %\[data32]n"  //                              "mov eax, %\[data32]n"
169                                  "rep stosd\n"                                  "rep stosd\n"
170                                  ".att_syntax\n"                                  ".att_syntax\n"
171                                  :                                  : "=D"(dest)
172                                  : [remdat]"c"(remdat), [dest]"D"(dest), [data32]"a"(data32)                                  : [remdat]"c"(remdat), [dest]"D"(dest), [data32]"a"(data32)
173                                  : "memory"                                  : "memory"
174                          );                          );

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

  ViewVC Help
Powered by ViewVC 1.1.22