as: i386-Jumps
9.15.8 Handling of Jump Instructions
------------------------------------
Jump instructions are always optimized to use the smallest possible
displacements. This is accomplished by using byte (8-bit) displacement
jumps whenever the target is sufficiently close. If a byte displacement
is insufficient a long displacement is used. We do not support word
(16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
instruction with the 'data16' instruction prefix), since the 80386
insists upon masking '%eip' to 16 bits after the word displacement is
added. (See also i386-Arch)
Note that the 'jcxz', 'jecxz', 'loop', 'loopz', 'loope', 'loopnz' and
'loopne' instructions only come in byte displacements, so that if you
use these instructions ('gcc' does not use them) you may get an error
message (and incorrect code). The AT&T 80386 assembler tries to get
around this problem by expanding 'jcxz foo' to
jcxz cx_zero
jmp cx_nonzero
cx_zero: jmp foo
cx_nonzero: