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