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