Home | History | Annotate | Download | only in config
      1 /* tc-ns32k.h -- Opcode table for National Semi 32k processor
      2    Copyright (C) 1987-2016 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,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public 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 #define TC_NS32K
     22 
     23 #define TARGET_BYTES_BIG_ENDIAN	0
     24 
     25 #define TC_PCREL_ADJUST(F) md_pcrel_adjust(F)
     26 extern int md_pcrel_adjust (fragS *);
     27 
     28 #define NO_RELOC BFD_RELOC_NONE
     29 
     30 #define TARGET_ARCH		bfd_arch_ns32k
     31 
     32 #ifndef TARGET_FORMAT		/* Maybe defined in te-*.h.  */
     33 #define TARGET_FORMAT		"a.out-pc532-mach"
     34 #endif
     35 
     36 #define LOCAL_LABELS_FB 1
     37 
     38 #include "bit_fix.h"
     39 
     40 #ifdef SEQUENT_COMPATABILITY
     41 #define DEF_MODEC 20
     42 #define DEF_MODEL 21
     43 #endif
     44 
     45 #ifndef DEF_MODEC
     46 #define DEF_MODEC 20
     47 #endif
     48 
     49 #ifndef DEF_MODEL
     50 #define DEF_MODEL 20
     51 #endif
     52 
     53 #define MAX_ARGS 4
     54 #define ARG_LEN 50
     55 
     56 #define TC_CONS_FIX_NEW cons_fix_new_ns32k
     57 extern void cons_fix_new_ns32k (fragS *, int, int, expressionS *,
     58 				bfd_reloc_code_real_type);
     59 
     60 /* The NS32x32 has a non 0 nop instruction which should be used in aligns.  */
     61 #define NOP_OPCODE 0xa2
     62 
     63 #define md_operand(x)
     64 
     65 extern const struct relax_type md_relax_table[];
     66 #define TC_GENERIC_RELAX_TABLE md_relax_table
     67 
     68 #define TC_FRAG_TYPE				\
     69   struct 					\
     70     { 						\
     71       fragS *      fr_opcode_fragP;		\
     72       unsigned int fr_opcode_offset;		\
     73       char         fr_bsr;			\
     74     }
     75 
     76 #define TC_FRAG_INIT(X)				\
     77   do						\
     78      {						\
     79        frag_opcode_frag (X) = NULL;		\
     80        frag_opcode_offset (X) = 0;		\
     81        frag_bsr (X) = 0;			\
     82      }						\
     83   while (0)
     84 
     85 /* Accessor macros for things which may move around.  */
     86 #define frag_opcode_frag(X)   (X)->tc_frag_data.fr_opcode_fragP
     87 #define frag_opcode_offset(X) (X)->tc_frag_data.fr_opcode_offset
     88 #define frag_bsr(X)           (X)->tc_frag_data.fr_bsr
     89 
     90 #define TC_FIX_TYPE				\
     91   struct					\
     92     {						\
     93       fragS *      opcode_fragP;		\
     94       unsigned int opcode_offset;		\
     95       unsigned int bsr : 1;			\
     96     }
     97 
     98 /* Accessor macros for things which may move around.
     99    See comments in write.h.  */
    100 #define fix_im_disp(X)       (X)->fx_im_disp
    101 #define fix_bit_fixP(X)      (X)->fx_bit_fixP
    102 #define fix_opcode_frag(X)   (X)->tc_fix_data.opcode_fragP
    103 #define fix_opcode_offset(X) (X)->tc_fix_data.opcode_offset
    104 #define fix_bsr(X)           (X)->tc_fix_data.bsr
    105 
    106 #define TC_INIT_FIX_DATA(X)			\
    107   do						\
    108      {						\
    109        fix_opcode_frag(X) = NULL;		\
    110        fix_opcode_offset(X) = 0;		\
    111        fix_bsr(X) = 0;				\
    112      }						\
    113   while (0)
    114 
    115 #define TC_FIX_DATA_PRINT(FILE, FIX)					\
    116   do									\
    117     {									\
    118       fprintf ((FILE), "opcode_frag=%ld, operand offset=%d, bsr=%d\n",	\
    119 	      (unsigned long) fix_opcode_frag (FIX),			\
    120 	      fix_opcode_offset (FIX),					\
    121 	      fix_bsr (FIX));						\
    122     }									\
    123   while (0)
    124