(root)/
binutils-2.41/
gas/
cgen.h
       1  /* GAS cgen support.
       2     Copyright (C) 1998-2023 Free Software Foundation, Inc.
       3  
       4     This file is part of GAS, the GNU Assembler.
       5  
       6     GAS is free software; you can redistribute it and/or modify
       7     it under the terms of the GNU General Public License as published by
       8     the Free Software Foundation; either version 3, or (at your option)
       9     any later version.
      10  
      11     GAS is distributed in the hope that it will be useful, but WITHOUT
      12     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
      13     or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
      14     License for more details.
      15  
      16     You should have received a copy of the GNU General Public License
      17     along with GAS; see the file COPYING.  If not, write to the Free
      18     Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
      19     02110-1301, USA.  */
      20  
      21  #ifndef GAS_CGEN_H
      22  #define GAS_CGEN_H
      23  
      24  /* Opcode table handle.  */
      25  extern CGEN_CPU_DESC gas_cgen_cpu_desc;
      26  
      27  /* Maximum number of fixups in an insn.
      28     If you need to change this, allow target to override and do so there.  */
      29  #ifndef GAS_CGEN_MAX_FIXUPS
      30  #define GAS_CGEN_MAX_FIXUPS 3
      31  #endif
      32  
      33  /* Struct defining result of gas_cgen_finish_insn.  */
      34  typedef struct
      35  {
      36    /* Frag containing the insn */
      37    fragS * frag;
      38    /* Address of insn in frag.  */
      39    char * addr;
      40    /* Number of fixups this insn has.  */
      41    int num_fixups;
      42    /* Array of fixups.  */
      43    fixS * fixups[GAS_CGEN_MAX_FIXUPS];
      44  } finished_insnS;
      45  
      46  /* Callback for operand parsing.
      47     The result is an error message or NULL for success.
      48     The parsed value is stored in the bfd_vma *.  */
      49  extern const char * gas_cgen_parse_operand
      50       (CGEN_CPU_DESC, enum cgen_parse_operand_type,
      51        const char **, int, int, enum cgen_parse_operand_result *,
      52        bfd_vma *);
      53  
      54  /* Call this from md_assemble to initialize the assembler callback.  */
      55  extern void gas_cgen_init_parse (void);
      56  
      57  /* Routines and macros for saving fixup chains.  */
      58  extern void gas_cgen_save_fixups (int);
      59  extern void gas_cgen_restore_fixups (int);
      60  extern void gas_cgen_swap_fixups (int);
      61  extern void gas_cgen_initialize_saved_fixups_array (void);
      62  #define MAX_SAVED_FIXUP_CHAINS 50
      63  
      64  /* Add a register to the assembler's hash table.
      65     This makes lets GAS parse registers for us.
      66     ??? This isn't currently used, but it could be in the future.  */
      67  extern void cgen_asm_record_register (char *, int);
      68  
      69  /* After CGEN_SYM (assemble_insn) is done, this is called to
      70     output the insn and record any fixups.  */
      71  extern void gas_cgen_finish_insn (const CGEN_INSN *,
      72  				  CGEN_INSN_BYTES_PTR, unsigned int,
      73  				  int, finished_insnS *);
      74  
      75  /* Record a fixup.  */
      76  extern fixS * gas_cgen_record_fixup (fragS *, int, const CGEN_INSN *,
      77  				     int, const CGEN_OPERAND *, int,
      78  				     symbolS *, offsetT);
      79  extern fixS * gas_cgen_record_fixup_exp (fragS *, int, const CGEN_INSN *,
      80  					 int, const CGEN_OPERAND *, int,
      81  					 expressionS *);
      82  
      83  extern bfd_reloc_code_real_type gas_cgen_pcrel_r_type (bfd_reloc_code_real_type);
      84  
      85  /* md_apply_fix handler.  */
      86  extern void gas_cgen_md_apply_fix (fixS *, valueT *, segT);
      87  
      88  /* tc_gen_reloc handler.  */
      89  extern arelent *gas_cgen_tc_gen_reloc (asection *, fixS *);
      90  
      91  /* Target supplied routine to lookup a reloc.  */
      92  extern bfd_reloc_code_real_type
      93  md_cgen_lookup_reloc (const CGEN_INSN *, const CGEN_OPERAND *, fixS *);
      94  
      95  /* Optional target supplied routine to record a fixup for an expression.  */
      96  extern fixS *
      97  md_cgen_record_fixup_exp (fragS *, int, const CGEN_INSN *, int,
      98  			  const CGEN_OPERAND *, int, expressionS *);
      99  
     100  extern void gas_cgen_md_operand (expressionS *);
     101  
     102  /* Perform any cgen specific initialisation for gas.  */
     103  extern void gas_cgen_begin (void);
     104  
     105  #endif /* GAS_CGEN_H */