[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: problem with unaligned access on Alpha
- From: "Christian Groessler" <cpg aladdin de>
- To: Richard Henderson <rth cygnus com>
- Cc: egcs egcs cygnus com, axp-list redhat com
- Subject: Re: problem with unaligned access on Alpha
- Date: Thu, 24 Jun 1999 09:54:04 +0100
On 6/23/99 6:35:21 PM Richard Henderson wrote:
>
>On Tue, Jun 22, 1999 at 11:59:46AM +0100, Christian Groessler wrote:
>> #define READ_WORD(a) (*(unsigned short *)(a))
>...
>> I would expect the "val=READ_WORD()" line to generate an unaligned
access
>> exception, but this doesn't happen.
>
>You expect incorrectly.
>
>In general you'll only get an unaligned access trap if we'd issued
>an `ldwu' instruction, which we can only do when compiling for EV56
>or higher.
I assume for shorts only. If I replace "unsigned short *" with "unsigned
int *"
I do get unaligned traps.
>> I looked at the generated assembler code (with my little only alpha
>> assembler knowledge), and it seems that the compiler is generating
>> code for unaligned access but somehow forgets to get the byte at
(adress+1).
>
>Nope, we're generating code for an _aligned_ word access in
>the only way that is possible on EV4. An unaligned word
>access doubles the length of the sequence.
Now I see. The code for aligned word access breaks when the
word is unaligned at address+7, if I understand the assembly code
correctly. My problem is/was, that the code breaks _silently_, but
maybe this case is hard to detect (to give a warning etc.).
Thanks for the info.
regards,
chris
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[]