CMGDK r49-rc2
|
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