GNU Compiler Collection (GCC) Internals: Alignment Output

Previous: Exception Region Output, Up: Assembler Format [Contents][Index]

#### 17.21.10 Assembler Commands for Alignment

This describes commands for alignment.

Macro: JUMP_ALIGN (label)

  The alignment (log base 2) to put in front of label, which is a common destination of jumps and has no fallthru incoming edge.

  This macro need not be defined if you don’t want any special alignment to be done at such a time. Most machine descriptions do not currently define the macro.

  Unless it’s necessary to inspect the label parameter, it is better to set the variable align_jumps in the target’s `TARGET_OPTION_OVERRIDE`. Otherwise, you should try to honor the user’s selection in align_jumps in a `JUMP_ALIGN` implementation.

Target Hook: int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx label)

  The maximum number of bytes to skip before label when applying `JUMP_ALIGN`. This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN` is defined.

Macro: LABEL_ALIGN_AFTER_BARRIER (label)

  The alignment (log base 2) to put in front of label, which follows a `BARRIER`.

  This macro need not be defined if you don’t want any special alignment to be done at such a time. Most machine descriptions do not currently define the macro.

Target Hook: int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP (rtx label)

  The maximum number of bytes to skip before label when applying `LABEL_ALIGN_AFTER_BARRIER`. This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN` is defined.

Macro: LOOP_ALIGN (label)

  The alignment (log base 2) to put in front of label that heads a frequently executed basic block (usually the header of a loop).

  This macro need not be defined if you don’t want any special alignment to be done at such a time. Most machine descriptions do not currently define the macro.

  Unless it’s necessary to inspect the label parameter, it is better to set the variable `align_loops` in the target’s `TARGET_OPTION_OVERRIDE`. Otherwise, you should try to honor the user’s selection in `align_loops` in a `LOOP_ALIGN` implementation.

Target Hook: int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx label)

  The maximum number of bytes to skip when applying `LOOP_ALIGN` to label. This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN` is defined.

Macro: LABEL_ALIGN (label)

  The alignment (log base 2) to put in front of label. If `LABEL_ALIGN_AFTER_BARRIER` / `LOOP_ALIGN` specify a different alignment, the maximum of the specified values is used.

  Unless it’s necessary to inspect the label parameter, it is better to set the variable `align_labels` in the target’s `TARGET_OPTION_OVERRIDE`. Otherwise, you should try to honor the user’s selection in `align_labels` in a `LABEL_ALIGN` implementation.

Target Hook: int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx label)

  The maximum number of bytes to skip when applying `LABEL_ALIGN` to label. This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN` is defined.

Macro: ASM_OUTPUT_SKIP (stream, nbytes)

  A C statement to output to the stdio stream stream an assembler instruction to advance the location counter by nbytes bytes. Those bytes should be zero when loaded. nbytes will be a C expression of type `unsigned HOST_WIDE_INT`.

Macro: ASM_NO_SKIP_IN_TEXT

  Define this macro if `ASM_OUTPUT_SKIP` should not be used in the text section because it fails to put zeros in the bytes that are skipped. This is true on many Unix systems, where the pseudo–op to skip bytes produces no-op instructions rather than zeros when used in the text section.

Macro: ASM_OUTPUT_ALIGN (stream, power)

  A C statement to output to the stdio stream stream an assembler command to advance the location counter to a multiple of 2 to the power bytes. power will be a C expression of type `int`.

Macro: ASM_OUTPUT_ALIGN_WITH_NOP (stream, power)

  Like `ASM_OUTPUT_ALIGN`, except that the “nop” instruction is used for padding, if necessary.

Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (stream, power, max_skip)

  A C statement to output to the stdio stream stream an assembler command to advance the location counter to a multiple of 2 to the power bytes, but only if max_skip or fewer bytes are needed to satisfy the alignment request. power and max_skip will be a C expression of type `int`.

Previous: Exception Region Output, Up: Assembler Format [Contents][Index]