From 0c6390fae9478618548c4d4c64483b85ae9f28ac Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 28 Jan 2009 03:38:41 +0000 Subject: [PATCH] re PR target/38941 (CX isn't preserved with shift) 2009-01-27 H.J. Lu PR target/38941 * doc/extend.texi: Improve local variable with asm reg. From-SVN: r143719 --- gcc/ChangeLog | 5 +++++ gcc/doc/extend.texi | 2 ++ 2 files changed, 7 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b99dc9..ad51b27 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-01-27 H.J. Lu + + PR target/38941 + * doc/extend.texi: Improve local variable with asm reg. + 2009-01-27 Adam Nemet * c.opt (Wpacked-bitfield-compat): Change init value to -1. diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 79a8c2e..c2c1381 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -4852,6 +4852,8 @@ asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); In the above example, beware that a register that is call-clobbered by the target ABI will be overwritten by any function call in the assignment, including library calls for arithmetic operators. +Also a register may be clobbered when generating some operations, +like variable shift, memory copy or memory move on x86. Assuming it is a call-clobbered register, this may happen to @code{r0} above by the assignment to @code{p2}. If you have to use such a register, use temporary variables for expressions between the register -- 2.7.4