public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "jakub at gcc dot gnu dot org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug inline-asm/20718] New: "+r" constraint with uninitialized value
Date: Fri, 01 Apr 2005 16:39:00 -0000	[thread overview]
Message-ID: <20050401163947.20718.jakub@gcc.gnu.org> (raw)

unsigned long foo (unsigned long *a, unsigned long *b,
                   unsigned long *c, int d)
{
  unsigned long e, f;

  if (d <= 0) return 0;
  asm ("# registers %0 %1 %2 %3 %4 %5"
       : "+a" (e),"+c" (d), "+r" (f)
       : "r" (a), "r" (b), "r" (c));
  return e;
}

at -O2 results in
# registers %rax %ecx %rdx %rdi %rsi %rdx
Note %2 and %5 being the same register, %rdx.
If f (and e) are initialized, both older GCCs and GCC4+ assign different
registers, but with unitialized values older GCCs seem to act as if "+r"
was instead "=&r" while GCC4+ treat it as "=r".

The library that used this (openssl) has been fixed to use "=&r" and "=&a"
instead, but I'd like to understand what is the desirable GCC behaviour
in this case.  If it is undefined behaviour, so be it, but perhaps that
should be documented.  Similarly if "r" (unitialized_var) among inputs means
GCC should allocate a unique register for that input or it doesn't have to.

-- 
           Summary: "+r" constraint with uninitialized value
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: inline-asm
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jakub at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org,rth at gcc dot gnu dot
                    org
GCC target triplet: x86_64-*-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20718


             reply	other threads:[~2005-04-01 16:39 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-01 16:39 jakub at gcc dot gnu dot org [this message]
2005-04-01 19:19 ` [Bug inline-asm/20718] " pinskia at gcc dot gnu dot org
2005-07-21 21:57 ` pbrook at gcc dot gnu dot org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050401163947.20718.jakub@gcc.gnu.org \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).