When you say "I believe that the compiler has enough information to
use byte aligned transfers", are you refering to the line:
x[4] = *ip
If so, why do you expect byte transfers? You're copying from one
integer sized object to another. What happened before this line is
irrelevant (in particular the fact that you've forced the "ip"
pointer to have a badly alligned value).
Or am I misunderstanding what you're asking?
Brendan
--- In lpc2000@yahoogroups.com, "dsidlauskas1" <dsidlauskas@...>
wrote:
>
> Consider the following code:
>
> ============================
> char buf[]={1,2,3,4,5,6,7,8};
> int *ip, x[4];
>
> for (i=0; i<4; i++)
> {
> ip = (int *)&buf[i];
> x[4] = *ip;
> }
> =============================
> The Keil compiler compiles this without warning, but does not
produce
> the expected (for me) result in x. The problem is that Keil uses the
> LDR instruction to effect the transfer and this is valid only on 4
> byte boundaries.
>
> GCC compiles but does give a non-aligned access warning.
>
> I believe that the compiler has enough information to use byte
aligned
> transfers, and should, or at least give a warning.
>
> Anybody want to weigh in on this one.
>
> Thanks in advance for your comments.
>
> Dave Sidlauskas
>Message
Re: For C Experts
2006-03-30 by brendanmurphy37
Attachments
- No local attachments were found for this message.