05.06.2015 13:02, Ondřej Bílka writes: > Also as I mentioned bugs before gcc now doesn't handle alignment well so > it doesn't optimize following to zero for aligned code. > > align = ((uintptr_t) x) % 16; > That is because GCC is conservative and supports some non-ABI-compliant memory allocators which only guarantee 8-byte alignment, but
char *bar() { char *data = __builtin_malloc(64); return data + ((unsigned long)data) % 8; } does get optimized to bar: .LFB1: .cfi_startproc movl $64, %edi jmp malloc .cfi_endproc -- Regards, Mikhail Maltsev