From 787121fc405b554f5a48e7879b3d492d231004ae Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Mon, 12 Dec 2005 11:16:41 +0000 Subject: Rename ms1 files to mt files (part 1 -- renames only) --- gas/config/tc-ms1.c | 538 ----------------------------- gas/config/tc-ms1.h | 70 ---- gas/config/tc-mt.c | 538 +++++++++++++++++++++++++++++ gas/config/tc-mt.h | 70 ++++ gas/doc/c-ms1.texi | 44 --- gas/doc/c-mt.texi | 44 +++ gas/testsuite/gas/ms1/allinsn.d | 130 ------- gas/testsuite/gas/ms1/allinsn.s | 166 --------- gas/testsuite/gas/ms1/badinsn.s | 3 - gas/testsuite/gas/ms1/badinsn1.s | 3 - gas/testsuite/gas/ms1/badoffsethigh.s | 4 - gas/testsuite/gas/ms1/badoffsetlow.s | 6 - gas/testsuite/gas/ms1/badorder.s | 3 - gas/testsuite/gas/ms1/badreg.s | 3 - gas/testsuite/gas/ms1/badsignedimmhigh.s | 3 - gas/testsuite/gas/ms1/badsignedimmlow.s | 3 - gas/testsuite/gas/ms1/badsyntax.s | 3 - gas/testsuite/gas/ms1/badsyntax1.s | 3 - gas/testsuite/gas/ms1/badunsignedimmhigh.s | 3 - gas/testsuite/gas/ms1/badunsignedimmlow.s | 3 - gas/testsuite/gas/ms1/errors.exp | 79 ----- gas/testsuite/gas/ms1/ldst.s | 28 -- gas/testsuite/gas/ms1/misc.d | 21 -- gas/testsuite/gas/ms1/misc.s | 21 -- gas/testsuite/gas/ms1/ms1-16-003.d | 33 -- gas/testsuite/gas/ms1/ms1-16-003.s | 54 --- gas/testsuite/gas/ms1/ms1.exp | 11 - gas/testsuite/gas/ms1/ms2.d | 18 - gas/testsuite/gas/ms1/ms2.s | 11 - gas/testsuite/gas/ms1/msys.d | 78 ----- gas/testsuite/gas/ms1/msys.s | 95 ----- gas/testsuite/gas/ms1/relocs.d | 68 ---- gas/testsuite/gas/ms1/relocs.exp | 35 -- gas/testsuite/gas/ms1/relocs1.s | 31 -- gas/testsuite/gas/ms1/relocs2.s | 22 -- gas/testsuite/gas/mt/allinsn.d | 130 +++++++ gas/testsuite/gas/mt/allinsn.s | 166 +++++++++ gas/testsuite/gas/mt/badinsn.s | 3 + gas/testsuite/gas/mt/badinsn1.s | 3 + gas/testsuite/gas/mt/badoffsethigh.s | 4 + gas/testsuite/gas/mt/badoffsetlow.s | 6 + gas/testsuite/gas/mt/badorder.s | 3 + gas/testsuite/gas/mt/badreg.s | 3 + gas/testsuite/gas/mt/badsignedimmhigh.s | 3 + gas/testsuite/gas/mt/badsignedimmlow.s | 3 + gas/testsuite/gas/mt/badsyntax.s | 3 + gas/testsuite/gas/mt/badsyntax1.s | 3 + gas/testsuite/gas/mt/badunsignedimmhigh.s | 3 + gas/testsuite/gas/mt/badunsignedimmlow.s | 3 + gas/testsuite/gas/mt/errors.exp | 79 +++++ gas/testsuite/gas/mt/ldst.s | 28 ++ gas/testsuite/gas/mt/misc.d | 21 ++ gas/testsuite/gas/mt/misc.s | 21 ++ gas/testsuite/gas/mt/ms1-16-003.d | 33 ++ gas/testsuite/gas/mt/ms1-16-003.s | 54 +++ gas/testsuite/gas/mt/ms2.d | 18 + gas/testsuite/gas/mt/ms2.s | 11 + gas/testsuite/gas/mt/msys.d | 78 +++++ gas/testsuite/gas/mt/msys.s | 95 +++++ gas/testsuite/gas/mt/mt.exp | 11 + gas/testsuite/gas/mt/relocs.d | 68 ++++ gas/testsuite/gas/mt/relocs.exp | 35 ++ gas/testsuite/gas/mt/relocs1.s | 31 ++ gas/testsuite/gas/mt/relocs2.s | 22 ++ 64 files changed, 1593 insertions(+), 1593 deletions(-) delete mode 100644 gas/config/tc-ms1.c delete mode 100644 gas/config/tc-ms1.h create mode 100644 gas/config/tc-mt.c create mode 100644 gas/config/tc-mt.h delete mode 100644 gas/doc/c-ms1.texi create mode 100644 gas/doc/c-mt.texi delete mode 100644 gas/testsuite/gas/ms1/allinsn.d delete mode 100644 gas/testsuite/gas/ms1/allinsn.s delete mode 100644 gas/testsuite/gas/ms1/badinsn.s delete mode 100644 gas/testsuite/gas/ms1/badinsn1.s delete mode 100644 gas/testsuite/gas/ms1/badoffsethigh.s delete mode 100644 gas/testsuite/gas/ms1/badoffsetlow.s delete mode 100644 gas/testsuite/gas/ms1/badorder.s delete mode 100644 gas/testsuite/gas/ms1/badreg.s delete mode 100644 gas/testsuite/gas/ms1/badsignedimmhigh.s delete mode 100644 gas/testsuite/gas/ms1/badsignedimmlow.s delete mode 100644 gas/testsuite/gas/ms1/badsyntax.s delete mode 100644 gas/testsuite/gas/ms1/badsyntax1.s delete mode 100644 gas/testsuite/gas/ms1/badunsignedimmhigh.s delete mode 100644 gas/testsuite/gas/ms1/badunsignedimmlow.s delete mode 100644 gas/testsuite/gas/ms1/errors.exp delete mode 100644 gas/testsuite/gas/ms1/ldst.s delete mode 100644 gas/testsuite/gas/ms1/misc.d delete mode 100644 gas/testsuite/gas/ms1/misc.s delete mode 100644 gas/testsuite/gas/ms1/ms1-16-003.d delete mode 100644 gas/testsuite/gas/ms1/ms1-16-003.s delete mode 100644 gas/testsuite/gas/ms1/ms1.exp delete mode 100644 gas/testsuite/gas/ms1/ms2.d delete mode 100644 gas/testsuite/gas/ms1/ms2.s delete mode 100644 gas/testsuite/gas/ms1/msys.d delete mode 100644 gas/testsuite/gas/ms1/msys.s delete mode 100644 gas/testsuite/gas/ms1/relocs.d delete mode 100644 gas/testsuite/gas/ms1/relocs.exp delete mode 100644 gas/testsuite/gas/ms1/relocs1.s delete mode 100644 gas/testsuite/gas/ms1/relocs2.s create mode 100644 gas/testsuite/gas/mt/allinsn.d create mode 100644 gas/testsuite/gas/mt/allinsn.s create mode 100644 gas/testsuite/gas/mt/badinsn.s create mode 100644 gas/testsuite/gas/mt/badinsn1.s create mode 100644 gas/testsuite/gas/mt/badoffsethigh.s create mode 100644 gas/testsuite/gas/mt/badoffsetlow.s create mode 100644 gas/testsuite/gas/mt/badorder.s create mode 100644 gas/testsuite/gas/mt/badreg.s create mode 100644 gas/testsuite/gas/mt/badsignedimmhigh.s create mode 100644 gas/testsuite/gas/mt/badsignedimmlow.s create mode 100644 gas/testsuite/gas/mt/badsyntax.s create mode 100644 gas/testsuite/gas/mt/badsyntax1.s create mode 100644 gas/testsuite/gas/mt/badunsignedimmhigh.s create mode 100644 gas/testsuite/gas/mt/badunsignedimmlow.s create mode 100644 gas/testsuite/gas/mt/errors.exp create mode 100644 gas/testsuite/gas/mt/ldst.s create mode 100644 gas/testsuite/gas/mt/misc.d create mode 100644 gas/testsuite/gas/mt/misc.s create mode 100644 gas/testsuite/gas/mt/ms1-16-003.d create mode 100644 gas/testsuite/gas/mt/ms1-16-003.s create mode 100644 gas/testsuite/gas/mt/ms2.d create mode 100644 gas/testsuite/gas/mt/ms2.s create mode 100644 gas/testsuite/gas/mt/msys.d create mode 100644 gas/testsuite/gas/mt/msys.s create mode 100644 gas/testsuite/gas/mt/mt.exp create mode 100644 gas/testsuite/gas/mt/relocs.d create mode 100644 gas/testsuite/gas/mt/relocs.exp create mode 100644 gas/testsuite/gas/mt/relocs1.s create mode 100644 gas/testsuite/gas/mt/relocs2.s (limited to 'gas') diff --git a/gas/config/tc-ms1.c b/gas/config/tc-ms1.c deleted file mode 100644 index 7e2e685..0000000 --- a/gas/config/tc-ms1.c +++ /dev/null @@ -1,538 +0,0 @@ -/* tc-ms1.c -- Assembler for the Morpho Technologies ms-I. - Copyright (C) 2005 Free Software Foundation. - - 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. */ - -#include -#include "as.h" -#include "dwarf2dbg.h" -#include "subsegs.h" -#include "symcat.h" -#include "opcodes/ms1-desc.h" -#include "opcodes/ms1-opc.h" -#include "cgen.h" -#include "elf/common.h" -#include "elf/ms1.h" -#include "libbfd.h" - -/* Structure to hold all of the different components - describing an individual instruction. */ -typedef struct -{ - const CGEN_INSN * insn; - const CGEN_INSN * orig_insn; - CGEN_FIELDS fields; -#if CGEN_INT_INSN_P - CGEN_INSN_INT buffer [1]; -#define INSN_VALUE(buf) (*(buf)) -#else - unsigned char buffer [CGEN_MAX_INSN_SIZE]; -#define INSN_VALUE(buf) (buf) -#endif - char * addr; - fragS * frag; - int num_fixups; - fixS * fixups [GAS_CGEN_MAX_FIXUPS]; - int indices [MAX_OPERAND_INSTANCES]; -} -ms1_insn; - - -const char comment_chars[] = ";"; -const char line_comment_chars[] = "#"; -const char line_separator_chars[] = ""; -const char EXP_CHARS[] = "eE"; -const char FLT_CHARS[] = "dD"; - -/* The target specific pseudo-ops which we support. */ -const pseudo_typeS md_pseudo_table[] = -{ - { "word", cons, 4 }, - { NULL, NULL, 0 } -}; - - - -static int no_scheduling_restrictions = 0; - -struct option md_longopts[] = -{ -#define OPTION_NO_SCHED_REST (OPTION_MD_BASE) - { "nosched", no_argument, NULL, OPTION_NO_SCHED_REST }, -#define OPTION_MARCH (OPTION_MD_BASE + 1) - { "march", required_argument, NULL, OPTION_MARCH}, - { NULL, no_argument, NULL, 0 }, -}; -size_t md_longopts_size = sizeof (md_longopts); - -const char * md_shortopts = ""; - -/* Mach selected from command line. */ -static int ms1_mach = bfd_mach_ms1; -static unsigned ms1_mach_bitmask = 1 << MACH_MS1; - -/* Flags to set in the elf header */ -static flagword ms1_flags = EF_MS1_CPU_MRISC; - -/* The architecture to use. */ -enum ms1_architectures - { - ms1_64_001, - ms1_16_002, - ms1_16_003, - ms2 - }; - -/* MS1 architecture we are using for this output file. */ -static enum ms1_architectures ms1_arch = ms1_64_001; - -int -md_parse_option (int c ATTRIBUTE_UNUSED, char * arg) -{ - switch (c) - { - case OPTION_MARCH: - if (strcasecmp (arg, "MS1-64-001") == 0) - { - ms1_flags = (ms1_flags & ~EF_MS1_CPU_MASK) | EF_MS1_CPU_MRISC; - ms1_mach = bfd_mach_ms1; - ms1_mach_bitmask = 1 << MACH_MS1; - ms1_arch = ms1_64_001; - } - else if (strcasecmp (arg, "MS1-16-002") == 0) - { - ms1_flags = (ms1_flags & ~EF_MS1_CPU_MASK) | EF_MS1_CPU_MRISC; - ms1_mach = bfd_mach_ms1; - ms1_mach_bitmask = 1 << MACH_MS1; - ms1_arch = ms1_16_002; - } - else if (strcasecmp (arg, "MS1-16-003") == 0) - { - ms1_flags = (ms1_flags & ~EF_MS1_CPU_MASK) | EF_MS1_CPU_MRISC2; - ms1_mach = bfd_mach_mrisc2; - ms1_mach_bitmask = 1 << MACH_MS1_003; - ms1_arch = ms1_16_003; - } - else if (strcasecmp (arg, "MS2") == 0) - { - ms1_flags = (ms1_flags & ~EF_MS1_CPU_MASK) | EF_MS1_CPU_MS2; - ms1_mach = bfd_mach_mrisc2; - ms1_mach_bitmask = 1 << MACH_MS2; - ms1_arch = ms2; - } - case OPTION_NO_SCHED_REST: - no_scheduling_restrictions = 1; - break; - default: - return 0; - } - - return 1; -} - - -void -md_show_usage (FILE * stream) -{ - fprintf (stream, _("MS1 specific command line options:\n")); - fprintf (stream, _(" -march=ms1-64-001 allow ms1-64-001 instructions (default) \n")); - fprintf (stream, _(" -march=ms1-16-002 allow ms1-16-002 instructions \n")); - fprintf (stream, _(" -march=ms1-16-003 allow ms1-16-003 instructions \n")); - fprintf (stream, _(" -march=ms2 allow ms2 instructions \n")); - fprintf (stream, _(" -nosched disable scheduling restrictions \n")); -} - - -void -md_begin (void) -{ - /* Initialize the `cgen' interface. */ - - /* Set the machine number and endian. */ - gas_cgen_cpu_desc = ms1_cgen_cpu_open (CGEN_CPU_OPEN_MACHS, ms1_mach_bitmask, - CGEN_CPU_OPEN_ENDIAN, - CGEN_ENDIAN_BIG, - CGEN_CPU_OPEN_END); - ms1_cgen_init_asm (gas_cgen_cpu_desc); - - /* This is a callback from cgen to gas to parse operands. */ - cgen_set_parse_operand_fn (gas_cgen_cpu_desc, gas_cgen_parse_operand); - - /* Set the ELF flags if desired. */ - if (ms1_flags) - bfd_set_private_flags (stdoutput, ms1_flags); - - /* Set the machine type. */ - bfd_default_set_arch_mach (stdoutput, bfd_arch_ms1, ms1_mach); -} - -void -md_assemble (char * str) -{ - static long delayed_load_register = 0; - static long prev_delayed_load_register = 0; - static int last_insn_had_delay_slot = 0; - static int last_insn_in_noncond_delay_slot = 0; - static int last_insn_has_load_delay = 0; - static int last_insn_was_memory_access = 0; - static int last_insn_was_io_insn = 0; - static int last_insn_was_arithmetic_or_logic = 0; - static int last_insn_was_branch_insn = 0; - static int last_insn_was_conditional_branch_insn = 0; - - ms1_insn insn; - char * errmsg; - - /* Initialize GAS's cgen interface for a new instruction. */ - gas_cgen_init_parse (); - - insn.insn = ms1_cgen_assemble_insn - (gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg); - - if (!insn.insn) - { - as_bad ("%s", errmsg); - return; - } - - /* Doesn't really matter what we pass for RELAX_P here. */ - gas_cgen_finish_insn (insn.insn, insn.buffer, - CGEN_FIELDS_BITSIZE (& insn.fields), 1, NULL); - - - /* Handle Scheduling Restrictions. */ - if (!no_scheduling_restrictions) - { - /* Detect consecutive Memory Accesses. */ - if (last_insn_was_memory_access - && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_MEMORY_ACCESS) - && ms1_mach == ms1_64_001) - as_warn (_("instruction %s may not follow another memory access instruction."), - CGEN_INSN_NAME (insn.insn)); - - /* Detect consecutive I/O Instructions. */ - else if (last_insn_was_io_insn - && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_IO_INSN)) - as_warn (_("instruction %s may not follow another I/O instruction."), - CGEN_INSN_NAME (insn.insn)); - - /* Detect consecutive branch instructions. */ - else if (last_insn_was_branch_insn - && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_BR_INSN)) - as_warn (_("%s may not occupy the delay slot of another branch insn."), - CGEN_INSN_NAME (insn.insn)); - - /* Detect data dependencies on delayed loads: memory and input insns. */ - if (last_insn_has_load_delay && delayed_load_register) - { - if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR1) - && insn.fields.f_sr1 == delayed_load_register) - as_warn (_("operand references R%ld of previous load."), - insn.fields.f_sr1); - - if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2) - && insn.fields.f_sr2 == delayed_load_register) - as_warn (_("operand references R%ld of previous load."), - insn.fields.f_sr2); - } - - /* Detect JAL/RETI hazard */ - if (ms1_mach == ms2 - && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_JAL_HAZARD)) - { - if ((CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR1) - && insn.fields.f_sr1 == delayed_load_register) - || (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2) - && insn.fields.f_sr2 == delayed_load_register)) - as_warn (_("operand references R%ld of previous instrutcion."), - delayed_load_register); - else if ((CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR1) - && insn.fields.f_sr1 == prev_delayed_load_register) - || (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2) - && insn.fields.f_sr2 == prev_delayed_load_register)) - as_warn (_("operand references R%ld of instructcion before previous."), - prev_delayed_load_register); - } - - /* Detect data dependency between conditional branch instruction - and an immediately preceding arithmetic or logical instruction. */ - if (last_insn_was_arithmetic_or_logic - && !last_insn_in_noncond_delay_slot - && (delayed_load_register != 0) - && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_BR_INSN) - && ms1_arch == ms1_64_001) - { - if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR1) - && insn.fields.f_sr1 == delayed_load_register) - as_warn (_("conditional branch or jal insn's operand references R%ld of previous arithmetic or logic insn."), - insn.fields.f_sr1); - - if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2) - && insn.fields.f_sr2 == delayed_load_register) - as_warn (_("conditional branch or jal insn's operand references R%ld of previous arithmetic or logic insn."), - insn.fields.f_sr2); - } - } - - /* Keep track of details of this insn for processing next insn. */ - last_insn_in_noncond_delay_slot = last_insn_was_branch_insn - && !last_insn_was_conditional_branch_insn; - - last_insn_had_delay_slot = - CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_DELAY_SLOT); - - last_insn_has_load_delay = - CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_LOAD_DELAY); - - last_insn_was_memory_access = - CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_MEMORY_ACCESS); - - last_insn_was_io_insn = - CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_IO_INSN); - - last_insn_was_arithmetic_or_logic = - CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_AL_INSN); - - last_insn_was_branch_insn = - CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_BR_INSN); - - last_insn_was_conditional_branch_insn = - CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_BR_INSN) - && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2); - - prev_delayed_load_register = delayed_load_register; - - if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRDR)) - delayed_load_register = insn.fields.f_dr; - else if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRDRRR)) - delayed_load_register = insn.fields.f_drrr; - else /* Insns has no destination register. */ - delayed_load_register = 0; - - /* Generate dwarf2 line numbers. */ - dwarf2_emit_insn (4); -} - -valueT -md_section_align (segT segment, valueT size) -{ - int align = bfd_get_section_alignment (stdoutput, segment); - - return ((size + (1 << align) - 1) & (-1 << align)); -} - -symbolS * -md_undefined_symbol (char * name ATTRIBUTE_UNUSED) -{ - return NULL; -} - -int -md_estimate_size_before_relax (fragS * fragP ATTRIBUTE_UNUSED, - segT segment ATTRIBUTE_UNUSED) -{ - as_fatal (_("md_estimate_size_before_relax\n")); - return 1; -} - -/* *fragP has been relaxed to its final size, and now needs to have - the bytes inside it modified to conform to the new size. - - Called after relaxation is finished. - fragP->fr_type == rs_machine_dependent. - fragP->fr_subtype is the subtype of what the address relaxed to. */ - -void -md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED, - segT sec ATTRIBUTE_UNUSED, - fragS * fragP ATTRIBUTE_UNUSED) -{ -} - - -/* Functions concerning relocs. */ - -long -md_pcrel_from_section (fixS *fixP, segT sec) -{ - if (fixP->fx_addsy != (symbolS *) NULL - && (!S_IS_DEFINED (fixP->fx_addsy) - || S_GET_SEGMENT (fixP->fx_addsy) != sec)) - /* The symbol is undefined (or is defined but not in this section). - Let the linker figure it out. */ - return 0; - - /* Return the address of the opcode - cgen adjusts for opcode size - itself, to be consistent with the disassembler, which must do - so. */ - return fixP->fx_where + fixP->fx_frag->fr_address; -} - - -/* Return the bfd reloc type for OPERAND of INSN at fixup FIXP. - Returns BFD_RELOC_NONE if no reloc type can be found. - *FIXP may be modified if desired. */ - -bfd_reloc_code_real_type -md_cgen_lookup_reloc (const CGEN_INSN * insn ATTRIBUTE_UNUSED, - const CGEN_OPERAND * operand, - fixS * fixP ATTRIBUTE_UNUSED) -{ - bfd_reloc_code_real_type result; - - result = BFD_RELOC_NONE; - - switch (operand->type) - { - case MS1_OPERAND_IMM16O: - result = BFD_RELOC_16_PCREL; - fixP->fx_pcrel = 1; - /* fixP->fx_no_overflow = 1; */ - break; - case MS1_OPERAND_IMM16: - case MS1_OPERAND_IMM16Z: - /* These may have been processed at parse time. */ - if (fixP->fx_cgen.opinfo != 0) - result = fixP->fx_cgen.opinfo; - fixP->fx_no_overflow = 1; - break; - case MS1_OPERAND_LOOPSIZE: - result = BFD_RELOC_MS1_PCINSN8; - fixP->fx_pcrel = 1; - /* Adjust for the delay slot, which is not part of the loop */ - fixP->fx_offset -= 8; - break; - default: - result = BFD_RELOC_NONE; - break; - } - - return result; -} - -/* Write a value out to the object file, using the appropriate endianness. */ - -void -md_number_to_chars (char * buf, valueT val, int n) -{ - number_to_chars_bigendian (buf, val, n); -} - -/* Turn a string in input_line_pointer into a floating point constant of type - type, and store the appropriate bytes in *litP. The number of LITTLENUMS - emitted is stored in *sizeP . An error message is returned, or NULL on OK. */ - -/* Equal to MAX_PRECISION in atof-ieee.c. */ -#define MAX_LITTLENUMS 6 - -char * -md_atof (type, litP, sizeP) - char type; - char * litP; - int * sizeP; -{ - int prec; - LITTLENUM_TYPE words [MAX_LITTLENUMS]; - LITTLENUM_TYPE * wordP; - char * t; - - switch (type) - { - case 'f': - case 'F': - case 's': - case 'S': - prec = 2; - break; - - case 'd': - case 'D': - case 'r': - case 'R': - prec = 4; - break; - - /* FIXME: Some targets allow other format chars for bigger sizes here. */ - - default: - * sizeP = 0; - return _("Bad call to md_atof()"); - } - - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - * sizeP = prec * sizeof (LITTLENUM_TYPE); - - /* This loops outputs the LITTLENUMs in REVERSE order; - in accord with the ms1 endianness. */ - for (wordP = words; prec--;) - { - md_number_to_chars (litP, (valueT) (*wordP++), sizeof (LITTLENUM_TYPE)); - litP += sizeof (LITTLENUM_TYPE); - } - - return 0; -} - -/* See whether we need to force a relocation into the output file. */ - -int -ms1_force_relocation (fixS * fixp ATTRIBUTE_UNUSED) -{ - return 0; -} - -void -ms1_apply_fix (fixS *fixP, valueT *valueP, segT seg) -{ - if ((fixP->fx_pcrel != 0) && (fixP->fx_r_type == BFD_RELOC_32)) - fixP->fx_r_type = BFD_RELOC_32_PCREL; - - gas_cgen_md_apply_fix (fixP, valueP, seg); -} - -bfd_boolean -ms1_fix_adjustable (fixS * fixP) -{ - bfd_reloc_code_real_type reloc_type; - - if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED) - { - const CGEN_INSN *insn = NULL; - int opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED; - const CGEN_OPERAND *operand; - - operand = cgen_operand_lookup_by_num(gas_cgen_cpu_desc, opindex); - reloc_type = md_cgen_lookup_reloc (insn, operand, fixP); - } - else - reloc_type = fixP->fx_r_type; - - if (fixP->fx_addsy == NULL) - return TRUE; - - /* Prevent all adjustments to global symbols. */ - if (S_IS_EXTERNAL (fixP->fx_addsy)) - return FALSE; - - if (S_IS_WEAK (fixP->fx_addsy)) - return FALSE; - - return 1; -} diff --git a/gas/config/tc-ms1.h b/gas/config/tc-ms1.h deleted file mode 100644 index ebf9533..0000000 --- a/gas/config/tc-ms1.h +++ /dev/null @@ -1,70 +0,0 @@ -/* tc-ms1.h -- Header file for tc-ms1.c. - Copyright (C) 2005 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_MS1 - -#define LISTING_HEADER "MS1 GAS " - -/* The target BFD architecture. */ -#define TARGET_ARCH bfd_arch_ms1 - -#define TARGET_FORMAT "elf32-ms1" - -#define TARGET_BYTES_BIG_ENDIAN 1 - -/* Permit temporary numeric labels. */ -#define LOCAL_LABELS_FB 1 - -/* .-foo gets turned into PC relative relocs. */ -#define DIFF_EXPR_OK - -/* We don't need to handle .word strangely. */ -#define WORKING_DOT_WORD - -/* All ms1 instructions are multiples of 32 bits. */ -#define DWARF2_LINE_MIN_INSN_LENGTH 4 - -#define LITERAL_PREFIXDOLLAR_HEX -#define LITERAL_PREFIXPERCENT_BIN - -#define md_apply_fix ms1_apply_fix -extern void ms1_apply_fix (struct fix *, valueT *, segT); - -/* Call md_pcrel_from_section(), not md_pcrel_from(). */ -#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC) -extern long md_pcrel_from_section (struct fix *, segT); - -#define obj_fix_adjustable(fixP) iq2000_fix_adjustable (fixP) -extern bfd_boolean ms1_fix_adjustable (struct fix *); - -/* Values passed to md_apply_fix don't include the symbol value. */ -#define MD_APPLY_SYM_VALUE(FIX) 0 - -#define tc_gen_reloc gas_cgen_tc_gen_reloc - -#define md_operand(x) gas_cgen_md_operand (x) -extern void gas_cgen_md_operand (expressionS *); - -#define TC_FORCE_RELOCATION(fixp) ms1_force_relocation (fixp) -extern int ms1_force_relocation (struct fix *); - -#define tc_fix_adjustable(fixP) ms1_fix_adjustable (fixP) -extern bfd_boolean ms1_fix_adjustable (struct fix *); - diff --git a/gas/config/tc-mt.c b/gas/config/tc-mt.c new file mode 100644 index 0000000..7e2e685 --- /dev/null +++ b/gas/config/tc-mt.c @@ -0,0 +1,538 @@ +/* tc-ms1.c -- Assembler for the Morpho Technologies ms-I. + Copyright (C) 2005 Free Software Foundation. + + 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. */ + +#include +#include "as.h" +#include "dwarf2dbg.h" +#include "subsegs.h" +#include "symcat.h" +#include "opcodes/ms1-desc.h" +#include "opcodes/ms1-opc.h" +#include "cgen.h" +#include "elf/common.h" +#include "elf/ms1.h" +#include "libbfd.h" + +/* Structure to hold all of the different components + describing an individual instruction. */ +typedef struct +{ + const CGEN_INSN * insn; + const CGEN_INSN * orig_insn; + CGEN_FIELDS fields; +#if CGEN_INT_INSN_P + CGEN_INSN_INT buffer [1]; +#define INSN_VALUE(buf) (*(buf)) +#else + unsigned char buffer [CGEN_MAX_INSN_SIZE]; +#define INSN_VALUE(buf) (buf) +#endif + char * addr; + fragS * frag; + int num_fixups; + fixS * fixups [GAS_CGEN_MAX_FIXUPS]; + int indices [MAX_OPERAND_INSTANCES]; +} +ms1_insn; + + +const char comment_chars[] = ";"; +const char line_comment_chars[] = "#"; +const char line_separator_chars[] = ""; +const char EXP_CHARS[] = "eE"; +const char FLT_CHARS[] = "dD"; + +/* The target specific pseudo-ops which we support. */ +const pseudo_typeS md_pseudo_table[] = +{ + { "word", cons, 4 }, + { NULL, NULL, 0 } +}; + + + +static int no_scheduling_restrictions = 0; + +struct option md_longopts[] = +{ +#define OPTION_NO_SCHED_REST (OPTION_MD_BASE) + { "nosched", no_argument, NULL, OPTION_NO_SCHED_REST }, +#define OPTION_MARCH (OPTION_MD_BASE + 1) + { "march", required_argument, NULL, OPTION_MARCH}, + { NULL, no_argument, NULL, 0 }, +}; +size_t md_longopts_size = sizeof (md_longopts); + +const char * md_shortopts = ""; + +/* Mach selected from command line. */ +static int ms1_mach = bfd_mach_ms1; +static unsigned ms1_mach_bitmask = 1 << MACH_MS1; + +/* Flags to set in the elf header */ +static flagword ms1_flags = EF_MS1_CPU_MRISC; + +/* The architecture to use. */ +enum ms1_architectures + { + ms1_64_001, + ms1_16_002, + ms1_16_003, + ms2 + }; + +/* MS1 architecture we are using for this output file. */ +static enum ms1_architectures ms1_arch = ms1_64_001; + +int +md_parse_option (int c ATTRIBUTE_UNUSED, char * arg) +{ + switch (c) + { + case OPTION_MARCH: + if (strcasecmp (arg, "MS1-64-001") == 0) + { + ms1_flags = (ms1_flags & ~EF_MS1_CPU_MASK) | EF_MS1_CPU_MRISC; + ms1_mach = bfd_mach_ms1; + ms1_mach_bitmask = 1 << MACH_MS1; + ms1_arch = ms1_64_001; + } + else if (strcasecmp (arg, "MS1-16-002") == 0) + { + ms1_flags = (ms1_flags & ~EF_MS1_CPU_MASK) | EF_MS1_CPU_MRISC; + ms1_mach = bfd_mach_ms1; + ms1_mach_bitmask = 1 << MACH_MS1; + ms1_arch = ms1_16_002; + } + else if (strcasecmp (arg, "MS1-16-003") == 0) + { + ms1_flags = (ms1_flags & ~EF_MS1_CPU_MASK) | EF_MS1_CPU_MRISC2; + ms1_mach = bfd_mach_mrisc2; + ms1_mach_bitmask = 1 << MACH_MS1_003; + ms1_arch = ms1_16_003; + } + else if (strcasecmp (arg, "MS2") == 0) + { + ms1_flags = (ms1_flags & ~EF_MS1_CPU_MASK) | EF_MS1_CPU_MS2; + ms1_mach = bfd_mach_mrisc2; + ms1_mach_bitmask = 1 << MACH_MS2; + ms1_arch = ms2; + } + case OPTION_NO_SCHED_REST: + no_scheduling_restrictions = 1; + break; + default: + return 0; + } + + return 1; +} + + +void +md_show_usage (FILE * stream) +{ + fprintf (stream, _("MS1 specific command line options:\n")); + fprintf (stream, _(" -march=ms1-64-001 allow ms1-64-001 instructions (default) \n")); + fprintf (stream, _(" -march=ms1-16-002 allow ms1-16-002 instructions \n")); + fprintf (stream, _(" -march=ms1-16-003 allow ms1-16-003 instructions \n")); + fprintf (stream, _(" -march=ms2 allow ms2 instructions \n")); + fprintf (stream, _(" -nosched disable scheduling restrictions \n")); +} + + +void +md_begin (void) +{ + /* Initialize the `cgen' interface. */ + + /* Set the machine number and endian. */ + gas_cgen_cpu_desc = ms1_cgen_cpu_open (CGEN_CPU_OPEN_MACHS, ms1_mach_bitmask, + CGEN_CPU_OPEN_ENDIAN, + CGEN_ENDIAN_BIG, + CGEN_CPU_OPEN_END); + ms1_cgen_init_asm (gas_cgen_cpu_desc); + + /* This is a callback from cgen to gas to parse operands. */ + cgen_set_parse_operand_fn (gas_cgen_cpu_desc, gas_cgen_parse_operand); + + /* Set the ELF flags if desired. */ + if (ms1_flags) + bfd_set_private_flags (stdoutput, ms1_flags); + + /* Set the machine type. */ + bfd_default_set_arch_mach (stdoutput, bfd_arch_ms1, ms1_mach); +} + +void +md_assemble (char * str) +{ + static long delayed_load_register = 0; + static long prev_delayed_load_register = 0; + static int last_insn_had_delay_slot = 0; + static int last_insn_in_noncond_delay_slot = 0; + static int last_insn_has_load_delay = 0; + static int last_insn_was_memory_access = 0; + static int last_insn_was_io_insn = 0; + static int last_insn_was_arithmetic_or_logic = 0; + static int last_insn_was_branch_insn = 0; + static int last_insn_was_conditional_branch_insn = 0; + + ms1_insn insn; + char * errmsg; + + /* Initialize GAS's cgen interface for a new instruction. */ + gas_cgen_init_parse (); + + insn.insn = ms1_cgen_assemble_insn + (gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg); + + if (!insn.insn) + { + as_bad ("%s", errmsg); + return; + } + + /* Doesn't really matter what we pass for RELAX_P here. */ + gas_cgen_finish_insn (insn.insn, insn.buffer, + CGEN_FIELDS_BITSIZE (& insn.fields), 1, NULL); + + + /* Handle Scheduling Restrictions. */ + if (!no_scheduling_restrictions) + { + /* Detect consecutive Memory Accesses. */ + if (last_insn_was_memory_access + && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_MEMORY_ACCESS) + && ms1_mach == ms1_64_001) + as_warn (_("instruction %s may not follow another memory access instruction."), + CGEN_INSN_NAME (insn.insn)); + + /* Detect consecutive I/O Instructions. */ + else if (last_insn_was_io_insn + && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_IO_INSN)) + as_warn (_("instruction %s may not follow another I/O instruction."), + CGEN_INSN_NAME (insn.insn)); + + /* Detect consecutive branch instructions. */ + else if (last_insn_was_branch_insn + && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_BR_INSN)) + as_warn (_("%s may not occupy the delay slot of another branch insn."), + CGEN_INSN_NAME (insn.insn)); + + /* Detect data dependencies on delayed loads: memory and input insns. */ + if (last_insn_has_load_delay && delayed_load_register) + { + if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR1) + && insn.fields.f_sr1 == delayed_load_register) + as_warn (_("operand references R%ld of previous load."), + insn.fields.f_sr1); + + if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2) + && insn.fields.f_sr2 == delayed_load_register) + as_warn (_("operand references R%ld of previous load."), + insn.fields.f_sr2); + } + + /* Detect JAL/RETI hazard */ + if (ms1_mach == ms2 + && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_JAL_HAZARD)) + { + if ((CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR1) + && insn.fields.f_sr1 == delayed_load_register) + || (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2) + && insn.fields.f_sr2 == delayed_load_register)) + as_warn (_("operand references R%ld of previous instrutcion."), + delayed_load_register); + else if ((CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR1) + && insn.fields.f_sr1 == prev_delayed_load_register) + || (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2) + && insn.fields.f_sr2 == prev_delayed_load_register)) + as_warn (_("operand references R%ld of instructcion before previous."), + prev_delayed_load_register); + } + + /* Detect data dependency between conditional branch instruction + and an immediately preceding arithmetic or logical instruction. */ + if (last_insn_was_arithmetic_or_logic + && !last_insn_in_noncond_delay_slot + && (delayed_load_register != 0) + && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_BR_INSN) + && ms1_arch == ms1_64_001) + { + if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR1) + && insn.fields.f_sr1 == delayed_load_register) + as_warn (_("conditional branch or jal insn's operand references R%ld of previous arithmetic or logic insn."), + insn.fields.f_sr1); + + if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2) + && insn.fields.f_sr2 == delayed_load_register) + as_warn (_("conditional branch or jal insn's operand references R%ld of previous arithmetic or logic insn."), + insn.fields.f_sr2); + } + } + + /* Keep track of details of this insn for processing next insn. */ + last_insn_in_noncond_delay_slot = last_insn_was_branch_insn + && !last_insn_was_conditional_branch_insn; + + last_insn_had_delay_slot = + CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_DELAY_SLOT); + + last_insn_has_load_delay = + CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_LOAD_DELAY); + + last_insn_was_memory_access = + CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_MEMORY_ACCESS); + + last_insn_was_io_insn = + CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_IO_INSN); + + last_insn_was_arithmetic_or_logic = + CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_AL_INSN); + + last_insn_was_branch_insn = + CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_BR_INSN); + + last_insn_was_conditional_branch_insn = + CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_BR_INSN) + && CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRSR2); + + prev_delayed_load_register = delayed_load_register; + + if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRDR)) + delayed_load_register = insn.fields.f_dr; + else if (CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_USES_FRDRRR)) + delayed_load_register = insn.fields.f_drrr; + else /* Insns has no destination register. */ + delayed_load_register = 0; + + /* Generate dwarf2 line numbers. */ + dwarf2_emit_insn (4); +} + +valueT +md_section_align (segT segment, valueT size) +{ + int align = bfd_get_section_alignment (stdoutput, segment); + + return ((size + (1 << align) - 1) & (-1 << align)); +} + +symbolS * +md_undefined_symbol (char * name ATTRIBUTE_UNUSED) +{ + return NULL; +} + +int +md_estimate_size_before_relax (fragS * fragP ATTRIBUTE_UNUSED, + segT segment ATTRIBUTE_UNUSED) +{ + as_fatal (_("md_estimate_size_before_relax\n")); + return 1; +} + +/* *fragP has been relaxed to its final size, and now needs to have + the bytes inside it modified to conform to the new size. + + Called after relaxation is finished. + fragP->fr_type == rs_machine_dependent. + fragP->fr_subtype is the subtype of what the address relaxed to. */ + +void +md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED, + segT sec ATTRIBUTE_UNUSED, + fragS * fragP ATTRIBUTE_UNUSED) +{ +} + + +/* Functions concerning relocs. */ + +long +md_pcrel_from_section (fixS *fixP, segT sec) +{ + if (fixP->fx_addsy != (symbolS *) NULL + && (!S_IS_DEFINED (fixP->fx_addsy) + || S_GET_SEGMENT (fixP->fx_addsy) != sec)) + /* The symbol is undefined (or is defined but not in this section). + Let the linker figure it out. */ + return 0; + + /* Return the address of the opcode - cgen adjusts for opcode size + itself, to be consistent with the disassembler, which must do + so. */ + return fixP->fx_where + fixP->fx_frag->fr_address; +} + + +/* Return the bfd reloc type for OPERAND of INSN at fixup FIXP. + Returns BFD_RELOC_NONE if no reloc type can be found. + *FIXP may be modified if desired. */ + +bfd_reloc_code_real_type +md_cgen_lookup_reloc (const CGEN_INSN * insn ATTRIBUTE_UNUSED, + const CGEN_OPERAND * operand, + fixS * fixP ATTRIBUTE_UNUSED) +{ + bfd_reloc_code_real_type result; + + result = BFD_RELOC_NONE; + + switch (operand->type) + { + case MS1_OPERAND_IMM16O: + result = BFD_RELOC_16_PCREL; + fixP->fx_pcrel = 1; + /* fixP->fx_no_overflow = 1; */ + break; + case MS1_OPERAND_IMM16: + case MS1_OPERAND_IMM16Z: + /* These may have been processed at parse time. */ + if (fixP->fx_cgen.opinfo != 0) + result = fixP->fx_cgen.opinfo; + fixP->fx_no_overflow = 1; + break; + case MS1_OPERAND_LOOPSIZE: + result = BFD_RELOC_MS1_PCINSN8; + fixP->fx_pcrel = 1; + /* Adjust for the delay slot, which is not part of the loop */ + fixP->fx_offset -= 8; + break; + default: + result = BFD_RELOC_NONE; + break; + } + + return result; +} + +/* Write a value out to the object file, using the appropriate endianness. */ + +void +md_number_to_chars (char * buf, valueT val, int n) +{ + number_to_chars_bigendian (buf, val, n); +} + +/* Turn a string in input_line_pointer into a floating point constant of type + type, and store the appropriate bytes in *litP. The number of LITTLENUMS + emitted is stored in *sizeP . An error message is returned, or NULL on OK. */ + +/* Equal to MAX_PRECISION in atof-ieee.c. */ +#define MAX_LITTLENUMS 6 + +char * +md_atof (type, litP, sizeP) + char type; + char * litP; + int * sizeP; +{ + int prec; + LITTLENUM_TYPE words [MAX_LITTLENUMS]; + LITTLENUM_TYPE * wordP; + char * t; + + switch (type) + { + case 'f': + case 'F': + case 's': + case 'S': + prec = 2; + break; + + case 'd': + case 'D': + case 'r': + case 'R': + prec = 4; + break; + + /* FIXME: Some targets allow other format chars for bigger sizes here. */ + + default: + * sizeP = 0; + return _("Bad call to md_atof()"); + } + + t = atof_ieee (input_line_pointer, type, words); + if (t) + input_line_pointer = t; + * sizeP = prec * sizeof (LITTLENUM_TYPE); + + /* This loops outputs the LITTLENUMs in REVERSE order; + in accord with the ms1 endianness. */ + for (wordP = words; prec--;) + { + md_number_to_chars (litP, (valueT) (*wordP++), sizeof (LITTLENUM_TYPE)); + litP += sizeof (LITTLENUM_TYPE); + } + + return 0; +} + +/* See whether we need to force a relocation into the output file. */ + +int +ms1_force_relocation (fixS * fixp ATTRIBUTE_UNUSED) +{ + return 0; +} + +void +ms1_apply_fix (fixS *fixP, valueT *valueP, segT seg) +{ + if ((fixP->fx_pcrel != 0) && (fixP->fx_r_type == BFD_RELOC_32)) + fixP->fx_r_type = BFD_RELOC_32_PCREL; + + gas_cgen_md_apply_fix (fixP, valueP, seg); +} + +bfd_boolean +ms1_fix_adjustable (fixS * fixP) +{ + bfd_reloc_code_real_type reloc_type; + + if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED) + { + const CGEN_INSN *insn = NULL; + int opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED; + const CGEN_OPERAND *operand; + + operand = cgen_operand_lookup_by_num(gas_cgen_cpu_desc, opindex); + reloc_type = md_cgen_lookup_reloc (insn, operand, fixP); + } + else + reloc_type = fixP->fx_r_type; + + if (fixP->fx_addsy == NULL) + return TRUE; + + /* Prevent all adjustments to global symbols. */ + if (S_IS_EXTERNAL (fixP->fx_addsy)) + return FALSE; + + if (S_IS_WEAK (fixP->fx_addsy)) + return FALSE; + + return 1; +} diff --git a/gas/config/tc-mt.h b/gas/config/tc-mt.h new file mode 100644 index 0000000..ebf9533 --- /dev/null +++ b/gas/config/tc-mt.h @@ -0,0 +1,70 @@ +/* tc-ms1.h -- Header file for tc-ms1.c. + Copyright (C) 2005 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_MS1 + +#define LISTING_HEADER "MS1 GAS " + +/* The target BFD architecture. */ +#define TARGET_ARCH bfd_arch_ms1 + +#define TARGET_FORMAT "elf32-ms1" + +#define TARGET_BYTES_BIG_ENDIAN 1 + +/* Permit temporary numeric labels. */ +#define LOCAL_LABELS_FB 1 + +/* .-foo gets turned into PC relative relocs. */ +#define DIFF_EXPR_OK + +/* We don't need to handle .word strangely. */ +#define WORKING_DOT_WORD + +/* All ms1 instructions are multiples of 32 bits. */ +#define DWARF2_LINE_MIN_INSN_LENGTH 4 + +#define LITERAL_PREFIXDOLLAR_HEX +#define LITERAL_PREFIXPERCENT_BIN + +#define md_apply_fix ms1_apply_fix +extern void ms1_apply_fix (struct fix *, valueT *, segT); + +/* Call md_pcrel_from_section(), not md_pcrel_from(). */ +#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC) +extern long md_pcrel_from_section (struct fix *, segT); + +#define obj_fix_adjustable(fixP) iq2000_fix_adjustable (fixP) +extern bfd_boolean ms1_fix_adjustable (struct fix *); + +/* Values passed to md_apply_fix don't include the symbol value. */ +#define MD_APPLY_SYM_VALUE(FIX) 0 + +#define tc_gen_reloc gas_cgen_tc_gen_reloc + +#define md_operand(x) gas_cgen_md_operand (x) +extern void gas_cgen_md_operand (expressionS *); + +#define TC_FORCE_RELOCATION(fixp) ms1_force_relocation (fixp) +extern int ms1_force_relocation (struct fix *); + +#define tc_fix_adjustable(fixP) ms1_fix_adjustable (fixP) +extern bfd_boolean ms1_fix_adjustable (struct fix *); + diff --git a/gas/doc/c-ms1.texi b/gas/doc/c-ms1.texi deleted file mode 100644 index 854d411..0000000 --- a/gas/doc/c-ms1.texi +++ /dev/null @@ -1,44 +0,0 @@ -@c Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -@c Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. - -@ifset GENERIC -@page -@node MS1-Dependent -@chapter MS1 Dependent Features -@end ifset - -@ifclear GENERIC -@node Machine Dependencies -@chapter MS1 Dependent Features -@end ifclear - -@cindex MS1 support -@menu -* MS1 Options:: Options -@end menu - -@node MS1 Options -@section Options -@cindex MS1 options (none) -@cindex options for MS1 (none) - -@table @code - -@cindex @code{-march=} command line option, MS1 -@item -march=@var{processor} -This option specifies the target processor. The assembler will issue an -error message if an attempt is made to assemble an instruction which -will not execute on the target processor. The following processor names are -recognized: -@code{ms1-64-001}, -@code{ms1-16-002}, -@code{ms1-16-003}, -and @code{ms2}. - -@cindex @code{-nosched} command line option, MS1 -@item -nosched -This option disables scheduling restriction checking. - -@end table diff --git a/gas/doc/c-mt.texi b/gas/doc/c-mt.texi new file mode 100644 index 0000000..854d411 --- /dev/null +++ b/gas/doc/c-mt.texi @@ -0,0 +1,44 @@ +@c Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +@c Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. + +@ifset GENERIC +@page +@node MS1-Dependent +@chapter MS1 Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter MS1 Dependent Features +@end ifclear + +@cindex MS1 support +@menu +* MS1 Options:: Options +@end menu + +@node MS1 Options +@section Options +@cindex MS1 options (none) +@cindex options for MS1 (none) + +@table @code + +@cindex @code{-march=} command line option, MS1 +@item -march=@var{processor} +This option specifies the target processor. The assembler will issue an +error message if an attempt is made to assemble an instruction which +will not execute on the target processor. The following processor names are +recognized: +@code{ms1-64-001}, +@code{ms1-16-002}, +@code{ms1-16-003}, +and @code{ms2}. + +@cindex @code{-nosched} command line option, MS1 +@item -nosched +This option disables scheduling restriction checking. + +@end table diff --git a/gas/testsuite/gas/ms1/allinsn.d b/gas/testsuite/gas/ms1/allinsn.d deleted file mode 100644 index 03db93d..0000000 --- a/gas/testsuite/gas/ms1/allinsn.d +++ /dev/null @@ -1,130 +0,0 @@ -#as: -nosched -#objdump: -dr -#name: allinsn - -.*: +file format .* - -Disassembly of section .text: - -00000000 : - 0: 00 00 00 00 add R0,R0,R0 - -00000004 : - 4: 02 00 00 00 addu R0,R0,R0 - -00000008 : - 8: 01 00 00 00 addi R0,R0,#\$0 - -0000000c : - c: 03 00 00 00 addui R0,R0,#\$0 - -00000010 : - 10: 04 00 00 00 sub R0,R0,R0 - -00000014 : - 14: 06 00 00 00 subu R0,R0,R0 - -00000018 : - 18: 05 00 00 00 subi R0,R0,#\$0 - -0000001c : - 1c: 07 00 00 00 subui R0,R0,#\$0 - -00000020 : - 20: 10 00 00 00 and R0,R0,R0 - -00000024 : - 24: 11 00 00 00 andi R0,R0,#\$0 - -00000028 : - 28: 12 01 00 00 or R0,R0,R1 - -0000002c : - 2c: 13 00 00 00 ori R0,R0,#\$0 - -00000030 : - 30: 14 00 00 00 xor R0,R0,R0 - -00000034 : - 34: 15 00 00 00 xori R0,R0,#\$0 - -00000038 : - 38: 16 00 00 00 nand R0,R0,R0 - -0000003c : - 3c: 17 00 00 00 nandi R0,R0,#\$0 - -00000040 : - 40: 18 00 00 00 nor R0,R0,R0 - -00000044 : - 44: 19 00 00 00 nori R0,R0,#\$0 - -00000048 : - 48: 1a 00 00 00 xnor R0,R0,R0 - -0000004c : - 4c: 1b 00 00 00 xnori R0,R0,#\$0 - -00000050 : - 50: 1d 00 00 00 ldui R0,#\$0 - -00000054 : - 54: 20 00 00 00 lsl R0,R0,R0 - -00000058 : - 58: 21 00 00 00 lsli R0,R0,#\$0 - -0000005c : - 5c: 22 00 00 00 lsr R0,R0,R0 - -00000060 : - 60: 23 00 00 00 lsri R0,R0,#\$0 - -00000064 : - 64: 24 00 00 00 asr R0,R0,R0 - -00000068 : - 68: 25 00 00 00 asri R0,R0,#\$0 - -0000006c : - 6c: 31 00 00 00 brlt R0,R0,6c - -00000070 : - 70: 33 00 00 00 brle R0,R0,70 - -00000074 : - 74: 35 00 00 00 breq R0,R0,74 - -00000078 : - 78: 37 00 00 00 jmp 78 - -0000007c : - 7c: 38 00 00 00 jal R0,R0 - -00000080 : - 80: 60 00 00 00 ei - -00000084 : - 84: 62 00 00 00 di - -00000088 : - 88: 66 00 00 00 reti R0 - -0000008c : - 8c: 41 00 00 00 ldw R0,R0,#\$0 - -00000090 : - 90: 43 00 00 00 stw R0,R0,#\$0 - -00000094 : - 94: 64 00 00 00 si R0 - -00000098 : - 98: 3b 00 00 00 brne R0,R0,98 - -0000009c : - 9c: 68 00 00 00 break - -000000a0 : - a0: 12 00 00 00 nop diff --git a/gas/testsuite/gas/ms1/allinsn.s b/gas/testsuite/gas/ms1/allinsn.s deleted file mode 100644 index 8d9050e..0000000 --- a/gas/testsuite/gas/ms1/allinsn.s +++ /dev/null @@ -1,166 +0,0 @@ - .data -foodata: .word 42 - .text -footext: - .text - .global add -add: - add R0,R0,R0 - .text - .global addu -addu: - addu R0,R0,R0 - .text - .global addi -addi: - addi R0,R0,#0 - .text - .global addui -addui: - addui R0,R0,#0 - .text - .global sub -sub: - sub R0,R0,R0 - .text - .global subu -subu: - subu R0,R0,R0 - .text - .global subi -subi: - subi R0,R0,#0 - .text - .global subui -subui: - subui R0,R0,#0 - .text - .global and -and: - and R0,R0,R0 - .text - .global andi -andi: - andi R0,R0,#0 - .text - .global or -or: - or R0,R0,R1 - .text - .global ori -ori: - ori R0,R0,#0 - .text - .global xor -xor: - xor R0,R0,R0 - .text - .global xori -xori: - xori R0,R0,#0 - .text - .global nand -nand: - nand R0,R0,R0 - .text - .global nandi -nandi: - nandi R0,R0,#0 - .text - .global nor -nor: - nor R0,R0,R0 - .text - .global nori -nori: - nori R0,R0,#0 - .text - .global xnor -xnor: - xnor R0,R0,R0 - .text - .global xnori -xnori: - xnori R0,R0,#0 - .text - .global ldui -ldui: - ldui R0,#0 - .text - .global lsl -lsl: - lsl R0,R0,R0 - .text - .global lsli -lsli: - lsli R0,R0,#0 - .text - .global lsr -lsr: - lsr R0,R0,R0 - .text - .global lsri -lsri: - lsri R0,R0,#0 - .text - .global asr -asr: - asr R0,R0,R0 - .text - .global asri -asri: - asri R0,R0,#0 - .text - .global brlt -brlt: - brlt R0,R0,0 - .text - .global brle -brle: - brle R0,R0,0 - .text - .global breq -breq: - breq R0,R0,0 - .text - .global jmp -jmp: - jmp 0 - .text - .global jal -jal: - jal R0,R0 - .text - .global ei -ei: - ei - .text - .global di -di: - di - .text - .global reti -reti: - reti R0 - .text - .global ldw -ldw: - ldw R0,R0,#0 - .text - .global stw -stw: - stw R0,R0,#0 - .text - .global si -si: - si R0 - .global brne -brne: - brne R0,R0,0 - .global break -break: - break - .text - .global nop -nop: - nop diff --git a/gas/testsuite/gas/ms1/badinsn.s b/gas/testsuite/gas/ms1/badinsn.s deleted file mode 100644 index 7c817fe..0000000 --- a/gas/testsuite/gas/ms1/badinsn.s +++ /dev/null @@ -1,3 +0,0 @@ -; Bogus instruction mnemonic should generate an error. - -addcrap R1,R2,R3 diff --git a/gas/testsuite/gas/ms1/badinsn1.s b/gas/testsuite/gas/ms1/badinsn1.s deleted file mode 100644 index 32f487d..0000000 --- a/gas/testsuite/gas/ms1/badinsn1.s +++ /dev/null @@ -1,3 +0,0 @@ -; Extra operand should generate and error message. - -add R1,R2,R3,R4 diff --git a/gas/testsuite/gas/ms1/badoffsethigh.s b/gas/testsuite/gas/ms1/badoffsethigh.s deleted file mode 100644 index eb293a7..0000000 --- a/gas/testsuite/gas/ms1/badoffsethigh.s +++ /dev/null @@ -1,4 +0,0 @@ -; Offset greater than #32767 should cause an error since the offset is -; a signed quantity. - -brlt R1,R2,$32768 diff --git a/gas/testsuite/gas/ms1/badoffsetlow.s b/gas/testsuite/gas/ms1/badoffsetlow.s deleted file mode 100644 index 1cbfb91..0000000 --- a/gas/testsuite/gas/ms1/badoffsetlow.s +++ /dev/null @@ -1,6 +0,0 @@ -; Offset less than #-32786 should cause an error since the offset is -; a signed quantity. Also tests expression parsing. - -label1: add R1,R2,R3 -label2: add R4,R5,R6 - brlt R7,R8, ((label1-label2)-32765) ; evaluates to -32769 diff --git a/gas/testsuite/gas/ms1/badorder.s b/gas/testsuite/gas/ms1/badorder.s deleted file mode 100644 index 901f31e..0000000 --- a/gas/testsuite/gas/ms1/badorder.s +++ /dev/null @@ -1,3 +0,0 @@ -; Good operands in the wrong order should generate an error. - -addui R1, #32 R2 diff --git a/gas/testsuite/gas/ms1/badreg.s b/gas/testsuite/gas/ms1/badreg.s deleted file mode 100644 index 4bec7f4..0000000 --- a/gas/testsuite/gas/ms1/badreg.s +++ /dev/null @@ -1,3 +0,0 @@ -; Bad register name should generate an error. - -add R16,R10,R9 diff --git a/gas/testsuite/gas/ms1/badsignedimmhigh.s b/gas/testsuite/gas/ms1/badsignedimmhigh.s deleted file mode 100644 index 802c34d..0000000 --- a/gas/testsuite/gas/ms1/badsignedimmhigh.s +++ /dev/null @@ -1,3 +0,0 @@ -; Offset greater than #32767 should cause an error. - -addi R1,R2,#32768 diff --git a/gas/testsuite/gas/ms1/badsignedimmlow.s b/gas/testsuite/gas/ms1/badsignedimmlow.s deleted file mode 100644 index 46a6298..0000000 --- a/gas/testsuite/gas/ms1/badsignedimmlow.s +++ /dev/null @@ -1,3 +0,0 @@ -; Immediate lower than #-32769 should cause an error. - -addi R1,R2,#-32769 diff --git a/gas/testsuite/gas/ms1/badsyntax.s b/gas/testsuite/gas/ms1/badsyntax.s deleted file mode 100644 index 9c8e501..0000000 --- a/gas/testsuite/gas/ms1/badsyntax.s +++ /dev/null @@ -1,3 +0,0 @@ -; Good mnemonic with wrong operands should generate an error. - -add R1,R2,#0 diff --git a/gas/testsuite/gas/ms1/badsyntax1.s b/gas/testsuite/gas/ms1/badsyntax1.s deleted file mode 100644 index 64fd6a5..0000000 --- a/gas/testsuite/gas/ms1/badsyntax1.s +++ /dev/null @@ -1,3 +0,0 @@ -; Good mnemonic with too few operands should generate an error. - -add R1,R2 diff --git a/gas/testsuite/gas/ms1/badunsignedimmhigh.s b/gas/testsuite/gas/ms1/badunsignedimmhigh.s deleted file mode 100644 index 1f0200f..0000000 --- a/gas/testsuite/gas/ms1/badunsignedimmhigh.s +++ /dev/null @@ -1,3 +0,0 @@ -; Offset greater than #$FFFF should cause an error. - -andi R1,R2,#$10000 diff --git a/gas/testsuite/gas/ms1/badunsignedimmlow.s b/gas/testsuite/gas/ms1/badunsignedimmlow.s deleted file mode 100644 index 8df8215..0000000 --- a/gas/testsuite/gas/ms1/badunsignedimmlow.s +++ /dev/null @@ -1,3 +0,0 @@ -; Offset less than #0 should cause an error. - -andi R1,R2,#-1 diff --git a/gas/testsuite/gas/ms1/errors.exp b/gas/testsuite/gas/ms1/errors.exp deleted file mode 100644 index dd47d43..0000000 --- a/gas/testsuite/gas/ms1/errors.exp +++ /dev/null @@ -1,79 +0,0 @@ -# Test for error messages when a bad register name, an out of range operand, or -# invalid syntax is used. Adapted from Ben Elliston's load-hazard testcase. - -# Run GAS and check that it emits the desired error for the test case. -# Arguments: -# file -- name of the test case to assemble. -# testname -- a string describing the test. -# warnpattern -- a regular expression, suitable for use by the Tcl -# regexp command, to decide if the warning string was emitted by -# the assembler to stderr. - -proc mrisc1_error_test { file testname {warnpattern ""} } { - global comp_output - - gas_run $file "" ">/dev/null" - verbose "output was $comp_output" 2 - - if {$warnpattern == ""} { - if {$comp_output == ""} { pass $testname } else { fail $testname } - return - } - - if {[regexp "Error: $warnpattern" $comp_output]} { - pass $testname - } else { - fail $testname - } -} - -if [istarget ms1-*-*] { - foreach file [glob -nocomplain -- $srcdir/$subdir/bad*.s] { - set file [file tail $file] - switch -- $file { - "badreg.s" { - set warnpattern "unrecognized keyword/register name *" - } - "badorder.s" { - set warnpattern "unrecognized form of instruction*" - } - "badsyntax.s" { - set warnpattern "unrecognized keyword/register name *" - } - "badsyntax1.s" { - set warnpattern "unrecognized form of instruction*" - } - "badoffsethigh.s" { - set warnpattern "Operand out of range. Must be between -32768 and 32767.*" - } - "badoffsetlow.s" { - set warnpattern "Operand out of range. Must be between -32768 and 32767.*" - } - "badunsignedimmhigh.s" { - set warnpattern "operand out of range (65536 not between 0 and 65535)*" - } - "badunsignedimmlow.s" { - set warnpattern "operand out of range (65536 not between 0 and 65535)*" - } - "badsignedimmhigh.s" { - set warnpattern "operand out of range.*" - } - "badsignedimmlow.s" { - set warnpattern "operand out of range.*" - } - "badinsn.s" { - set warnpattern "unrecognized instruction *" - } - "badinsn1.s" { - set warnpattern "junk at end of line *" - } - default { - error "no expected result specified for $file" - return - - } - } - mrisc1_error_test $file "assembler emits error for $file" $warnpattern - } - -} diff --git a/gas/testsuite/gas/ms1/ldst.s b/gas/testsuite/gas/ms1/ldst.s deleted file mode 100644 index 174bcc8..0000000 --- a/gas/testsuite/gas/ms1/ldst.s +++ /dev/null @@ -1,28 +0,0 @@ -; load/store tests - - .data - -ldw_data: - .word 0xbabeface - - .text - -ld_text: - ld r4, r3 - ld r3, #8 - ld r5, #ld_text - ldh r6, #ldh_text - ldh r4, #4000 - ldh r5, #0x8000 - ldh r5, #-5 - ldh r5, #-0x8000 - ldh r0, #0xffff -ldh_text: - ldw r9, #30233000 - ldw r3, #ldw_data - ldb r3, @[r9+r2] - ldb @[r9+r3], r5 ; store - ldb r3, @[r8+6] - ldb @[r8+7], r3 ; store - ldw r9, @[r14+23] - ldw @[r14+10], r9 ; store diff --git a/gas/testsuite/gas/ms1/misc.d b/gas/testsuite/gas/ms1/misc.d deleted file mode 100644 index aec3424..0000000 --- a/gas/testsuite/gas/ms1/misc.d +++ /dev/null @@ -1,21 +0,0 @@ -#as: -#objdump: -dr -#name: misc - -.*: +file format .* - -Disassembly of section .text: - -00000000 <.text>: - 0: 00 12 00 00 add R0,R1,R2 - 4: 00 12 00 00 add R0,R1,R2 - 8: 00 23 10 00 add R1,R2,R3 - c: 00 33 10 00 add R1,R3,R3 - 10: 00 56 40 00 add R4,R5,R6 - 14: 00 89 70 00 add R7,R8,R9 - 18: 00 bc a0 00 add R10,R11,R12 - 1c: 00 ef d0 00 add R13,R14,R15 - 20: 03 dc 00 01 addui R12,R13,#\$1 - 24: 03 fe 00 01 addui R14,R15,#\$1 - 28: 03 10 00 00 addui R0,R1,#\$0 - 2c: 03 10 ff ff addui R0,R1,#\$ffff diff --git a/gas/testsuite/gas/ms1/misc.s b/gas/testsuite/gas/ms1/misc.s deleted file mode 100644 index 3a7cd4e..0000000 --- a/gas/testsuite/gas/ms1/misc.s +++ /dev/null @@ -1,21 +0,0 @@ -; Check that register names, both upper and lower case work and that -; the spacing between the operands doesn't matter. - -add R0,R1,R2 -add r0,r1,r2 -add R1,R2,r3 -add R1, R3, r3 -add R4,R5,R6 -add R7,R8,R9 -add R10,R11,R12 -add R13,R14,R15 -addui fp,sp,#1 -addui ra,ira,#1 - -; Check that the range of legal operand values is accepted. - -addui R0,R1,#0 -addui R0,R1,#$FFFF - - - diff --git a/gas/testsuite/gas/ms1/ms1-16-003.d b/gas/testsuite/gas/ms1/ms1-16-003.d deleted file mode 100644 index f855696..0000000 --- a/gas/testsuite/gas/ms1/ms1-16-003.d +++ /dev/null @@ -1,33 +0,0 @@ -#as: -march=ms1-16-003 -#objdump: -dr -#name: ms1-16-003 - -.*: +file format .* - -Disassembly of section .text: - -00000000 : - 0: 6a 00 00 00 iflush -00000004 : - 4: 08 00 00 00 mul R0,R0,R0 -00000008 : - 8: 09 00 00 00 muli R0,R0,#\$0 -0000000c : - c: 3d 00 00 00 dbnz R0,c -[ ]*c: R_MS1_PC16 dbnz -00000010 : - 10: f0 00 00 00 fbcbincs #\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0 -00000014 : - 14: f4 00 00 00 mfbcbincs R0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0 -00000018 : - 18: f8 00 00 00 fbcbincrs R0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0 -0000001c : - 1c: fc 00 00 00 mfbcbincrs R0,R0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0 -00000020 : - 20: e0 00 00 00 wfbinc #\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0 -00000024 : - 24: e4 00 00 00 mwfbinc R0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0 -00000028 : - 28: e8 00 00 00 wfbincr R0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0 -0000002c : - 2c: ec 00 00 00 mwfbincr R0,R0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0,#\$0 diff --git a/gas/testsuite/gas/ms1/ms1-16-003.s b/gas/testsuite/gas/ms1/ms1-16-003.s deleted file mode 100644 index 516fff5..0000000 --- a/gas/testsuite/gas/ms1/ms1-16-003.s +++ /dev/null @@ -1,54 +0,0 @@ - .text - .global iflush -iflush: - iflush - - .global mul -mul: - mul R0, R0, R0 - - .global muli -muli: - muli R0, R0, #0 - - .global dbnz -dbnz_: - dbnz r0, dbnz - - .global fbcbincs -fbcbincs: - fbcbincs #0, #0, #0, #0, #0, #0, #0, #0, #0, #0 - - .global mfbcbincs -mfbcbincs: - mfbcbincs r0, #0, #0, #0, #0, #0, #0, #0, #0 - - - .global fbcbincrs -fbcbincrs: - fbcbincrs r0, #0, #0, #0, #0, #0, #0, #0, #0, #0 - - .global mfbcbincrs -mfbcbincrs: - mfbcbincrs r0, r0, #0, #0, #0, #0, #0, #0, #0 - - - .global wfbinc -wfbinc: -# Documentation error. -# wfbinc #0, r0, #0, #0, #0, #0, #0, #0, #0, #0 - wfbinc #0, #0, #0, #0, #0, #0, #0, #0, #0, #0 - - .global mwfbinc -mwfbinc: -# Documentation error. -# mwfbinc r0, #0, #0, r0, #0, #0, #0, #0, #0 - mwfbinc r0, #0, #0, #0, #0, #0, #0, #0, #0 - - .global wfbincr -wfbincr: - wfbincr r0, #0, #0, #0, #0, #0, #0, #0, #0, #0 - - .global mwfbincr -mwfbincr: - mwfbincr r0, r0, #0, #0, #0, #0, #0, #0, #0 diff --git a/gas/testsuite/gas/ms1/ms1.exp b/gas/testsuite/gas/ms1/ms1.exp deleted file mode 100644 index 1960f0d..0000000 --- a/gas/testsuite/gas/ms1/ms1.exp +++ /dev/null @@ -1,11 +0,0 @@ -# MRISC1 assembler testsuite. - -if [istarget ms1*-*-*] { - # - run_dump_test "allinsn" - run_dump_test "misc" - run_dump_test "msys" - run_dump_test "ms1-16-003" - run_dump_test "ms2" - # -} diff --git a/gas/testsuite/gas/ms1/ms2.d b/gas/testsuite/gas/ms1/ms2.d deleted file mode 100644 index 8771052..0000000 --- a/gas/testsuite/gas/ms1/ms2.d +++ /dev/null @@ -1,18 +0,0 @@ -#as: -march=ms2 -#objdump: -dr -#name: ms2 - -.*: +file format .* - -Disassembly of section .text: - -00000000 : - 0: 3e 10 00 05 loop R1,1c