Here's the file I used:

#include <stdint.h>

int foo(void) {
  int32_t oldval, delta;
  int32_t *addr = 0;
   do {
      oldval = *addr;
   } while (0 == opal_atomic_cmpset_32(addr, oldval, oldval + delta));
   return (oldval + delta);
}

Here's the assembly it produced (note that this is pgi 7.0.7 -- later versions 
work fine):

        .file   "george.c"
        .version        "01.01"
## PGC 7.0 -opt 1
## PGC 06/08/2010  05:10:04
## pgcc george.c -c -S
## /opt/pgi/7.0.7/linux86-64/7.0-7/bin/pgc
## george.c -opt 1 -terse 1 -inform warn -x 119 0xa10000 -x 122 0x40 -x 123 0x10
00
## -x 127 4 -x 127 16 -x 19 0x400000 -x 28 0x40000 -x 70 0x8000 -x 122 1 -quad
## -x 59 4 -x 59 4 -tp p7-64 -astype 0 -stdinc /opt/pgi/7.0.7/linux86-64/7.0-7/i
nclude:/usr/local/include:/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include:/usr/li
b/gcc/x86_64-redhat-linux/4.1.2/include:/usr/include
## -def unix -def __unix -def __unix__ -def linux -def __linux -def __linux__
## -def __NO_MATH_INLINES -def __x86_64__ -def __LONG_MAX__=9223372036854775807L
## -def __SIZE_TYPE__=unsigned long int -def __PTRDIFF_TYPE__=long int -def __TH
ROW=
## -def __extension__= -def __amd64__ -def __SSE__ -def __MMX__ -def __SSE2__
## -def __SSE3__ -predicate #machine(x86_64) #lint(off) #system(posix) #cpu(x86_
64)
## -cmdline +pgcc george.c -c -S -x 123 4 -x 123 0x80000000 -alwaysinline /opt/p
gi/7.0.7/linux86-64/7.0-7/lib/libintrinsics.il 4
## -asm george.s
## lineno: 3
        .text
        .align  16
        .globl  foo
foo:
..Dcfb0:
        pushq   %rbp
..Dcfi0:
        movq    %rsp, %rbp
..Dcfi1:
        subq    $16, %rsp
..EN1:
## lineno: 5
        movq    $0, -8(%rbp)
        .p2align        4,,3
.LB157:
## lineno: 6
        movq    -8(%rbp), %rdi
        movl    (%rdi), %esi
        movl    %esi, -12(%rbp)
        movl    -16(%rbp), %edx
        addl    %esi, %edx
        xorl    %eax, %eax
        call    opal_atomic_cmpset_32
        testl   %eax, %eax
        je      .LB157
        movl    -16(%rbp), %eax
        addl    -12(%rbp), %eax
## lineno: 10
        leave
        ret
        .type   foo,@function
        .size   foo,.-foo
..Dcfe0:
__fooEND:
        .section        .pgi_trace
        .align  8
        .quad   foo     ## address of routine
        .quad   __fooEND - foo  ## size of routine
        .2byte  0       ## flags for future use
        .2byte  3       ## length of following string
## name:foo:
        .byte   0x66,0x6f,0x6f,0x00
        .data
        .globl  opal_atomic_cmpset_32
        .section        .debug_frame
..Dcieb0:
        .4byte  ..Dciee0-..Dcieb0-4     ## CIE length
        .4byte  0xffffffff      ## CIE ID
        .byte   0x1     ## CIE version
        .byte   0x0     ## no augmentation
        .byte   0x1     ## ULEB128 1, code alignment factor
        .byte   0x78    ## SLEB128 -8, data alignment factor
        .byte   0x10    ## return address column
        .byte   0xc     ## DW_CFA_def_cfa (col 7)
        .byte   0x7     ## ULEB128 7
        .byte   0x8     ## ULEB128 8
        .byte   0x90    ## DW_CFA_offset (col 16)
        .byte   0x1     ## ULEB128 1
        .align  8
..Dciee0:
        .4byte  ..Dfdee0-..Dfdeb0       ## FDE length
..Dfdeb0:
        .4byte  ..Dcieb0        ## CIE pointer
        .quad   ..Dcfb0 ## initial location
        .quad   ..Dcfe0-..Dcfb0 ## address range
        .byte   0x4     ## DW_CFA_advance_loc4
        .4byte  ..Dcfi0-..Dcfb0
        .byte   0xe     ## DW_CFA_def_cfa_offset
        .byte   0x10    ## ULEB128 16
        .byte   0x86    ## DW_CFA_offset (col 6)
        .byte   0x2     ## ULEB128 2
        .byte   0x4     ## DW_CFA_advance_loc4
        .4byte  ..Dcfi1-..Dcfi0
        .byte   0xd     ## DW_CFA_def_cfa_register (col 6)
        .byte   0x6     ## ULEB128 6
        .align  8
..Dfdee0:
        .ident  "PGC 7.0-7"


On Jun 7, 2010, at 9:54 PM, George Bosilca wrote:

> 
> On Jun 7, 2010, at 19:47 , Jeff Squyres wrote:
> 
> > I'm getting these warnings from PGI 7.0.7.  Do they matter?  Is "clobber" 
> > important?
> 
> clobber might be the most important piece of information there, it trigger a 
> warning for the compiler that the condition code register have been altered.
> 
> This code is protected by OMPI_GCC_INLINE_ASSEMBLY, so if we're compiling it 
> it means that somehow we detected that PGI support the GCC inline assembly. 
> Now, if they only half-support it, there is not much we can do.
> 
> Can you send the assembly instructions generated by the PGI compiler for the 
> following code:
> 
>    int32_t oldval;
> 
>    do {
>       oldval = *addr;
>    } while (0 == opal_atomic_cmpset_32(addr, oldval, oldval + delta));
>    return (oldval + delta);
> 
> 
>   Thanks,
>     george.
> 
> >
> >  CXX    mpicxx.lo
> > "../../../opal/include/opal/sys/amd64/atomic.h", line 91: warning: "cc"
> >          clobber ignored
> >                         : "memory", "cc");
> >                                     ^
> >
> > "../../../opal/include/opal/sys/amd64/atomic.h", line 83: warning: parameter
> >          "oldval" was set but never used
> >                                          int32_t oldval, int32_t newval)
> >                                                  ^
> >
> > "../../../opal/include/opal/sys/amd64/atomic.h", line 112: warning: "cc"
> >          clobber ignored
> >                         : "memory", "cc"
> >                                     ^
> >
> > "../../../opal/include/opal/sys/amd64/atomic.h", line 104: warning: 
> > parameter
> >          "oldval" was set but never used
> >                                           int64_t oldval, int64_t newval)
> >                                                   ^
> >
> > --
> > Jeff Squyres
> > jsquy...@cisco.com
> > For corporate legal information go to:
> > http://www.cisco.com/web/about/doing_business/legal/cri/
> >
> >
> > _______________________________________________
> > devel mailing list
> > de...@open-mpi.org
> > http://www.open-mpi.org/mailman/listinfo.cgi/devel
> 
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> 


-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to