diff options
Diffstat (limited to 'gas/config/tc-ns32k.h')
-rw-r--r-- | gas/config/tc-ns32k.h | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/gas/config/tc-ns32k.h b/gas/config/tc-ns32k.h new file mode 100644 index 0000000..4b038eb --- /dev/null +++ b/gas/config/tc-ns32k.h @@ -0,0 +1,155 @@ +/* tc-ns32k.h -- Opcode table for National Semi 32k processor + Copyright (C) 1987, 92, 93, 94, 95, 1997 Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GAS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#define TC_NS32K + +#define TARGET_BYTES_BIG_ENDIAN 0 + +#define TC_PCREL_ADJUST(F) md_pcrel_adjust(F) + +#ifdef BFD_ASSEMBLER +#define NO_RELOC BFD_RELOC_NONE + +#define TARGET_ARCH bfd_arch_ns32k + +#ifndef TARGET_FORMAT /* Maybe defined in te-*.h */ +#define TARGET_FORMAT "a.out-pc532-mach" +#endif +#else +#define NO_RELOC 0 +#endif + +#define LOCAL_LABELS_FB 1 + +#include "bit_fix.h" + +#define tc_aout_pre_write_hook(x) {;} /* not used */ +#define tc_crawl_symbol_chain(a) {;} /* not used */ +#define tc_headers_hook(a) {;} /* not used */ + +#ifdef SEQUENT_COMPATABILITY +#define DEF_MODEC 20 +#define DEF_MODEL 21 +#endif + +#ifndef DEF_MODEC +#define DEF_MODEC 20 +#endif + +#ifndef DEF_MODEL +#define DEF_MODEL 20 +#endif + +#define MAX_ARGS 4 +#define ARG_LEN 50 + +#define TC_CONS_FIX_NEW cons_fix_new_ns32k +extern void fix_new_ns32k_exp PARAMS((fragS *frag, + int where, + int size, + expressionS *exp, + int pcrel, + int im_disp, + bit_fixS *bit_fixP, /* really bit_fixS */ + int bsr, + fragS *opcode_frag, + unsigned int opcode_offset)); + + +extern void fix_new_ns32k PARAMS ((fragS *frag, + int where, + int size, + struct symbol *add_symbol, + long offset, + int pcrel, + int im_disp, + bit_fixS *bit_fixP, /* really bit_fixS */ + int bsr, + fragS *opcode_frag, + unsigned int opcode_offset)); + +extern void cons_fix_new_ns32k PARAMS ((fragS *frag, + int where, + int size, + expressionS *exp)); + +/* the NS32x32 has a non 0 nop instruction which should be used in aligns */ +#define NOP_OPCODE 0xa2 + +#define md_operand(x) + +extern const struct relax_type md_relax_table[]; +#define TC_GENERIC_RELAX_TABLE md_relax_table + +#define TC_FRAG_TYPE \ +struct { \ + fragS *fr_opcode_fragP; \ + unsigned int fr_opcode_offset; \ + char fr_bsr; \ +} + +#define TC_FRAG_INIT(X) \ + do \ + { \ + frag_opcode_frag (X) = NULL; \ + frag_opcode_offset (X) = 0; \ + frag_bsr (X) = 0; \ + } \ + while(0) + +/* Accessor macros for things which may move around */ +#define frag_opcode_frag(X) (X)->tc_frag_data.fr_opcode_fragP +#define frag_opcode_offset(X) (X)->tc_frag_data.fr_opcode_offset +#define frag_bsr(X) (X)->tc_frag_data.fr_bsr + +#define TC_FIX_TYPE \ +struct \ +{ \ + fragS *opcode_fragP; \ + unsigned int opcode_offset; \ + unsigned int bsr : 1; \ +} + +/* Accessor macros for things which may move around. + See comments in write.h. */ +#define fix_im_disp(X) (X)->fx_im_disp +#define fix_bit_fixP(X) (X)->fx_bit_fixP +#define fix_opcode_frag(X) (X)->tc_fix_data.opcode_fragP +#define fix_opcode_offset(X) (X)->tc_fix_data.opcode_offset +#define fix_bsr(X) (X)->tc_fix_data.bsr + +#define TC_INIT_FIX_DATA(X) \ + do \ + { \ + fix_opcode_frag(X) = NULL; \ + fix_opcode_offset(X) = 0; \ + fix_bsr(X) = 0; \ + } \ + while(0) + +#define TC_FIX_DATA_PRINT(FILE, FIXP) \ + do \ + { \ + fprintf((FILE), "opcode_frag=%ld, operand offset=%d, bsr=%d\n", \ + (unsigned long) fix_opcode_frag (FIXP), \ + fix_opcode_offset (FIXP), \ + fix_bsr (FIXP)); \ + } \ + while(0) |