/* tc-mn10300.c -- Assembler code for the Matsushita 10300
-
- Copyright (C) 1996, 1997, 1998 Free Software Foundation.
+ Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation.
This file is part of GAS, the GNU Assembler.
/* The target specific pseudo-ops which we support. */
const pseudo_typeS md_pseudo_table[] =
{
- { "am30", set_arch_mach, 300 },
- /* start-sanitize-cygnus */
- { "am33", set_arch_mach, 330 },
- /* end-sanitize-cygnus */
- { "mn10300", set_arch_mach, 300 },
+ { "am30", set_arch_mach, AM30 },
+ { "am33", set_arch_mach, AM33 },
+ { "mn10300", set_arch_mach, MN103 },
{NULL, 0, 0}
};
+#define HAVE_AM33 (current_machine == AM33)
+
/* Opcode hash table. */
static struct hash_control *mn10300_hash;
};
#define ADDRESS_REG_NAME_CNT (sizeof(address_registers) / sizeof(struct reg_name))
-/* start-sanitize-cygnus */
static const struct reg_name r_registers[] =
{
{ "a0", 8 },
};
#define XR_REG_NAME_CNT (sizeof(xr_registers) / sizeof(struct reg_name))
-/* end-sanitize-cygnus */
static const struct reg_name other_registers[] =
{
}
-/* start-sanitize-cygnus */
/* Summary of register_name().
*
* in: Input_line_pointer points to 1st char of operand.
return false;
}
}
-/* end-sanitize-cygnus */
/* Summary of register_name().
*
linkrelax = 1;
/* Set the default machine type. */
- if (!bfd_set_arch_mach (stdoutput, bfd_arch_mn10300, 300))
+ if (!bfd_set_arch_mach (stdoutput, bfd_arch_mn10300, MN103))
as_warn (_("could not set architecture and machine"));
- current_machine = 300;
+ current_machine = MN103;
}
void
/* If the instruction is not available on the current machine
then it can not possibly match. */
if (opcode->machine
- && (opcode->machine != current_machine))
+ && !(opcode->machine == AM33 && HAVE_AM33))
goto error;
for (op_idx = 1, opindex_ptr = opcode->operands;
*input_line_pointer = c;
goto keep_going;
}
- /* start-sanitize-cygnus */
else if (operand->flags & MN10300_OPERAND_RREG)
{
if (!r_register_name (&ex))
input_line_pointer++;
goto keep_going;
}
- /* end-sanitize-cygnus */
else if (operand->flags & MN10300_OPERAND_PSW)
{
char *start = input_line_pointer;
value |= 0x08;
*input_line_pointer = c;
}
- /* start-sanitize-cygnus */
- else if (strcasecmp (start, "exreg0") == 0)
+ else if (HAVE_AM33
+ && strcasecmp (start, "exreg0") == 0)
{
value |= 0x04;
*input_line_pointer = c;
}
- else if (strcasecmp (start, "exreg1") == 0)
+ else if (HAVE_AM33
+ && strcasecmp (start, "exreg1") == 0)
{
value |= 0x02;
*input_line_pointer = c;
}
- else if (strcasecmp (start, "exother") == 0)
+ else if (HAVE_AM33
+ && strcasecmp (start, "exother") == 0)
{
value |= 0x01;
*input_line_pointer = c;
}
- else if (strcasecmp (start, "all") == 0)
+ else if (HAVE_AM33
+ && strcasecmp (start, "all") == 0)
{
value |= 0xff;
*input_line_pointer = c;
}
- /* end-sanitize-cygnus */
else
{
input_line_pointer = hold;
str = hold;
goto error;
}
- /* start-sanitize-cygnus */
- else if (r_register_name (&ex))
+ else if (HAVE_AM33 && r_register_name (&ex))
{
input_line_pointer = hold;
str = hold;
goto error;
}
- else if (xr_register_name (&ex))
+ else if (HAVE_AM33 && xr_register_name (&ex))
{
input_line_pointer = hold;
str = hold;
goto error;
}
- /* end-sanitize-cygnus */
else if (*str == ')' || *str == '(')
{
input_line_pointer = hold;
int mask;
mask = MN10300_OPERAND_DREG | MN10300_OPERAND_AREG;
- /* start-sanitize-cygnus */
- mask |= MN10300_OPERAND_RREG | MN10300_OPERAND_XRREG;
- /* end-sanitize-cygnus */
+ if (HAVE_AM33)
+ mask |= MN10300_OPERAND_RREG | MN10300_OPERAND_XRREG;
if ((operand->flags & mask) == 0)
{
input_line_pointer = hold;
|| opcode->format == FMT_S6
|| opcode->format == FMT_D5)
extra_shift = 16;
- /* start-sanitize-cygnus */
else if (opcode->format == FMT_D7)
extra_shift = 8;
else if (opcode->format == FMT_D8 || opcode->format == FMT_D9)
extra_shift = 8;
- /* end-sanitize-cygnus */
else
extra_shift = 0;
if (opcode->format == FMT_S2 || opcode->format == FMT_D1)
size = 3;
- /* start-sanitize-cygnus */
if (opcode->format == FMT_D6)
size = 3;
if (opcode->format == FMT_D9)
size = 7;
- /* end-sanitize-cygnus */
if (opcode->format == FMT_S4)
size = 5;
if (opcode->format == FMT_S0
|| opcode->format == FMT_S1
|| opcode->format == FMT_D0
- /* start-sanitize-cygnus */
|| opcode->format == FMT_D6
|| opcode->format == FMT_D7
|| opcode->format == FMT_D10
- /* end-sanitize-cygnus */
|| opcode->format == FMT_D1)
{
number_to_chars_bigendian (f, insn, size);
number_to_chars_littleendian (f + 2, temp, 4);
number_to_chars_bigendian (f + 6, extension & 0xff, 1);
}
- /* start-sanitize-cygnus */
else if (opcode->format == FMT_D8)
{
unsigned long temp = ((insn & 0xff) << 16) | (extension & 0xffff);
number_to_chars_bigendian (f, (insn >> 8) & 0xffffff, 3);
number_to_chars_littleendian (f + 3, temp, 4);
}
- /* end-sanitize-cygnus */
/* Create any fixups. */
for (i = 0; i < fc; i++)
implicitly 32bits. */
if ((operand->flags & MN10300_OPERAND_SPLIT) != 0)
reloc_size = 32;
- /* start-sanitize-cygnus */
else if ((operand->flags & MN10300_OPERAND_24BIT) != 0)
reloc_size = 24;
- /* end-sanitize-cygnus */
else
reloc_size = operand->bits;
}
else
{
- reloc->sym_ptr_ptr = &fixp->fx_addsy->bsym;
+ reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof( asymbol *));
+ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
reloc->addend = fixp->fx_offset;
}
return reloc;
int bits;
bits = operand->bits;
- /* start-sanitize-cygnus */
if (operand->flags & MN10300_OPERAND_24BIT)
bits = 24;
- /* end-sanitize-cygnus */
if ((operand->flags & MN10300_OPERAND_SIGNED) != 0)
{
*extensionp |= ((val & ((1 << (32 - operand->bits)) - 1))
<< operand->shift);
}
- /* start-sanitize-cygnus */
else if ((operand->flags & MN10300_OPERAND_24BIT) != 0)
{
*insnp |= (val >> (24 - operand->bits)) & ((1 << operand->bits) - 1);
*extensionp |= ((val & ((1 << (24 - operand->bits)) - 1))
<< operand->shift);
}
- /* end-sanitize-cygnus */
else if ((operand->flags & MN10300_OPERAND_EXTENDED) == 0)
{
*insnp |= (((long) val & ((1 << operand->bits) - 1))
int bits;
bits = operand->bits;
- /* start-sanitize-cygnus */
if (operand->flags & MN10300_OPERAND_24BIT)
bits = 24;
- /* end-sanitize-cygnus */
if ((operand->flags & MN10300_OPERAND_SIGNED) != 0)
{