diff options
author | Doug Evans <dje@google.com> | 1997-11-05 00:45:23 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 1997-11-05 00:45:23 +0000 |
commit | d57d82d7e58b6cb623ad0c9fc0092bd4c8847c29 (patch) | |
tree | fadfe7e1f0d0a56582f3ea1a5e2aa90ff988fef8 /gas/config | |
parent | 86cb8d868dc566fb7813a7478b32c1e77f632836 (diff) | |
download | gdb-d57d82d7e58b6cb623ad0c9fc0092bd4c8847c29.zip gdb-d57d82d7e58b6cb623ad0c9fc0092bd4c8847c29.tar.gz gdb-d57d82d7e58b6cb623ad0c9fc0092bd4c8847c29.tar.bz2 |
* write.c (print_fixup): Use TC_FIX_DATA_PRINT (if defined) to
print out MD fields of fix.
* frags.c (frag_var, frag_variant): Use TC_FRAG_INIT macro (if
defined) to initialize MD fields in frag.
* as.h (struct frag, ns32k support): Rename ns32k to fr_ns32k.
Delete pcrel_adjust. Add fr_opcode_fragP, fr_opcode_offset.
* config/tc-ns32k.h: Add comments. Remove obsolete
BFD_FAST_SECTION_FILL definition, change prototypes for
fix_new_ns32k and fix_new_ns32k_exp to add new arguments
opcode_frag and opcode_offset and remove pcrel_adjust.
(TC_FIX_TYPE): add opcode_fragP and opcode_offset fields.
(TC_FIX_DATA_PRINT): new macro to print out TC_FIX_TYPE.
(TC_FRAG_INIT): new macro to initialize machine dependent field in
frags.
(frag_opcode_frag, frag_opcode_offset, frag_bsr): macros to access
MD fields in frag structure.
(fix_im_disp, fix_bit_fixP, fix_opcode_frag, fix_opcode_offset,
fix_bsr): macros to access MD fields in fix structure.
* config/tc-ns32k.c: Avoid overlength lines. Align comments. Don't
use struct opcode_location as these fields are now in the frag
structure.
(convert_iif): Call frag_more as it is needed instead
of trying to allocate for the whole insn. Avoid call of frag_more
with negative argument.
(md_pcrel_adjust, md_fix_pcrel_adjust, md_apply_fix,
md_estimate_size_before_relax, md_pcrel_from,
tc_aout_fix_to_chars): use accessor macros to get md fields in fix
and frag structures.
(fix_new_ns32k, fix_new_ns32k_exp): add new arguments opcode_frag and
opcode_offset and remove pcrel_adjust.
(convert_iif, cons_fix_new_ns32k): call fix_new_ns32k,
fix_new_ns32k_exp with changed arguments.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-ns32k.h | 136 |
1 files changed, 114 insertions, 22 deletions
diff --git a/gas/config/tc-ns32k.h b/gas/config/tc-ns32k.h index e37236f..6b89482 100644 --- a/gas/config/tc-ns32k.h +++ b/gas/config/tc-ns32k.h @@ -1,22 +1,48 @@ /* tc-ns32k.h -- Opcode table for National Semi 32k processor - Copyright (C) 1987, 1992 Free Software Foundation, Inc. - + 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ + 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 @@ -34,24 +60,90 @@ #define MAX_ARGS 4 #define ARG_LEN 50 -#if __STDC__ == 1 +#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 + -void fix_new_ns32k(fragS *frag, - int where, - void *add_symbol, /* really symbolS */ - void *sub_symbol, /* really symbolS */ - long offset, - int pcrel, - int pcrel_adjust, - int im_disp, - void *bit_fixP, /* really bit_fixS */ - int bsr); +#define TC_FRAG_INIT(X) \ + do \ + { \ + frag_opcode_frag(X) = NULL; \ + frag_opcode_offset(X) = 0; \ + frag_bsr(X) = 0; \ + } \ + while(0) -#else /* not __STDC__ */ +/* Accessor macros for things which may move around */ +#define frag_opcode_frag(X) (X)->fr_targ.fr_ns32k.fr_opcode_fragP +#define frag_opcode_offset(X) (X)->fr_targ.fr_ns32k.fr_opcode_offset +#define frag_bsr(X) (X)->fr_targ.fr_ns32k.fr_bsr -void fix_new_ns32k(); +#define TC_FIX_TYPE \ +struct \ +{ \ + fragS *opcode_fragP; \ + unsigned int opcode_offset; \ + unsigned int bsr : 1; \ +} -#endif /* not __STDC__ */ +/* 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) -/* end of tc-ns32k.h */ +#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) |