This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [avr-gcc-list] tool chain bug (fwd)


On Wed, Sep 25, 2002 at 08:42:59PM -0700, Theodore A. Roth wrote:
> [troth@bozoland messy]$ cat mm.s
>         .arch atmega128
> __SREG__ = 0x3f
> __SP_H__ = 0x3e
> __SP_L__ = 0x3d
> __tmp_reg__ = 0
> __zero_reg__ = 1
> _PC_ = 2
> .Lfoo:
>         dec r24
>         brne _PC_-4
> .Lbar:
>         dec r24
>         brne .Lbar
> .Lloop:
>         rjmp .Lloop
> 
> Running this through gas with your patch yields this:
> 
> 00000000 <.text>:
>    0:   8a 95           dec     r24
>    2:   e9 f7           brne    .-6             ; 0xfffffffe
>    4:   8a 95           dec     r24
>    6:   f1 f7           brne    .-4             ; 0x4
>    8:   ff cf           rjmp    .-2             ; 0x8
> 
> line "2:" should match line "6:".

Why?  Or more specifically, what is the meaning of "brne -2"?  The
fact that older avr gas assembled this differently doesn't mean much.
I reckon the old behaviour was wrong, and that "brne -2" ought to
branch to address -2.  If you really want a pc relative branch,
write "brne .-4"

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]