* Ralf Baechle <ralf@xxxxxxxxxxxxxx> [110428 02:35]: > On Wed, Apr 27, 2011 at 04:32:12PM -0700, Junio C Hamano wrote: > > > > +static inline int is_null_sha1(const unsigned char *sha1) > > > { > > > - return memcmp(sha1, sha2, 20); > > > + const unsigned long long *sha1_64 = (void *)sha1; > > > + const unsigned int *sha1_32 = (void *)sha1; > > > > Can everybody do unaligned accesses just fine? > > Misaligned accesses cause exceptions on some architectures which then > are fixed up in software making these accesses _very_ slow. You can > use __attribute__((packed)) to work around that but that will on the > affected architectures make gcc generate code pessimistically that is > slower than not using __attribute__((packed)) in case of proper > alignment. And __attribute__((packed)) only works with GCC. Even __attribute__((packed)) usually does not allow arbitrary aligned data, but can intruct the code to generate code to access code misaligned in a special way. (I have already seen code where thus accessing a properly aligned long caused a SIGBUS, because it was aligned because being in a misaligned packed struct). In short: misaligning stuff works on x86, everywhere else it is disaster waiting to happen. (And people claiming compiler bugs or broken architectures, just because they do not know the basic rules of C). Bernhard R. Link -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html