CMGDK r49-rc2
K:/CMGDKv18/SDK/Source/SQL/MySQL/include/atomic/generic-msvc.h
浏览该文件的文档。
00001 / *   C o p y r i g h t   ( C )   2 0 0 6 - 2 0 0 8   M y S Q L   A B ,   2 0 0 8 - 2 0 0 9   S u n   M i c r o s y s t e m s ,   I n c . 
00002  
00003        T h i s   p r o g r a m   i s   f r e e   s o f t w a r e ;   y o u   c a n   r e d i s t r i b u t e   i t   a n d / o r   m o d i f y 
00004  
00005        i t   u n d e r   t h e   t e r m s   o f   t h e   G N U   G e n e r a l   P u b l i c   L i c e n s e   a s   p u b l i s h e d   b y 
00006  
00007        t h e   F r e e   S o f t w a r e   F o u n d a t i o n ;   v e r s i o n   2   o f   t h e   L i c e n s e . 
00008  
00009        T h i s   p r o g r a m   i s   d i s t r i b u t e d   i n   t h e   h o p e   t h a t   i t   w i l l   b e   u s e f u l , 
00010  
00011        b u t   W I T H O U T   A N Y   W A R R A N T Y ;   w i t h o u t   e v e n   t h e   i m p l i e d   w a r r a n t y   o f 
00012  
00013        M E R C H A N T A B I L I T Y   o r   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E .     S e e   t h e 
00014  
00015        G N U   G e n e r a l   P u b l i c   L i c e n s e   f o r   m o r e   d e t a i l s . 
00016  
00017        Y o u   s h o u l d   h a v e   r e c e i v e d   a   c o p y   o f   t h e   G N U   G e n e r a l   P u b l i c   L i c e n s e 
00018  
00019        a l o n g   w i t h   t h i s   p r o g r a m ;   i f   n o t ,   w r i t e   t o   t h e   F r e e   S o f t w a r e 
00020  
00021        F o u n d a t i o n ,   I n c . ,   5 9   T e m p l e   P l a c e ,   S u i t e   3 3 0 ,   B o s t o n ,   M A     0 2 1 1 1 - 1 3 0 7     U S A   * / 
00022  
00023  # i f n d e f   _ a t o m i c _ h _ c l e a n u p _ 
00024  
00025  # d e f i n e   _ a t o m i c _ h _ c l e a n u p _   " a t o m i c / g e n e r i c - m s v c . h " 
00026  
00027  / * 
00028  
00029      W e   d o n ' t   i m p l e m e n t   a n y t h i n g   s p e c i f i c   f o r   M Y _ A T O M I C _ M O D E _ D U M M Y ,   a l w a y s   u s e 
00030  
00031      i n t r i n s i c s . 
00032  
00033      8   a n d   1 6 - b i t   a t o m i c s   a r e   n o t   i m p l e m e n t e d ,   b u t   i t   c a n   b e   d o n e   i f   n e c e s s a r y . 
00034  
00035  * / 
00036  
00037  / * 
00038  
00039      x 8 6   c o m p i l e r s   ( b o t h   V S 2 0 0 3   o r   V S 2 0 0 5 )   n e v e r   u s e   i n s t r i n s i c s ,   b u t   g e n e r a t e   
00040  
00041      f u n c t i o n   c a l l s   t o   k e r n e l 3 2   i n s t e a d ,   e v e n   i n   t h e   o p t i m i z e d   b u i l d .   
00042  
00043      W e   f o r c e   i n t r i n s i c s   a s   d e s c r i b e d   i n   M S D N   d o c u m e n t a t i o n   f o r   
00044  
00045      _ I n t e r l o c k e d C o m p a r e E x c h a n g e . 
00046  
00047  * / 
00048  
00049  # i f d e f   _ M _ I X 8 6 
00050  
00051  # i f   ( _ M S C _ V E R   > =   1 5 0 0 ) 
00052  
00053  # i n c l u d e   < i n t r i n . h > 
00054  
00055  # e l s e 
00056  
00057  C _ M O D E _ S T A R T 
00058  
00059  / * V i s u a l   S t u d i o   2 0 0 3   a n d   e a r l i e r   d o   n o t   h a v e   p r o t o t y p e s   f o r   a t o m i c   i n t r i n s i c s * / 
00060  
00061  L O N G   _ I n t e r l o c k e d E x c h a n g e   ( L O N G   v o l a t i l e   * T a r g e t , L O N G   V a l u e ) ; 
00062  
00063  L O N G   _ I n t e r l o c k e d C o m p a r e E x c h a n g e   ( L O N G   v o l a t i l e   * T a r g e t ,   L O N G   V a l u e ,   L O N G   C o m p ) ; 
00064  
00065  L O N G   _ I n t e r l o c k e d E x c h a n g e A d d   ( L O N G   v o l a t i l e   * A d d e n d ,   L O N G   V a l u e ) ; 
00066  
00067  C _ M O D E _ E N D 
00068  
00069  # p r a g m a   i n t r i n s i c ( _ I n t e r l o c k e d E x c h a n g e A d d ) 
00070  
00071  # p r a g m a   i n t r i n s i c ( _ I n t e r l o c k e d C o m p a r e E x c h a n g e ) 
00072  
00073  # p r a g m a   i n t r i n s i c ( _ I n t e r l o c k e d E x c h a n g e ) 
00074  
00075  # e n d i f 
00076  
00077  # d e f i n e   I n t e r l o c k e d E x c h a n g e                 _ I n t e r l o c k e d E x c h a n g e 
00078  
00079  # d e f i n e   I n t e r l o c k e d E x c h a n g e A d d           _ I n t e r l o c k e d E x c h a n g e A d d 
00080  
00081  # d e f i n e   I n t e r l o c k e d C o m p a r e E x c h a n g e   _ I n t e r l o c k e d C o m p a r e E x c h a n g e 
00082  
00083  / * 
00084  
00085    N o   n e e d   t o   d o   s o m e t h i n g   s p e c i a l   f o r   I n t e r l o c k e d C o m p a r e E x c h a n g e P o i n t e r 
00086  
00087    a s   i t   i s   a   # d e f i n e   t o   I n t e r l o c k e d C o m p a r e E x c h a n g e .   T h e   s a m e   a p p l i e s   t o 
00088  
00089    I n t e r l o c k e d E x c h a n g e P o i n t e r .   
00090  
00091  * / 
00092  
00093  # e n d i f   / * _ M _ I X 8 6 * / 
00094  
00095  # d e f i n e   M Y _ A T O M I C _ M O D E   " m s v c - i n t r i n s i c s " 
00096  
00097  # d e f i n e   I L _ E X C H G _ A D D 3 2 ( X , Y )           I n t e r l o c k e d E x c h a n g e A d d ( ( v o l a t i l e   L O N G   * ) ( X ) , ( Y ) ) 
00098  
00099  # d e f i n e   I L _ C O M P _ E X C H G 3 2 ( X , Y , Z )     I n t e r l o c k e d C o m p a r e E x c h a n g e ( ( v o l a t i l e   L O N G   * ) ( X ) , ( Y ) , ( Z ) ) 
00100  
00101  # d e f i n e   I L _ C O M P _ E X C H G p t r                 I n t e r l o c k e d C o m p a r e E x c h a n g e P o i n t e r 
00102  
00103  # d e f i n e   I L _ E X C H G 3 2 ( X , Y )                   I n t e r l o c k e d E x c h a n g e ( ( v o l a t i l e   L O N G   * ) ( X ) , ( Y ) ) 
00104  
00105  # d e f i n e   I L _ E X C H G p t r                           I n t e r l o c k e d E x c h a n g e P o i n t e r 
00106  
00107  # d e f i n e   m a k e _ a t o m i c _ a d d _ b o d y ( S )   \ 
00108  
00109      v =   I L _ E X C H G _ A D D   # #   S   ( a ,   v ) 
00110  
00111  # d e f i n e   m a k e _ a t o m i c _ c a s _ b o d y ( S )                                                                   \ 
00112  
00113      i n t   # #   S   i n i t i a l _ c m p =   * c m p ;                                                                       \ 
00114  
00115      i n t   # #   S   i n i t i a l _ a =   I L _ C O M P _ E X C H G   # #   S   ( a ,   s e t ,   i n i t i a l _ c m p ) ;   \ 
00116  
00117      i f   ( ! ( r e t =   ( i n i t i a l _ a   = =   i n i t i a l _ c m p ) ) )   * c m p =   i n i t i a l _ a ; 
00118  
00119  # d e f i n e   m a k e _ a t o m i c _ s w a p _ b o d y ( S )   \ 
00120  
00121      v =   I L _ E X C H G   # #   S   ( a ,   v ) 
00122  
00123  # d e f i n e   m a k e _ a t o m i c _ l o a d _ b o d y ( S )               \ 
00124  
00125      r e t =   0 ;   / *   a v o i d   c o m p i l e r   w a r n i n g   * /   \ 
00126  
00127      r e t =   I L _ C O M P _ E X C H G   # #   S   ( a ,   r e t ,   r e t ) ; 
00128  
00129  / * 
00130  
00131      m y _ y i e l d _ p r o c e s s o r   ( e q u i v a l e n t   o f   x 8 6   P A U S E   i n s t r u c t i o n )   s h o u l d   b e   u s e d 
00132  
00133      t o   i m p r o v e   p e r f o r m a n c e   o n   h y p e r t h r e a d e d   C P U s .   I n t e l   r e c o m m e n d s   t o   u s e   i t   i n 
00134  
00135      s p i n   l o o p s   a l s o   o n   n o n - H T   m a c h i n e s   t o   r e d u c e   p o w e r   c o n s u m p t i o n   ( s e e   e . g   
00136  
00137      h t t p : / / s o f t w a r e c o m m u n i t y . i n t e l . c o m / a r t i c l e s / e n g / 2 0 0 4 . h t m ) 
00138  
00139      R u n n i n g   b e n c h m a r k s   f o r   s p i n l o c k s   i m p l e m e n t e d   w i t h   I n t e r l o c k e d C o m p a r e E x c h a n g e 
00140  
00141      a n d   Y i e l d P r o c e s s o r   s h o w s   t h a t   m u c h   b e t t e r   p e r f o r m a n c e   i s   a c h i e v e d   b y   c a l l i n g 
00142  
00143      Y i e l d P r o c e s s o r   i n   a   l o o p   -   t h a t   i s ,   y i e l d i n g   l o n g e r .   O n   I n t e l   b o x e s   s e t t i n g 
00144  
00145      l o o p   c o u n t   i n   t h e   r a n g e   2 0 0 - 3 0 0   b r o u g h t   b e s t   r e s u l t s . 
00146  
00147    * / 
00148  
00149  # i f n d e f   Y I E L D _ L O O P S 
00150  
00151  # d e f i n e   Y I E L D _ L O O P S   2 0 0 
00152  
00153  # e n d i f 
00154  
00155  s t a t i c   _ _ i n l i n e   i n t   m y _ y i e l d _ p r o c e s s o r ( ) 
00156  
00157  { 
00158  
00159      i n t   i ; 
00160  
00161      f o r ( i = 0 ;   i < Y I E L D _ L O O P S ;   i + + ) 
00162  
00163      { 
00164  
00165  # i f   ( _ M S C _ V E R   < =   1 3 1 0 ) 
00166  
00167          / *   O n   o l d e r   c o m p i l e r s   Y i e l d P r o c e s s o r   i s   n o t   a v a i l a b l e ,   u s e   i n l i n e   a s s e m b l y * / 
00168  
00169          _ _ a s m   {   r e p   n o p   } 
00170  
00171  # e l s e 
00172  
00173          Y i e l d P r o c e s s o r ( ) ; 
00174  
00175  # e n d i f 
00176  
00177      } 
00178  
00179      r e t u r n   1 ; 
00180  
00181  } 
00182  
00183  # d e f i n e   L F _ B A C K O F F   m y _ y i e l d _ p r o c e s s o r ( ) 
00184  
00185  # e l s e   / *   c l e a n u p   * / 
00186  
00187  # u n d e f   I L _ E X C H G _ A D D 3 2 
00188  
00189  # u n d e f   I L _ C O M P _ E X C H G 3 2 
00190  
00191  # u n d e f   I L _ C O M P _ E X C H G p t r 
00192  
00193  # u n d e f   I L _ E X C H G 3 2 
00194  
00195  # u n d e f   I L _ E X C H G p t r 
00196  
00197  # e n d i f 
00198  
00199  
 全部  名字空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义