aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>1999-08-29 23:44:27 +0000
committerAlan Modra <amodra@gmail.com>1999-08-29 23:44:27 +0000
commit5f47d35be101be073ebdc0cb5ba78740042143cb (patch)
treeb6603c8558cc0b5129c5e273b4f39e1f6552ac27 /gas
parenteb1b03df1a293f7aebb67e1deeba4b0bb21c3f9a (diff)
downloadgdb-5f47d35be101be073ebdc0cb5ba78740042143cb.zip
gdb-5f47d35be101be073ebdc0cb5ba78740042143cb.tar.gz
gdb-5f47d35be101be073ebdc0cb5ba78740042143cb.tar.bz2
Allow spaces in i386 FP reg names, eg. %st ( 1 ).
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-i386.c35
-rw-r--r--gas/testsuite/ChangeLog4
-rw-r--r--gas/testsuite/gas/i386/white.l3
-rw-r--r--gas/testsuite/gas/i386/white.s3
5 files changed, 49 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 8861565..6727bab 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+1999-08-29 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ Based on a patch from H.J. Lu <hjl@gnu.org>
+ * config/tc-i386.c (parse_register): Handle FP regs specially.
+ (md_begin): Remove '(' and ')' from register_chars.
+
1999-08-29 Doug Evans <devans@casey.cygnus.com>
* config/tc-m32r.c (md_parse_option): Delete unrecognized option
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index a2c0bcc..085a4b9 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -703,8 +703,6 @@ md_begin ()
#ifdef LEX_AT
identifier_chars['@'] = '@';
#endif
- register_chars[')'] = ')';
- register_chars['('] = '(';
digit_chars['-'] = '-';
identifier_chars['_'] = '_';
identifier_chars['.'] = '.';
@@ -4166,6 +4164,39 @@ parse_register (reg_string, end_op)
r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
+ /* Handle floating point regs, allowing spaces in the (i) part. */
+ if (r == i386_regtab /* %st is first entry of table */)
+ {
+ --s;
+ if (is_space_char (*s))
+ ++s;
+ if (*s == '(')
+ {
+ *p++ = *s++;
+ if (is_space_char (*s))
+ ++s;
+ if (*s >= '0' && *s <= '7')
+ {
+ r = &i386_float_regtab[*s - '0'];
+ *p++ = *s++;
+ if (is_space_char (*s))
+ ++s;
+ if (*s == ')')
+ {
+ *end_op = s + 1;
+ return r;
+ }
+ *p++ = *s;
+ }
+ if (!allow_naked_reg)
+ {
+ *p = '\0';
+ as_bad (_("bad register name `%s'"), reg_name_given);
+ }
+ return (const reg_entry *) NULL;
+ }
+ }
+
if (r == NULL)
{
if (!allow_naked_reg)
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 824253d..2805e2c 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+1999-08-29 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * gas/i386/white.s, gas/i386/white.l: Add space in FP reg tests.
+
Sat Aug 28 00:16:12 1999 Jerry Quinn <jquinn@nortelnetworks.com>
* gas/hppa/basic/basic.exp: Add new tests shift2.s,
diff --git a/gas/testsuite/gas/i386/white.l b/gas/testsuite/gas/i386/white.l
index 1ce6161..c2d9157 100644
--- a/gas/testsuite/gas/i386/white.l
+++ b/gas/testsuite/gas/i386/white.l
@@ -19,3 +19,6 @@ GAS LISTING .*
16 0022 66B81300 0000 Mov \$ foo , %eAx
17 .Code32
18 0028 66B81300 mov \$ foo , %ax
+ 19
+ 20 002c D9C9 fxch %st \( 1 \)
+ 21 002e D9C9 fxch % st\(1\)
diff --git a/gas/testsuite/gas/i386/white.s b/gas/testsuite/gas/i386/white.s
index 3bf5070..11eccfb 100644
--- a/gas/testsuite/gas/i386/white.s
+++ b/gas/testsuite/gas/i386/white.s
@@ -16,3 +16,6 @@ foo: jmpw % es : * ( % ebx )
Mov $ foo , %eAx
.Code32
mov $ foo , %ax
+
+ fxch %st ( 1 )
+ fxch % st(1)