------- Comment #19 from ubizjak at gmail dot com  2008-11-20 21:37 -------
Hm, rdx gets corrupted:

check2848va:
.LFB0:
        .cfi_startproc
        movq    %rsi, %rcx      # tmp73,
        leaq    8(%rsp), %rax   #,
(+)     movq    %rdx, -40(%rsp) #,
        shrq    $32, %rcx       #,
        cmpl    %esi, s2848(%rip)       # tmp73, s2848.a
>>>     movq    -80(%rsp), %rdx #, tmp74
        movq    %rax, -112(%rsp)        #, <variable>.overflow_arg_area
        leaq    -56(%rsp), %rax #,
        movq    %rsi, -48(%rsp) #,
        movl    $8, -120(%rsp)  #, <variable>.gp_offset
        movq    %rsi, -88(%rsp) # tmp70,
        movq    %rax, -104(%rsp)        #, <variable>.reg_save_area
        movq    %rsi, -72(%rsp) # tmp73, arg
        movq    %rdx, -64(%rsp) # tmp74, arg
        je      .L4     #,
        addl    $1, fails(%rip) #, fails
.L4:
        cmpl    %ecx, s2848+4(%rip)     # arg$b$real, s2848.b
        setne   %cl     #, tmp79
(++)    cmpl    %edx, s2848+8(%rip)     # arg$b$imag, s2848.b
        setne   %al     #, tmp82
        orb     %al, %cl        # tmp82, tmp79
        je      .L6     #,
        addl    $1, fails(%rip) #, fails

rdx is saved at the point of (+), corrupted at ">>>" and this corrupted value
is used at (++). The insn at ">>>" just falls in the insn stream from the sky,
it is not present if "a" is changed to "unsigned long" in S2848 structure.

In case when "a" is changed to "unsigned long", testcase works OK. The testcase
also works when insn at ">>>" is removed.


-- 


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

Reply via email to