
Albert ARIBAUD albert.u.boot@aribaud.net writes:
Hi Måns,
On Tue, 11 Feb 2014 15:33:09 +0000, Måns Rullgård mans@mansr.com wrote:
The problem is that the current settings do the exact opposite. By using -munaligned-access by default, you are asking the compiler to go ahead and do whatever it thinks is best, which is sometimes to perform an intentional unaligned access. Exactly when this will happen is largely impossible to predict.
The -munaligned-access option does *not* "[ask] the compiler to go ahead and do whatever it thinks is best", it tells it to use direct native accesses when unaligned accesses are required, as opposed to splitting unaligned accesses into smaller but aligned aligned native accesses, which is what you get with -mno-unaligned-access.
The flag does both of those things. It even gives the compiler permission to merge multiple adjacent accesses into a single wider one.
To get the behaviour you desire, the code should be compiled with -mno-unaligned-access. This tells the compiler to _never_ automatically perform an unaligned memory access. If it thinks an address might be unaligned, it will split the access.
This shows that you really have not read my argument, in which I *did* explain why we tell the compiler *not* to split unaligned accesses into smaller correctly aligned accesses, i.e., why -munaligned-access is used.
I have read what you call your argument. Unfortunately for you, it is based on false premises, and as such any conclusions you arrive at are incorrect.