https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90045
--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> --- So it looks like gas does without -relax simply use bne.s which when used explicitely results in valarray.s: Assembler messages: valarray.s:9: Error: jump not 3..10 bytes away (is 2) a bne.s is one byte large while a bne.b is two bytes. Still not sure why gas chooses bne.b when no .balign is present but not when it is. Possibly because when fixing up from bne.s to bne.b the variant with .balign now suddenly needs to insert nops to fulfill the requested alignment (with bne.s the .balign is a no-op).