CMGDK r49-rc2
|
00001 / * C o p y r i g h t ( C ) 2 0 0 6 M y S Q L A B 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 / * 00024 00025 T h i s h e a d e r d e f i n e s f i v e a t o m i c o p e r a t i o n s : 00026 00027 m y _ a t o m i c _ a d d # ( & v a r , w h a t ) 00028 00029 a d d ' w h a t ' t o * v a r , a n d r e t u r n t h e o l d v a l u e o f * v a r 00030 00031 m y _ a t o m i c _ f a s # ( & v a r , w h a t ) 00032 00033 ' F e t c h A n d S t o r e ' 00034 00035 s t o r e ' w h a t ' i n * v a r , a n d r e t u r n t h e o l d v a l u e o f * v a r 00036 00037 m y _ a t o m i c _ c a s # ( & v a r , & o l d , n e w ) 00038 00039 ' C o m p a r e A n d S w a p ' 00040 00041 i f * v a r i s e q u a l t o * o l d , t h e n s t o r e ' n e w ' i n * v a r , a n d r e t u r n T R U E 00042 00043 o t h e r w i s e s t o r e * v a r i n * o l d , a n d r e t u r n F A L S E 00044 00045 m y _ a t o m i c _ l o a d # ( & v a r ) 00046 00047 r e t u r n * v a r 00048 00049 m y _ a t o m i c _ s t o r e # ( & v a r , w h a t ) 00050 00051 s t o r e ' w h a t ' i n * v a r 00052 00053 ' # ' i s s u b s t i t u t e d b y a s i z e s u f f i x - 8 , 1 6 , 3 2 , o r p t r 00054 00055 ( e . g . m y _ a t o m i c _ a d d 8 , m y _ a t o m i c _ f a s 3 2 , m y _ a t o m i c _ c a s p t r ) . 00056 00057 N O T E T h i s o p e r a t i o n s a r e n o t a l w a y s a t o m i c , s o t h e y a l w a y s m u s t b e 00058 00059 e n c l o s e d i n m y _ a t o m i c _ r w l o c k _ r d l o c k ( l o c k ) / m y _ a t o m i c _ r w l o c k _ r d u n l o c k ( l o c k ) 00060 00061 o r m y _ a t o m i c _ r w l o c k _ w r l o c k ( l o c k ) / m y _ a t o m i c _ r w l o c k _ w r u n l o c k ( l o c k ) . 00062 00063 H i n t : i f a c o d e b l o c k m a k e s i n t e n s i v e u s e o f a t o m i c o p s , i t m a k e s e n s e 00064 00065 t o t a k e / r e l e a s e r w l o c k o n c e f o r t h e w h o l e b l o c k , n o t f o r e v e r y s t a t e m e n t . 00066 00067 O n a r c h i t e c t u r e s w h e r e t h e s e o p e r a t i o n s a r e r e a l l y a t o m i c , r w l o c k s w i l l 00068 00069 b e o p t i m i z e d a w a y . 00070 00071 8 - a n d 1 6 - b i t a t o m i c s a r e n ' t i m p l e m e n t e d f o r w i n d o w s ( s e e g e n e r i c - m s v c . h ) , 00072 00073 b u t c a n b e a d d e d , i f n e c e s s a r y . 00074 00075 * / 00076 00077 # i f n d e f m y _ a t o m i c _ r w l o c k _ i n i t 00078 00079 # d e f i n e i n t p t r v o i d * 00080 00081 # i f n d e f M Y _ A T O M I C _ M O D E _ R W L O C K S 00082 00083 # i n c l u d e " a t o m i c / n o l o c k . h " 00084 00085 # e n d i f 00086 00087 # i f n d e f m a k e _ a t o m i c _ c a s _ b o d y 00088 00089 / * n o l o c k . h w a s n o t a b l e t o g e n e r a t e e v e n a C A S f u n c t i o n , f a l l b a c k * / 00090 00091 # i n c l u d e " a t o m i c / r w l o c k . h " 00092 00093 # e l s e 00094 00095 / * d e f i n e m i s s i n g f u n c t i o n s b y u s i n g t h e a l r e a d y g e n e r a t e d o n e s * / 00096 00097 # i f n d e f m a k e _ a t o m i c _ a d d _ b o d y 00098 00099 # d e f i n e m a k e _ a t o m i c _ a d d _ b o d y ( S ) \ 00100 00101 i n t # # S t m p = * a ; \ 00102 00103 w h i l e ( ! m y _ a t o m i c _ c a s # # S ( a , & t m p , t m p + v ) ) ; \ 00104 00105 v = t m p ; 00106 00107 # e n d i f 00108 00109 # i f n d e f m a k e _ a t o m i c _ f a s _ b o d y 00110 00111 # d e f i n e m a k e _ a t o m i c _ f a s _ b o d y ( S ) \ 00112 00113 i n t # # S t m p = * a ; \ 00114 00115 w h i l e ( ! m y _ a t o m i c _ c a s # # S ( a , & t m p , v ) ) ; \ 00116 00117 v = t m p ; 00118 00119 # e n d i f 00120 00121 # i f n d e f m a k e _ a t o m i c _ l o a d _ b o d y 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 ( v o i d ) ( m y _ a t o m i c _ c a s # # S ( a , & r e t , r e t ) ) ; 00128 00129 # e n d i f 00130 00131 # i f n d e f m a k e _ a t o m i c _ s t o r e _ b o d y 00132 00133 # d e f i n e m a k e _ a t o m i c _ s t o r e _ b o d y ( S ) \ 00134 00135 ( v o i d ) ( m y _ a t o m i c _ f a s # # S ( a , v ) ) ; 00136 00137 # e n d i f 00138 00139 # e n d i f 00140 00141 / * 00142 00143 t r a n s p a r e n t _ u n i o n d o e s n ' t w o r k i n g + + 00144 00145 B u g ? 00146 00147 D a r w i n ' s g c c d o e s n ' t w a n t t o p u t p o i n t e r s i n a t r a n s p a r e n t _ u n i o n 00148 00149 w h e n b u i l t w i t h - a r c h p p c 6 4 . C o m p l a i n s : 00150 00151 w a r n i n g : ' t r a n s p a r e n t _ u n i o n ' a t t r i b u t e i g n o r e d 00152 00153 * / 00154 00155 # i f d e f i n e d ( _ _ G N U C _ _ ) & & ! d e f i n e d ( _ _ c p l u s p l u s ) & & \ 00156 00157 ! ( d e f i n e d ( _ _ A P P L E _ _ ) & & d e f i n e d ( _ A R C H _ P P C 6 4 ) ) 00158 00159 / * 00160 00161 w e w a n t t o b e a b l e t o u s e m y _ a t o m i c _ x x x f u n c t i o n s w i t h 00162 00163 b o t h s i g n e d a n d u n s i g n e d i n t e g e r s . B u t g c c w i l l i s s u e a w a r n i n g 00164 00165 " p a s s i n g a r g N o f ` m y _ a t o m i c _ X X X ' a s [ u n ] s i g n e d d u e t o p r o t o t y p e " 00166 00167 i f t h e s i g n e d n e s s o f t h e a r g u m e n t d o e s n ' t m a t c h t h e p r o t o t y p e , o r 00168 00169 " p o i n t e r t a r g e t s i n p a s s i n g a r g u m e n t N o f m y _ a t o m i c _ X X X d i f f e r i n s i g n e d n e s s " 00170 00171 i f i n t * i s u s e d w h e r e u i n t * i s e x p e c t e d ( o r v i c e v e r s a ) . 00172 00173 L e t ' s s h u t t h e s e w a r n i n g s u p 00174 00175 * / 00176 00177 # d e f i n e m a k e _ t r a n s p a r e n t _ u n i o n s ( S ) \ 00178 00179 t y p e d e f u n i o n { \ 00180 00181 i n t # # S i ; \ 00182 00183 u i n t # # S u ; \ 00184 00185 } U _ # # S _ _ a t t r i b u t e _ _ ( ( t r a n s p a r e n t _ u n i o n ) ) ; \ 00186 00187 t y p e d e f u n i o n { \ 00188 00189 i n t # # S v o l a t i l e * i ; \ 00190 00191 u i n t # # S v o l a t i l e * u ; \ 00192 00193 } U v _ # # S _ _ a t t r i b u t e _ _ ( ( t r a n s p a r e n t _ u n i o n ) ) ; 00194 00195 # d e f i n e u i n t p t r i n t p t r 00196 00197 m a k e _ t r a n s p a r e n t _ u n i o n s ( 8 ) 00198 00199 m a k e _ t r a n s p a r e n t _ u n i o n s ( 1 6 ) 00200 00201 m a k e _ t r a n s p a r e n t _ u n i o n s ( 3 2 ) 00202 00203 m a k e _ t r a n s p a r e n t _ u n i o n s ( p t r ) 00204 00205 # u n d e f u i n t p t r 00206 00207 # u n d e f m a k e _ t r a n s p a r e n t _ u n i o n s 00208 00209 # d e f i n e a U _ a . i 00210 00211 # d e f i n e c m p U _ c m p . i 00212 00213 # d e f i n e v U _ v . i 00214 00215 # d e f i n e s e t U _ s e t . i 00216 00217 # e l s e 00218 00219 # d e f i n e U _ 3 2 i n t 3 2 00220 00221 # d e f i n e U _ p t r i n t p t r 00222 00223 # d e f i n e U v _ 3 2 i n t 3 2 00224 00225 # d e f i n e U v _ p t r i n t p t r 00226 00227 # d e f i n e U _ a v o l a t i l e * a 00228 00229 # d e f i n e U _ c m p * c m p 00230 00231 # d e f i n e U _ v v 00232 00233 # d e f i n e U _ s e t s e t 00234 00235 # e n d i f / * _ _ G C C _ _ t r a n s p a r e n t _ u n i o n m a g i c * / 00236 00237 # i f d e f H A V E _ I N L I N E 00238 00239 # d e f i n e m a k e _ a t o m i c _ c a s ( S ) \ 00240 00241 S T A T I C _ I N L I N E i n t m y _ a t o m i c _ c a s # # S ( U v _ # # S U _ a , \ 00242 00243 U v _ # # S U _ c m p , U _ # # S U _ s e t ) \ 00244 00245 { \ 00246 00247 i n t 8 r e t ; \ 00248 00249 m a k e _ a t o m i c _ c a s _ b o d y ( S ) ; \ 00250 00251 r e t u r n r e t ; \ 00252 00253 } 00254 00255 # d e f i n e m a k e _ a t o m i c _ a d d ( S ) \ 00256 00257 S T A T I C _ I N L I N E i n t # # S m y _ a t o m i c _ a d d # # S ( \ 00258 00259 U v _ # # S U _ a , U _ # # S U _ v ) \ 00260 00261 { \ 00262 00263 m a k e _ a t o m i c _ a d d _ b o d y ( S ) ; \ 00264 00265 r e t u r n v ; \ 00266 00267 } 00268 00269 # d e f i n e m a k e _ a t o m i c _ f a s ( S ) \ 00270 00271 S T A T I C _ I N L I N E i n t # # S m y _ a t o m i c _ f a s # # S ( \ 00272 00273 U v _ # # S U _ a , U _ # # S U _ v ) \ 00274 00275 { \ 00276 00277 m a k e _ a t o m i c _ f a s _ b o d y ( S ) ; \ 00278 00279 r e t u r n v ; \ 00280 00281 } 00282 00283 # d e f i n e m a k e _ a t o m i c _ l o a d ( S ) \ 00284 00285 S T A T I C _ I N L I N E i n t # # S m y _ a t o m i c _ l o a d # # S ( U v _ # # S U _ a ) \ 00286 00287 { \ 00288 00289 i n t # # S r e t ; \ 00290 00291 m a k e _ a t o m i c _ l o a d _ b o d y ( S ) ; \ 00292 00293 r e t u r n r e t ; \ 00294 00295 } 00296 00297 # d e f i n e m a k e _ a t o m i c _ s t o r e ( S ) \ 00298 00299 S T A T I C _ I N L I N E v o i d m y _ a t o m i c _ s t o r e # # S ( \ 00300 00301 U v _ # # S U _ a , U _ # # S U _ v ) \ 00302 00303 { \ 00304 00305 m a k e _ a t o m i c _ s t o r e _ b o d y ( S ) ; \ 00306 00307 } 00308 00309 # e l s e / * n o i n l i n e f u n c t i o n s * / 00310 00311 # d e f i n e m a k e _ a t o m i c _ a d d ( S ) \ 00312 00313 e x t e r n i n t # # S m y _ a t o m i c _ a d d # # S ( U v _ # # S U _ a , U _ # # S U _ v ) ; 00314 00315 # d e f i n e m a k e _ a t o m i c _ f a s ( S ) \ 00316 00317 e x t e r n i n t # # S m y _ a t o m i c _ f a s # # S ( U v _ # # S U _ a , U _ # # S U _ v ) ; 00318 00319 # d e f i n e m a k e _ a t o m i c _ c a s ( S ) \ 00320 00321 e x t e r n i n t m y _ a t o m i c _ c a s # # S ( U v _ # # S U _ a , U v _ # # S U _ c m p , U _ # # S U _ s e t ) ; 00322 00323 # d e f i n e m a k e _ a t o m i c _ l o a d ( S ) \ 00324 00325 e x t e r n i n t # # S m y _ a t o m i c _ l o a d # # S ( U v _ # # S U _ a ) ; 00326 00327 # d e f i n e m a k e _ a t o m i c _ s t o r e ( S ) \ 00328 00329 e x t e r n v o i d m y _ a t o m i c _ s t o r e # # S ( U v _ # # S U _ a , U _ # # S U _ v ) ; 00330 00331 # e n d i f 00332 00333 m a k e _ a t o m i c _ c a s ( 3 2 ) 00334 00335 m a k e _ a t o m i c _ c a s ( p t r ) 00336 00337 m a k e _ a t o m i c _ a d d ( 3 2 ) 00338 00339 m a k e _ a t o m i c _ l o a d ( 3 2 ) 00340 00341 m a k e _ a t o m i c _ l o a d ( p t r ) 00342 00343 m a k e _ a t o m i c _ f a s ( 3 2 ) 00344 00345 m a k e _ a t o m i c _ f a s ( p t r ) 00346 00347 m a k e _ a t o m i c _ s t o r e ( 3 2 ) 00348 00349 m a k e _ a t o m i c _ s t o r e ( p t r ) 00350 00351 # i f d e f _ a t o m i c _ h _ c l e a n u p _ 00352 00353 # i n c l u d e _ a t o m i c _ h _ c l e a n u p _ 00354 00355 # u n d e f _ a t o m i c _ h _ c l e a n u p _ 00356 00357 # e n d i f 00358 00359 # u n d e f U _ 3 2 00360 00361 # u n d e f U _ p t r 00362 00363 # u n d e f a 00364 00365 # u n d e f c m p 00366 00367 # u n d e f v 00368 00369 # u n d e f s e t 00370 00371 # u n d e f U _ a 00372 00373 # u n d e f U _ c m p 00374 00375 # u n d e f U _ v 00376 00377 # u n d e f U _ s e t 00378 00379 # u n d e f m a k e _ a t o m i c _ a d d 00380 00381 # u n d e f m a k e _ a t o m i c _ c a s 00382 00383 # u n d e f m a k e _ a t o m i c _ l o a d 00384 00385 # u n d e f m a k e _ a t o m i c _ s t o r e 00386 00387 # u n d e f m a k e _ a t o m i c _ f a s 00388 00389 # u n d e f m a k e _ a t o m i c _ a d d _ b o d y 00390 00391 # u n d e f m a k e _ a t o m i c _ c a s _ b o d y 00392 00393 # u n d e f m a k e _ a t o m i c _ l o a d _ b o d y 00394 00395 # u n d e f m a k e _ a t o m i c _ s t o r e _ b o d y 00396 00397 # u n d e f m a k e _ a t o m i c _ f a s _ b o d y 00398 00399 # u n d e f i n t p t r 00400 00401 / * 00402 00403 t h e m a c r o b e l o w d e f i n e s ( a s a n e x p r e s s i o n ) t h e c o d e t h a t 00404 00405 w i l l b e r u n i n s p i n - l o o p s . I n t e l m a n u a l s r e c u m m e n d t o h a v e P A U S E t h e r e . 00406 00407 I t i s e x p e c t e d t o b e d e f i n e d i n i n c l u d e / a t o m i c / * . h f i l e s 00408 00409 * / 00410 00411 # i f n d e f L F _ B A C K O F F 00412 00413 # d e f i n e L F _ B A C K O F F ( 1 ) 00414 00415 # e n d i f 00416 00417 # d e f i n e M Y _ A T O M I C _ O K 0 00418 00419 # d e f i n e M Y _ A T O M I C _ N O T _ 1 C P U 1 00420 00421 e x t e r n i n t m y _ a t o m i c _ i n i t i a l i z e ( ) ; 00422 00423 # e n d i f 00424 00425