This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: MN10300 gas: reject invalid uses of `epsw'
On Feb 12, 2002, Eric Christopher <echristo@redhat.com> wrote:
>> May I go ahead and check the patch in as-is, and then wait for
>> inspiration on some way to introduce the warning? :-)
> Sure. Don't forget to add a comment to that effect, e.g. "There should
> be a warning here, but I'm feeling uninspired" ;)
Ok, here's what I'm checking in:
Index: gas/ChangeLog
from Alexandre Oliva <aoliva@redhat.com>
* config/tc-mn10300.c (other_registers): Added `epsw'. Mark `pc'
and `epsw' as available on AM33 and above only.
(other_register_name): Add logic to handle machine type encoded in
reg_number.
Index: gas/config/tc-mn10300.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-mn10300.c,v
retrieving revision 1.34
diff -u -p -r1.34 tc-mn10300.c
--- gas/config/tc-mn10300.c 2002/01/23 01:52:18 1.34
+++ gas/config/tc-mn10300.c 2002/02/12 07:36:49
@@ -1,5 +1,5 @@
/* tc-mn10300.c -- Assembler code for the Matsushita 10300
- Copyright 1996, 1997, 1998, 1999, 2000, 2001
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -234,10 +234,16 @@ static const struct reg_name xr_register
#define XR_REG_NAME_CNT \
(sizeof (xr_registers) / sizeof (struct reg_name))
+/* We abuse the `value' field, that would be otherwise unused, to
+ encode the architecture on which (access to) the register was
+ introduced. FIXME: we should probably warn when we encounter a
+ register name when assembling for an architecture that doesn't
+ support it, before parsing it as a symbol name. */
static const struct reg_name other_registers[] =
{
+ { "epsw", AM33 },
{ "mdr", 0 },
- { "pc", 0 },
+ { "pc", AM33 },
{ "psw", 0 },
{ "sp", 0 },
};
@@ -494,10 +500,11 @@ other_register_name (expressionP)
*input_line_pointer = c;
/* Look to see if it's in the register table. */
- if (reg_number >= 0)
+ if (reg_number == 0
+ || (reg_number == AM33 && HAVE_AM33))
{
expressionP->X_op = O_register;
- expressionP->X_add_number = reg_number;
+ expressionP->X_add_number = 0;
/* Make the rest nice. */
expressionP->X_add_symbol = NULL;
--
Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist Professional serial bug killer