diff options
author | Jose E. Marchesi <jose.marchesi@oracle.com> | 2015-12-09 07:32:52 -0500 |
---|---|---|
committer | Jose E. Marchesi <jose.marchesi@oracle.com> | 2015-12-09 07:34:32 -0500 |
commit | ec892a0718dc47c2d009532865c353daa749eaa1 (patch) | |
tree | 8fe0d5e1f82416de8956ca9b8953019f92532e5b /gas/config | |
parent | b593e3d9b00b09af43abf1e95d68e68200e3c2a5 (diff) | |
download | gdb-ec892a0718dc47c2d009532865c353daa749eaa1.zip gdb-ec892a0718dc47c2d009532865c353daa749eaa1.tar.gz gdb-ec892a0718dc47c2d009532865c353daa749eaa1.tar.bz2 |
sparc: support %dN and %qN syntax for FP registers.
The SPARC Refence Manual documents the %dN and %qN syntax to
refer to double and quad-precision floating-point registers,
respectively. See OSA2015 Appendix C, Assembly Language Syntax,
C1.1 Register Names.
This patch adds support for these names to GAS. This eases the
porting of software from Solaris to GNU/Linux, as these register
names have been supported by the Solaris linker for a long time
and many assembler require that support.
gas/ChangeLog:
2015-12-09 Jose E. Marchesi <jose.marchesi@oracle.com>
* config/tc-sparc.c (sparc_ip): Support %dN and %qN notation for
double and quad-precision floating-point registers.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-sparc.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c index 28e6ec8..4cd2250 100644 --- a/gas/config/tc-sparc.c +++ b/gas/config/tc-sparc.c @@ -2370,7 +2370,9 @@ sparc_ip (char *str, const struct sparc_opcode **pinsn) char format; if (*s++ == '%' - && ((format = *s) == 'f') + && ((format = *s) == 'f' + || format == 'd' + || format == 'q') && ISDIGIT (*++s)) { for (mask = 0; ISDIGIT (*s); ++s) @@ -2381,19 +2383,23 @@ sparc_ip (char *str, const struct sparc_opcode **pinsn) if ((*args == 'v' || *args == 'B' || *args == '5' - || *args == 'H') + || *args == 'H' + || format == 'd') && (mask & 1)) { + /* register must be even numbered */ break; - } /* register must be even numbered */ + } if ((*args == 'V' || *args == 'R' - || *args == 'J') + || *args == 'J' + || format == 'q') && (mask & 3)) { + /* register must be multiple of 4 */ break; - } /* register must be multiple of 4 */ + } if (mask >= 64) { |