[Bug target/38941] New: CX isn't preserved with shift

Andrew Thomas Pinski pinskia@gmail.com
Fri Jan 23 04:24:00 GMT 2009



Sent from my iPhone

On Jan 22, 2009, at 5:54 PM, "hjl dot tools at gmail dot com" <gcc-bugzilla@gcc.gnu.org 
 > wrote:

> On x86, CX is used for shift. If CX is used for a variable, it
> may not be preserved with shift:
>
> [hjl@gnu-9 reg-1]$ cat r.c
> extern void abort (void);
>
> void
> foo (int x)
> {
>  if (x != 8)
>    abort ();
> }
>
> void
> bar (int g)
> {
>    register int x __asm__("ecx");
>    x = 5;
>    foo (1 << g);

I think this code is undefined as the register variable is not used in  
an inline-asm.

>
>    if (x != 5)
>      abort ();
> }
>
> int
> main ()
> {
>  bar (3);
>  return 0;
> }
> [hjl@gnu-9 reg-1]$ make r0
> /export/build/gnu/gcc/build-i686-linux/gcc/xgcc
> -B/export/build/gnu/gcc/build-i686-linux/gcc/ -m32 -O0 r.c -o r0
> [hjl@gnu-9 reg-1]$ ./r0
> Aborted
> [hjl@gnu-9 reg-1]$
>
>
> -- 
>           Summary: CX isn't preserved with shift
>           Product: gcc
>           Version: 4.4.0
>            Status: UNCONFIRMED
>          Keywords: ra
>          Severity: normal
>          Priority: P3
>         Component: target
>        AssignedTo: unassigned at gcc dot gnu dot org
>        ReportedBy: hjl dot tools at gmail dot com
>
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38941
>



More information about the Gcc-bugs mailing list