gccint: Dispatch Tables
1
1 18.20.8 Output of Dispatch Tables
1 ---------------------------------
1
1 This concerns dispatch tables.
1
1 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL)
1 A C statement to output to the stdio stream STREAM an assembler
1 pseudo-instruction to generate a difference between two labels.
1 VALUE and REL are the numbers of two internal labels. The
1 definitions of these labels are output using
1 '(*targetm.asm_out.internal_label)', and they must be printed in
1 the same way here. For example,
1
1 fprintf (STREAM, "\t.word L%d-L%d\n",
1 VALUE, REL)
1
1 You must provide this macro on machines where the addresses in a
1 dispatch table are relative to the table's own address. If
1 defined, GCC will also use this macro on all machines when
1 producing PIC. BODY is the body of the 'ADDR_DIFF_VEC'; it is
1 provided so that the mode and flags can be read.
1
1 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)
1 This macro should be provided on machines where the addresses in a
1 dispatch table are absolute.
1
1 The definition should be a C statement to output to the stdio
1 stream STREAM an assembler pseudo-instruction to generate a
1 reference to a label. VALUE is the number of an internal label
1 whose definition is output using
1 '(*targetm.asm_out.internal_label)'. For example,
1
1 fprintf (STREAM, "\t.word L%d\n", VALUE)
1
1 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)
1 Define this if the label before a jump-table needs to be output
1 specially. The first three arguments are the same as for
1 '(*targetm.asm_out.internal_label)'; the fourth argument is the
1 jump-table which follows (a 'jump_table_data' containing an
1 'addr_vec' or 'addr_diff_vec').
1
1 This feature is used on system V to output a 'swbeg' statement for
1 the table.
1
1 If this macro is not defined, these labels are output with
1 '(*targetm.asm_out.internal_label)'.
1
1 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)
1 Define this if something special must be output at the end of a
1 jump-table. The definition should be a C statement to be executed
1 after the assembler code for the table is written. It should write
1 the appropriate code to stdio stream STREAM. The argument TABLE is
1 the jump-table insn, and NUM is the label-number of the preceding
1 label.
1
1 If this macro is not defined, nothing special is output at the end
1 of the jump-table.
1
1 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree
1 DECL, int FOR_EH, int EMPTY)
1 This target hook emits a label at the beginning of each FDE. It
1 should be defined on targets where FDEs need special labels, and it
1 should write the appropriate label, for the FDE associated with the
1 function declaration DECL, to the stdio stream STREAM. The third
1 argument, FOR_EH, is a boolean: true if this is for an exception
1 table. The fourth argument, EMPTY, is a boolean: true if this is a
1 placeholder label for an omitted FDE.
1
1 The default is that FDEs are not given nonlocal labels.
1
1 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM)
1 This target hook emits a label at the beginning of the exception
1 table. It should be defined on targets where it is desirable for
1 the table to be broken up according to function.
1
1 The default is that no label is emitted.
1
1 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx
1 PERSONALITY)
1 If the target implements 'TARGET_ASM_UNWIND_EMIT', this hook may be
1 used to emit a directive to install a personality hook into the
1 unwind info. This hook should not be used if dwarf2 unwind info is
1 used.
1
1 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx_insn
1 *INSN)
1 This target hook emits assembly directives required to unwind the
1 given instruction. This is only used when
1 'TARGET_EXCEPT_UNWIND_INFO' returns 'UI_TARGET'.
1
1 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
1 True if the 'TARGET_ASM_UNWIND_EMIT' hook should be called before
1 the assembly for INSN has been emitted, false if the hook should be
1 called afterward.
1