avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-gcc-list] mass stupidity with registers and longs


From: James Washer
Subject: Re: [avr-gcc-list] mass stupidity with registers and longs
Date: Thu, 13 Jan 2005 21:31:04 -0800

Wouldn't this work?


        unsigned long ul;
        unsigned char a[4];
        ul=*(unsigned long*)a;

Of course, that might not be the byte order you want.. 

 - jim

On Fri, 14 Jan 2005 15:51:59 +1100
Curtis Maloney <address@hidden> wrote:

> 
> I give up.  I've been trying to shift 4 chars into an unsigned long, but 
> can't 
> stop GCC 3.4.1 (what's shipped with the latest WinAVR) from sign extending 
> values, let alone producing sane code.
> 
> I've tried -Os, -O2, -O3, with and without -fnew-ra... the asm varies, but is 
> generaly crap.
> 
> now, if I have:
>       extern char a[4];
>       unsigned long ul;
> 
>       ul = ( (unsigned)a[0] << 8 ) | (unsigned)a[1];
> 
> why would it be sign extending a[0] and a[1] when they're cast to unsigneds?
> And then why doesn't the code optimiser see to just mov rX, a[1]; mov 
> rX+1,a[0] ?
> 
> I tried casts on casts on casts... everything I could think of to get better 
> code, and it just did not improve.
> 
> Am I missing something, or do I just need to get gcc 3.4.3?  If so, is anyone 
> lurking here involved with WinAVR, and can tell me when the next update might 
> happen?
> 
> --
> Curtis Maloney
> 
> 
> _______________________________________________
> avr-gcc-list mailing list
> address@hidden
> http://www.avr1.org/mailman/listinfo/avr-gcc-list
> 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]