Allow spaces in i386 FP reg names, eg. %st ( 1 ).

This commit is contained in:
Alan Modra 1999-08-29 23:44:27 +00:00
parent eb1b03df1a
commit 5f47d35be1
7 changed files with 69 additions and 12 deletions

View File

@ -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

View File

@ -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)

View File

@ -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,

View File

@ -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\)

View File

@ -16,3 +16,6 @@ foo: jmpw % es : * ( % ebx )
Mov $ foo , %eAx
.Code32
mov $ foo , %ax
fxch %st ( 1 )
fxch % st(1)

View File

@ -1,3 +1,9 @@
1999-08-29 Alan Modra <alan@spri.levels.unisa.edu.au>
* i386.h (i386_regtab): Move %st to top of table, and split off
other fp reg entries.
(i386_float_regtab): To here.
Sat Aug 28 00:25:25 1999 Jerry Quinn <jquinn@nortelnetworks.com>
* hppa.h (pa_opcodes): Replace 'f' by 'v'. Prefix float register args

View File

@ -1061,6 +1061,8 @@ static const template i386_optab[] = {
/* 386 register table */
static const reg_entry i386_regtab[] = {
/* make %st first as we test for it */
{"st", FloatReg|FloatAcc, 0},
/* 8 bit regs */
{"al", Reg8|Acc, 0},
{"cl", Reg8|ShiftCount, 1},
@ -1130,16 +1132,7 @@ static const reg_entry i386_regtab[] = {
{"tr5", Test, 5},
{"tr6", Test, 6},
{"tr7", Test, 7},
/* float registers */
{"st(0)", FloatReg|FloatAcc, 0},
{"st", FloatReg|FloatAcc, 0},
{"st(1)", FloatReg, 1},
{"st(2)", FloatReg, 2},
{"st(3)", FloatReg, 3},
{"st(4)", FloatReg, 4},
{"st(5)", FloatReg, 5},
{"st(6)", FloatReg, 6},
{"st(7)", FloatReg, 7},
/* mmx and simd registers */
{"mm0", RegMMX, 0},
{"mm1", RegMMX, 1},
{"mm2", RegMMX, 2},
@ -1158,6 +1151,17 @@ static const reg_entry i386_regtab[] = {
{"xmm7", RegXMM, 7}
};
static const reg_entry i386_float_regtab[] = {
{"st(0)", FloatReg|FloatAcc, 0},
{"st(1)", FloatReg, 1},
{"st(2)", FloatReg, 2},
{"st(3)", FloatReg, 3},
{"st(4)", FloatReg, 4},
{"st(5)", FloatReg, 5},
{"st(6)", FloatReg, 6},
{"st(7)", FloatReg, 7}
};
#define MAX_REG_NAME_SIZE 8 /* for parsing register names from input */
/* segment stuff */