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 X X X 6 4 - b i t a t o m i c o p e r a t i o n s c a n b e i m p l e m e n t e d u s i n g 00026 00027 c m p x c h g 8 b , i f n e c e s s a r y . T h o u g h I ' v e h e a r d t h a t n o t a l l 6 4 - b i t 00028 00029 a r c h i t e c t u r e s s u p p o r t d o u b l e - w o r d ( 1 2 8 - b i t ) c a s . 00030 00031 * / 00032 00033 # i f d e f _ _ x 8 6 _ 6 4 _ _ 00034 00035 # i f d e f M Y _ A T O M I C _ N O _ X A D D 00036 00037 # d e f i n e M Y _ A T O M I C _ M O D E " g c c - a m d 6 4 " L O C K _ p r e f i x " - n o - x a d d " 00038 00039 # e l s e 00040 00041 # d e f i n e M Y _ A T O M I C _ M O D E " g c c - a m d 6 4 " L O C K _ p r e f i x 00042 00043 # e n d i f 00044 00045 # e l s e 00046 00047 # i f d e f M Y _ A T O M I C _ N O _ X A D D 00048 00049 # d e f i n e M Y _ A T O M I C _ M O D E " g c c - x 8 6 " L O C K _ p r e f i x " - n o - x a d d " 00050 00051 # e l s e 00052 00053 # d e f i n e M Y _ A T O M I C _ M O D E " g c c - x 8 6 " L O C K _ p r e f i x 00054 00055 # e n d i f 00056 00057 # e n d i f 00058 00059 / * f i x - a n s i e r r o r s w h i l e m a i n t a i n i n g r e a d a b i l i t y * / 00060 00061 # i f n d e f a s m 00062 00063 # d e f i n e a s m _ _ a s m _ _ 00064 00065 # e n d i f 00066 00067 # i f n d e f M Y _ A T O M I C _ N O _ X A D D 00068 00069 # d e f i n e m a k e _ a t o m i c _ a d d _ b o d y ( S ) \ 00070 00071 a s m v o l a t i l e ( L O C K _ p r e f i x " ; x a d d % 0 , % 1 ; " : " + r " ( v ) , " + m " ( * a ) ) 00072 00073 # e n d i f 00074 00075 # d e f i n e m a k e _ a t o m i c _ f a s _ b o d y ( S ) \ 00076 00077 a s m v o l a t i l e ( " x c h g % 0 , % 1 ; " : " + r " ( v ) , " + m " ( * a ) ) 00078 00079 # d e f i n e m a k e _ a t o m i c _ c a s _ b o d y ( S ) \ 00080 00081 a s m v o l a t i l e ( L O C K _ p r e f i x " ; c m p x c h g % 3 , % 0 ; s e t z % 2 ; " \ 00082 00083 : " + m " ( * a ) , " + a " ( * c m p ) , " = q " ( r e t ) : " r " ( s e t ) ) 00084 00085 # i f d e f M Y _ A T O M I C _ M O D E _ D U M M Y 00086 00087 # 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 ) r e t = * a 00088 00089 # 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 ) * a = v 00090 00091 # e l s e 00092 00093 / * 00094 00095 A c t u a l l y 3 2 - b i t r e a d s / w r i t e s a r e a l w a y s a t o m i c o n x 8 6 00096 00097 B u t w e a d d L O C K _ p r e f i x h e r e a n y w a y t o f o r c e m e m o r y b a r r i e r s 00098 00099 * / 00100 00101 # 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 ) \ 00102 00103 r e t = 0 ; \ 00104 00105 a s m v o l a t i l e ( L O C K _ p r e f i x " ; c m p x c h g % 2 , % 0 " \ 00106 00107 : " + m " ( * a ) , " + a " ( r e t ) : " r " ( r e t ) ) 00108 00109 # 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 ) \ 00110 00111 a s m v o l a t i l e ( " ; x c h g % 0 , % 1 ; " : " + m " ( * a ) , " + r " ( v ) ) 00112 00113 # e n d i f 00114 00115 / * T O D O t e s t o n i n t e l w h e t h e r t h e b e l o w h e l p s . o n A M D i t m a k e s n o d i f f e r e n c e * / 00116 00117 / / # d e f i n e L F _ B A C K O F F ( { a s m v o l a t i l e ( " r e p ; n o p " ) ; 1 ; } ) 00118 00119