This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/44492] auto-inc-dec pushes PRE_MODIFY/PRE_INC into inline asm operands
- From: "jakub at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 10 Jun 2010 10:25:08 -0000
- Subject: [Bug middle-end/44492] auto-inc-dec pushes PRE_MODIFY/PRE_INC into inline asm operands
- References: <bug-44492-87@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #5 from jakub at gcc dot gnu dot org 2010-06-10 10:25 -------
And ensure that it is used exactly once in an inline asm pattern? Even for "g"
constraint? That just can't be true.
Just look at how many of "m" and "=m" constraints e.g. glibc uses.
Only 8 occurrences of %U, but e.g.:
./iconvdata/iso-2022-kr.c: asm ("" : "=m" (buf));
\
./iconvdata/iso-2022-cn.c: asm ("" : "=m" (buf));
\
./nscd/nscd_helper.c: asm ("" : "=m" (tvend));
./nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c: : "=&r"
(oldval), "=&r" (tmp), "=m" (*once_control)
./nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c: : "r"
(once_control), "r" (newval), "m" (*once_control)
./nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: : "=&r"
(__val), "=m" (*futex) \
./nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: : "r"
(futex), "r" (id), "m" (*futex) \
./string/test-memcmp.c: asm ("" : "=g" (r) : "0" (r));
./string/test-strncmp.c: asm ("" : "=g" (r) : "0" (r));
./string/test-strcmp.c: asm ("" : "=g" (r) : "0" (r));
./debug/tst-longjmp_chk.c: asm volatile ("" : "=m" (buf));
./math/math_private.h:#define math_force_eval(x) __asm __volatile ("" : : "m"
(x))
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&r"
(__val), "=m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem),
"r" (value), "m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&r"
(__val), "=m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem),
"r" (value), "m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&b"
(__val), "=&r" (__tmp), "=m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem),
"r" (value), "m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&b"
(__val), "=m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem),
"m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&b"
(__val), "=m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem),
"m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&b" (__val),
"=&r" (__tmp), "=m" (*mem) \
./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem), "m"
(*mem) \
./sysdeps/powerpc/bits/atomic.h: : "=&r" (__val), "=m"
(*mem) \
./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "r" (value),
"m" (*mem) \
./sysdeps/powerpc/bits/atomic.h: : "=&r" (__val), "=m"
(*mem) \
./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "r" (value),
"m" (*mem) \
./sysdeps/powerpc/bits/atomic.h: : "=&b" (__val), "=&r"
(__tmp), "=m" (*mem) \
./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "r" (value),
"m" (*mem) \
./sysdeps/powerpc/bits/atomic.h: : "=&b" (__val), "=m"
(*mem) \
./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "m" (*mem)
\
./sysdeps/powerpc/bits/atomic.h: : "=&b" (__val), "=m"
(*mem) \
./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "m" (*mem)
\
./sysdeps/powerpc/bits/atomic.h: : "=&b" (__val), "=&r"
(__tmp), "=m" (*mem) \
./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "m" (*mem)
\
Guess the Linux kernel has many more of these.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44492