On Tue, Oct 28, 2014 at 11:46 AM, Matthew Fortune
<matthew.fort...@imgtec.com> wrote:
>> >> >   Do you have an objection to allowing an option to disable these
>> >> instructions (despite the reason for wanting to do so)?
>> >>
>> >> Yes this seems like a bad workaround for broken code.
>> >>
>> > Well, we work around broken hardware all the time.  What would you
>> suggest that Steve do instead?
>>
>> We work around broken hardware all the time yes but that is something
>> which is hard to change.  Software is easier to fix.  That does not
>> mean in the compiler.  The compiler team should not get themselves in
>> the business of working around broken software that depends on
>> undefined behavior (this undefined behavior is very obvious and easier
>> to fix in the source of the problem).  Report the bug to Google.
>
> I'm mostly in agreement with Andrew on this. I'd like to understand more
> about the use-case and what happens for other architectures (only ARM
> and x86 are really relevant here I guess). I believe x86 will just
> happily load/store doubles to 4-byte aligned addresses but I'm not sure
> for ARM. If ARM has to take unaligned access faults for this then I
> think MIPS simply has to do the same.

On AArch32 (ARM) the equivalent general purpose instructions (ldrd /
strd , vldr / vstr, vpush / vpop, vldm / vstm) require only 4 byte
alignment in the architecture. The only case where we may have a
problem is with ldrexd / strexd instructions which are used for
atomics but I'm not sure if that is under question / discussion here.
This is really an application "design / portability" issue rather than
anything else. So, there's no need to take alignment faults on AArch32
in this situation. Oh and before someone asks AArch64 is not a strict
alignment target and so the compiler is free to emit unaligned
accesses unless it is told not to do so.

regards
Ramana

Reply via email to