* config/tc-m68k.c (struct m68k_cpu): Add alias field.
(archs): Initialize new field. (m68k_ip): Don't list alias names when listing CPUs which support an instruction.
This commit is contained in:
parent
cef72a9279
commit
9e64486e44
2 changed files with 65 additions and 28 deletions
|
@ -1,5 +1,17 @@
|
|||
Wed Feb 7 14:12:03 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* config/tc-m68k.c (struct m68k_cpu): Add alias field.
|
||||
(archs): Initialize new field.
|
||||
(m68k_ip): Don't list alias names when listing CPUs which support
|
||||
an instruction.
|
||||
|
||||
* as.c (main): Call parse_args before read_begin.
|
||||
* app.c (do_scrub_chars): If flag_m68k_mri, don't put a dot in
|
||||
front of generated pseudo-ops.
|
||||
* read.c (potable): Ignore "name".
|
||||
(s_app_file): Permit a single quote after the string, since one
|
||||
may appear in m68k MRI mode.
|
||||
|
||||
* configure.in: Check for --enable-shared. If linking against
|
||||
shared BFD and opcodes, fix library name on SunOS, and try to set
|
||||
-rpath reasonably.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* tc-m68k.c -- Assemble for the m68k family
|
||||
Copyright (C) 1987, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1987, 91, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
|
||||
|
@ -315,36 +315,37 @@ static int current_architecture;
|
|||
struct m68k_cpu {
|
||||
unsigned long arch;
|
||||
const char *name;
|
||||
int alias;
|
||||
};
|
||||
|
||||
static const struct m68k_cpu archs[] = {
|
||||
{ m68000, "68000" },
|
||||
{ m68010, "68010" },
|
||||
{ m68020, "68020" },
|
||||
{ m68030, "68030" },
|
||||
{ m68040, "68040" },
|
||||
{ m68060, "68060" },
|
||||
{ cpu32, "cpu32" },
|
||||
{ m68881, "68881" },
|
||||
{ m68851, "68851" },
|
||||
{ m68000, "68000", 0 },
|
||||
{ m68010, "68010", 0 },
|
||||
{ m68020, "68020", 0 },
|
||||
{ m68030, "68030", 0 },
|
||||
{ m68040, "68040", 0 },
|
||||
{ m68060, "68060", 0 },
|
||||
{ cpu32, "cpu32", 0 },
|
||||
{ m68881, "68881", 0 },
|
||||
{ m68851, "68851", 0 },
|
||||
/* Aliases (effectively, so far as gas is concerned) for the above
|
||||
cpus. */
|
||||
{ m68020, "68k" },
|
||||
{ m68000, "68302" },
|
||||
{ m68000, "68008" },
|
||||
{ m68000, "68ec000" },
|
||||
{ m68000, "68hc000" },
|
||||
{ m68000, "68hc001" },
|
||||
{ m68020, "68ec020" },
|
||||
{ m68030, "68ec030" },
|
||||
{ m68040, "68ec040" },
|
||||
{ cpu32, "68330" },
|
||||
{ cpu32, "68331" },
|
||||
{ cpu32, "68332" },
|
||||
{ cpu32, "68333" },
|
||||
{ cpu32, "68340" },
|
||||
{ cpu32, "68360" },
|
||||
{ m68881, "68882" },
|
||||
{ m68020, "68k", 1 },
|
||||
{ m68000, "68302", 1 },
|
||||
{ m68000, "68008", 1 },
|
||||
{ m68000, "68ec000", 1 },
|
||||
{ m68000, "68hc000", 1 },
|
||||
{ m68000, "68hc001", 1 },
|
||||
{ m68020, "68ec020", 1 },
|
||||
{ m68030, "68ec030", 1 },
|
||||
{ m68040, "68ec040", 1 },
|
||||
{ cpu32, "68330", 1 },
|
||||
{ cpu32, "68331", 1 },
|
||||
{ cpu32, "68332", 1 },
|
||||
{ cpu32, "68333", 1 },
|
||||
{ cpu32, "68340", 1 },
|
||||
{ cpu32, "68360", 1 },
|
||||
{ m68881, "68882", 1 },
|
||||
};
|
||||
|
||||
static const int n_archs = sizeof (archs) / sizeof (archs[0]);
|
||||
|
@ -433,6 +434,8 @@ const pseudo_typeS md_pseudo_table[] =
|
|||
#ifdef OBJ_ELF
|
||||
{"swbeg", s_ignore, 0},
|
||||
#endif
|
||||
{"extend", float_cons, 'x'},
|
||||
{"ldouble", float_cons, 'x'},
|
||||
|
||||
/* The following pseudo-ops are supported for MRI compatibility. */
|
||||
{"chip", s_chip, 0},
|
||||
|
@ -592,7 +595,7 @@ tc_gen_reloc (section, fixp)
|
|||
arelent *reloc;
|
||||
bfd_reloc_code_real_type code;
|
||||
|
||||
if (fixP->fx_tcbit)
|
||||
if (fixp->fx_tcbit)
|
||||
abort ();
|
||||
|
||||
#define F(SZ,PCREL) (((SZ) << 1) + (PCREL))
|
||||
|
@ -835,6 +838,11 @@ m68k_ip (instring)
|
|||
&& (opP->disp.exp.X_op != O_constant
|
||||
|| ! isword (opP->disp.exp.X_add_number)))
|
||||
losing++;
|
||||
else if (s[1] == 'W'
|
||||
&& ! isvar (&opP->disp)
|
||||
&& (opP->disp.exp.X_op != O_constant
|
||||
|| ! issword (opP->disp.exp.X_add_number)))
|
||||
losing++;
|
||||
break;
|
||||
|
||||
case '^':
|
||||
|
@ -1355,7 +1363,8 @@ m68k_ip (instring)
|
|||
for (idx = 0; idx < sizeof (archs) / sizeof (archs[0]);
|
||||
idx++)
|
||||
{
|
||||
if (archs[idx].arch & ok_arch)
|
||||
if ((archs[idx].arch & ok_arch)
|
||||
&& ! archs[idx].alias)
|
||||
{
|
||||
if (got_one)
|
||||
{
|
||||
|
@ -1435,6 +1444,12 @@ m68k_ip (instring)
|
|||
addword (nextword);
|
||||
baseo = 0;
|
||||
break;
|
||||
case 'W':
|
||||
if (!issword (nextword))
|
||||
opP->error = "operand out of range";
|
||||
addword (nextword);
|
||||
baseo = 0;
|
||||
break;
|
||||
case 'l':
|
||||
addword (nextword >> 16);
|
||||
addword (nextword);
|
||||
|
@ -1929,6 +1944,13 @@ m68k_ip (instring)
|
|||
if (isvar (&opP->disp))
|
||||
the_ins.reloc[the_ins.nrel - 1].n = (opcode->m_codenum) * 2;
|
||||
break;
|
||||
case 'W':
|
||||
if (!issword (tmpreg))
|
||||
opP->error = "out of range";
|
||||
insop (tmpreg, opcode);
|
||||
if (isvar (&opP->disp))
|
||||
the_ins.reloc[the_ins.nrel - 1].n = (opcode->m_codenum) * 2;
|
||||
break;
|
||||
case 'l':
|
||||
/* Because of the way insop works, we put these two out
|
||||
backwards. */
|
||||
|
@ -2510,6 +2532,7 @@ install_operand (mode, val)
|
|||
break;
|
||||
case 'b':
|
||||
case 'w':
|
||||
case 'W':
|
||||
case 'l':
|
||||
break;
|
||||
case 'e':
|
||||
|
@ -5718,6 +5741,8 @@ s_mri_until (qual)
|
|||
|
||||
input_line_pointer = s;
|
||||
|
||||
pop_mri_control ();
|
||||
|
||||
if (flag_mri)
|
||||
{
|
||||
while (! is_end_of_line[(unsigned char) *input_line_pointer])
|
||||
|
|
Loading…
Reference in a new issue