as: Bundle directives

1 
1 7.9 Bundle directives
1 =====================
1 
1 7.9.1 '.bundle_align_mode ABS-EXPR'
1 -----------------------------------
1 
1 '.bundle_align_mode' enables or disables "aligned instruction bundle"
1 mode.  In this mode, sequences of adjacent instructions are grouped into
1 fixed-sized "bundles".  If the argument is zero, this mode is disabled
1 (which is the default state).  If the argument it not zero, it gives the
1 size of an instruction bundle as a power of two (as for the '.p2align'
1 directive, ⇒P2align).
1 
1    For some targets, it's an ABI requirement that no instruction may
1 span a certain aligned boundary.  A "bundle" is simply a sequence of
1 instructions that starts on an aligned boundary.  For example, if
1 ABS-EXPR is '5' then the bundle size is 32, so each aligned chunk of 32
1 bytes is a bundle.  When aligned instruction bundle mode is in effect,
1 no single instruction may span a boundary between bundles.  If an
1 instruction would start too close to the end of a bundle for the length
1 of that particular instruction to fit within the bundle, then the space
1 at the end of that bundle is filled with no-op instructions so the
1 instruction starts in the next bundle.  As a corollary, it's an error if
1 any single instruction's encoding is longer than the bundle size.
1 
1 7.9.2 '.bundle_lock' and '.bundle_unlock'
1 -----------------------------------------
1 
1 The '.bundle_lock' and directive '.bundle_unlock' directives allow
1 explicit control over instruction bundle padding.  These directives are
1 only valid when '.bundle_align_mode' has been used to enable aligned
1 instruction bundle mode.  It's an error if they appear when
1 '.bundle_align_mode' has not been used at all, or when the last
1 directive was '.bundle_align_mode 0'.
1 
1    For some targets, it's an ABI requirement that certain instructions
1 may appear only as part of specified permissible sequences of multiple
1 instructions, all within the same bundle.  A pair of '.bundle_lock' and
1 '.bundle_unlock' directives define a "bundle-locked" instruction
1 sequence.  For purposes of aligned instruction bundle mode, a sequence
1 starting with '.bundle_lock' and ending with '.bundle_unlock' is treated
1 as a single instruction.  That is, the entire sequence must fit into a
1 single bundle and may not span a bundle boundary.  If necessary, no-op
1 instructions will be inserted before the first instruction of the
1 sequence so that the whole sequence starts on an aligned bundle
1 boundary.  It's an error if the sequence is longer than the bundle size.
1 
1    For convenience when using '.bundle_lock' and '.bundle_unlock' inside
1 assembler macros (⇒Macro), bundle-locked sequences may be nested.
1 That is, a second '.bundle_lock' directive before the next
1 '.bundle_unlock' directive has no effect except that it must be matched
1 by another closing '.bundle_unlock' so that there is the same number of
1 '.bundle_lock' and '.bundle_unlock' directives.
1