I'm no expert but if you don't have a memory operation somewhere
I doubt you will succeed.

I see
        "The first which entering the code only the value of 
        0 in the carry flag"

are you trying to have a CAS that works only on single-cpu
systems ?

Have you identified a problem with the CAS implementation
used in Solaris ?

-r

____________________________________________________________________________________
Roch Bourbonnais                        Sun Microsystems, Icnc-Grenoble 
Senior Performance Analyst              180, Avenue De L'Europe, 38330, 
                                        Montbonnot Saint Martin, France
Performance & Availability Engineering  
http://icncweb.france/~rbourbon         http://blogs.sun.com/roller/page/roch
[EMAIL PROTECTED]               (+33).4.76.18.83.20


Rama Krishna writes:
 > Hi,
 > Below is the atomic function of  compare and swap instruction (CAS)  written 
 > in assembly 
 > code. 
 >  The following is  general description of the function for     
 >   CAS(int *p,int n,int k)
 >   which does if(*p == n)
 >                          { 
 >                             *p = k;
 >                              return 1;
 >                          }
 >                         else
 >                          {
 >                             
 >                               return 0;
 >                          }
 > This operation we have to perform atomically, the following is assembly code 
 > for that one
 > temp is the global variable which preserves atomicity.
 > My question is that is there any flaw the violates atomicity principle ? Can 
 > anyone who  
 > worked  before on this  please guide us. 
 >    retr = cas(p,i,j,&temp);
 > 
 > int cas(int *p,int i,int j,int *t){
 > 
 >   //  local parameters are accessed in this way
 >   //  8(%ebp) ----------  first parameter
 >   //  12(%ebp)----------- second parameter
 >   //  16(%ebp)----------- third parameter
 >   //  20(%ebp)------------Fourthe parameter  
 >   //  Fourth parameter is only used for performing the assembly level 
 > instructions atomically
 >      
 > 
 >    asm("       movl 20(%ebp),%edx");   //moving fourth parameter into the 
 > edx Remember    
 >                                        // the  fourth parameter consists of 
 > address                   
 > 
 >    // performing bit test and set atomically using lock
 >    // intially the (edx) contains zero value at bit 0 A process when 
 > executes the moves this  
 >    // bit 0 to carry flag and set the corresponding bit in (edx) to 1  
 >    // The first which entering the code only the value of 0 in the carry 
 > flag the remaining process
 >    // will see a value of 1 in the carry flag.so jc implies already some 
 > other process is there in the
 >    // code
 >   
 >    asm("lock   bts $0,(%edx)");       
 >    asm("       jc  label2");           
 >    //moving of first and second pararmeters into the registers
 >    asm("       movl 8(%ebp),%ebx");     
 >    asm("       movl 12(%ebp),%ecx");   //after performing CAS operation
 >    // Comparing if (*p) == i
 >    asm("       cmp  %ecx,(%ebx)");
 >    asm("       je label1");
 >    asm("       movl $0,%eax");
 >    asm("       movl $0,(%edx)");
 >    asm("       leave"); 
 >    asm("       ret ");
 >   // set (*p) = j and  set the temp variable to 0 so that another 
 >   // may perform the operation
 >    asm("label1:   ");
 >    asm("       movl 16(%ebp),%ecx");
 >    asm("       movl %ecx ,(%ebx)");
 >    asm("       movl $0,(%edx)");
 >   // we are setting the return value in the register %eax
 >    asm("       movl $1,%eax");
 >    asm("       leave");
 >    asm("       ret");
 >    asm("label2:   ");
 >    asm("       movl $0,%eax");
 >    asm("       leave");
 >    asm("       ret");
 > 
 > }//end of cas
 >             
 > 
 > Rama
 > This message posted from opensolaris.org
 > _______________________________________________
 > perf-discuss mailing list
 > perf-discuss@opensolaris.org

_______________________________________________
perf-discuss mailing list
perf-discuss@opensolaris.org

Reply via email to