From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3040 invoked by alias); 15 Feb 2008 10:56:02 -0000 Received: (qmail 3031 invoked by uid 22791); 15 Feb 2008 10:56:02 -0000 X-Spam-Check-By: sourceware.org Received: from chrocht.moloch.sk (HELO mail.moloch.sk) (62.176.169.44) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 15 Feb 2008 10:55:42 +0000 Received: from [62.176.172.198] (ildyko.moloch.sk [62.176.172.198]) by mail.moloch.sk (Postfix) with ESMTP id 9A5CE340F141 for ; Fri, 15 Feb 2008 11:55:38 +0100 (CET) Message-ID: <47B56FAA.6040504@imatix.com> Date: Fri, 15 Feb 2008 10:56:00 -0000 From: Martin Sustrik User-Agent: Thunderbird 2.0.0.6 (X11/20071022) MIME-Version: 1.0 To: gcc-help@gcc.gnu.org Subject: Should it be reported as a bug? (-O2 and cmpxchg instruction) Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org X-SW-Source: 2008-02/txt/msg00176.txt.bz2 Hi all, I've encountered a problem with gcc inline assembly. Following code, when optimised with -O2 gives following machine code: __asm__ volatile ( "lock; cmpxchgl %1, %3\n\t" "jz 1f\n\t" "mov %2, %%eax\n\t" "lock; xchgl %%eax, %3\n\t" "1:\n\t" : "=a" (oldval) : "r" (thenval_), "r" (elseval_), "m" (value), "0" (0) : "memory", "cc"); 4031a0: 31 c0 xor %eax,%eax 4031a2: f0 0f b1 55 40 lock cmpxchg %edx,0x40(%rbp) 4031a7: 74 06 je 4031af 4031a9: 89 c0 mov %eax,%eax 4031ab: f0 87 45 40 lock xchg %eax,0x40(%rbp) Note that %2 maps to %%eax (mov %2, %%eax --> mov %eax,%eax). This shouldn't happen given that cmpxchg modifies the value of %%eax. Any idea whether this should be considered a bug and reported as such? GCC version info: Using built-in specs. Target: x86_64-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release x86_64-linux-gnu Thread model: posix gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) Martin