[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] mass stupidity with registers and longs
From: |
Richard Urwin |
Subject: |
Re: [avr-gcc-list] mass stupidity with registers and longs |
Date: |
Fri, 14 Jan 2005 07:48:33 +0000 |
User-agent: |
KMail/1.5.3 |
On Friday 14 Jan 2005 6:18 am, Russell Shaw wrote:
> Curtis Maloney 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?
>
> a[] is sign extended and the resulting integer interpreted as
> unsigned.
So what happens if you catch the type cast before it has to dereference
a byte into an int? :-
extern char a[4];
unsigned long ul;
ul = ( ((unsigned char*)a)[0] << 8) | ((unsigned char*)a)[1];
--
Richard Urwin
- [avr-gcc-list] mass stupidity with registers and longs, Curtis Maloney, 2005/01/13
- Re: [avr-gcc-list] mass stupidity with registers and longs, James Washer, 2005/01/14
- RE: [avr-gcc-list] mass stupidity with registers and longs, Ben Mann, 2005/01/14
- Re: [avr-gcc-list] mass stupidity with registers and longs, Russell Shaw, 2005/01/14
- Re: [avr-gcc-list] mass stupidity with registers and longs,
Richard Urwin <=
- Re: [avr-gcc-list] mass stupidity with registers and longs, E. Weddington, 2005/01/14
- Re: [avr-gcc-list] mass stupidity with registers and longs, David Gay, 2005/01/17