Add handling for numbers with suffixed radix.
This commit is contained in:
parent
4469be0f23
commit
f805106cd3
|
@ -1,3 +1,10 @@
|
||||||
|
2000-02-08 Timothy Wall <twall@redhat.com>
|
||||||
|
|
||||||
|
* doc/internals.texi: Document NUMBERS_WITH_SUFFIX macro.
|
||||||
|
* as.h: Provide a default NUMBERS_WITH_SUFFIX definition (zero).
|
||||||
|
* expr.c: Handle numbers with suffixes if NUMBERS_WITH_SUFFIX is
|
||||||
|
non-zero.
|
||||||
|
|
||||||
2000-02-08 Timothy Wall <twall@redhat.com>
|
2000-02-08 Timothy Wall <twall@redhat.com>
|
||||||
|
|
||||||
* read.c: Added elseif to directives table.
|
* read.c: Added elseif to directives table.
|
||||||
|
|
4
gas/as.h
4
gas/as.h
|
@ -629,6 +629,10 @@ void eh_frame_convert_frag PARAMS ((fragS *));
|
||||||
#endif
|
#endif
|
||||||
#include "listing.h"
|
#include "listing.h"
|
||||||
|
|
||||||
|
#ifndef NUMBERS_WITH_SUFFIX
|
||||||
|
#define NUMBERS_WITH_SUFFIX 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef LOCAL_LABELS_DOLLAR
|
#ifndef LOCAL_LABELS_DOLLAR
|
||||||
#define LOCAL_LABELS_DOLLAR 0
|
#define LOCAL_LABELS_DOLLAR 0
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -960,6 +960,12 @@ default value it zero.
|
||||||
You may define this macro to the lexical type of the @kbd{$} character. The
|
You may define this macro to the lexical type of the @kbd{$} character. The
|
||||||
default value is @code{LEX_NAME | LEX_BEGIN_NAME}.
|
default value is @code{LEX_NAME | LEX_BEGIN_NAME}.
|
||||||
|
|
||||||
|
@item NUMBERS_WITH_SUFFIX
|
||||||
|
@cindex NUMBERS_WITH_SUFFIX
|
||||||
|
When this macro is defined to be non-zero, the parser allows the radix of a
|
||||||
|
constant to be indicated with a suffix. Valid suffixes are binary (B),
|
||||||
|
octal (Q), and hexadecimal (H). Case is not significant.
|
||||||
|
|
||||||
@item SINGLE_QUOTE_STRINGS
|
@item SINGLE_QUOTE_STRINGS
|
||||||
@cindex SINGLE_QUOTE_STRINGS
|
@cindex SINGLE_QUOTE_STRINGS
|
||||||
If you define this macro, GAS will treat single quotes as string delimiters.
|
If you define this macro, GAS will treat single quotes as string delimiters.
|
||||||
|
|
38
gas/expr.c
38
gas/expr.c
|
@ -327,7 +327,7 @@ integer_constant (radix, expressionP)
|
||||||
#define valuesize 32
|
#define valuesize 32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (flag_m68k_mri && radix == 0)
|
if ((NUMBERS_WITH_SUFFIX || flag_m68k_mri) && radix == 0)
|
||||||
{
|
{
|
||||||
int flt = 0;
|
int flt = 0;
|
||||||
|
|
||||||
|
@ -541,7 +541,9 @@ integer_constant (radix, expressionP)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag_m68k_mri && suffix != NULL && input_line_pointer - 1 == suffix)
|
if ((NUMBERS_WITH_SUFFIX || flag_m68k_mri)
|
||||||
|
&& suffix != NULL
|
||||||
|
&& input_line_pointer - 1 == suffix)
|
||||||
c = *input_line_pointer++;
|
c = *input_line_pointer++;
|
||||||
|
|
||||||
if (small)
|
if (small)
|
||||||
|
@ -810,13 +812,15 @@ operand (expressionP)
|
||||||
case '9':
|
case '9':
|
||||||
input_line_pointer--;
|
input_line_pointer--;
|
||||||
|
|
||||||
integer_constant (flag_m68k_mri ? 0 : 10, expressionP);
|
integer_constant ((NUMBERS_WITH_SUFFIX || flag_m68k_mri)
|
||||||
|
? 0 : 10,
|
||||||
|
expressionP);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '0':
|
case '0':
|
||||||
/* non-decimal radix */
|
/* non-decimal radix */
|
||||||
|
|
||||||
if (flag_m68k_mri)
|
if (NUMBERS_WITH_SUFFIX || flag_m68k_mri)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
|
@ -829,8 +833,26 @@ operand (expressionP)
|
||||||
integer_constant (0, expressionP);
|
integer_constant (0, expressionP);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
if (NUMBERS_WITH_SUFFIX)
|
||||||
|
{
|
||||||
|
/* Check for a binary constant. */
|
||||||
|
for (s = input_line_pointer; *s == '0' || *s == '1'; s++)
|
||||||
|
;
|
||||||
|
if (toupper (*s) == 'B')
|
||||||
|
{
|
||||||
|
integer_constant (0, expressionP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* Check for an octal constant. */
|
||||||
|
for (s = input_line_pointer; *s >= '0' && *s <= '7'; s++)
|
||||||
|
;
|
||||||
|
if (toupper (*s) == 'Q')
|
||||||
|
{
|
||||||
|
integer_constant (0, expressionP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
c = *input_line_pointer;
|
c = *input_line_pointer;
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
|
@ -840,7 +862,7 @@ operand (expressionP)
|
||||||
case 'Q':
|
case 'Q':
|
||||||
case '8':
|
case '8':
|
||||||
case '9':
|
case '9':
|
||||||
if (flag_m68k_mri)
|
if (NUMBERS_WITH_SUFFIX || flag_m68k_mri)
|
||||||
{
|
{
|
||||||
integer_constant (0, expressionP);
|
integer_constant (0, expressionP);
|
||||||
break;
|
break;
|
||||||
|
@ -873,7 +895,7 @@ operand (expressionP)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'b':
|
case 'b':
|
||||||
if (LOCAL_LABELS_FB && ! flag_m68k_mri)
|
if (LOCAL_LABELS_FB && ! flag_m68k_mri && ! NUMBERS_WITH_SUFFIX)
|
||||||
{
|
{
|
||||||
/* This code used to check for '+' and '-' here, and, in
|
/* This code used to check for '+' and '-' here, and, in
|
||||||
some conditions, fall through to call
|
some conditions, fall through to call
|
||||||
|
|
Loading…
Reference in New Issue