aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/as.h4
-rw-r--r--gas/doc/internals.texi6
-rw-r--r--gas/expr.c38
4 files changed, 47 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 00c4440..807ea28 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,12 @@
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>
+
* read.c: Added elseif to directives table.
* read.h: Added prototype for s_elseif.
* doc/as.texinfo: Added description for elseif.
diff --git a/gas/as.h b/gas/as.h
index 3f16d56..c82788c 100644
--- a/gas/as.h
+++ b/gas/as.h
@@ -629,6 +629,10 @@ void eh_frame_convert_frag PARAMS ((fragS *));
#endif
#include "listing.h"
+#ifndef NUMBERS_WITH_SUFFIX
+#define NUMBERS_WITH_SUFFIX 0
+#endif
+
#ifndef LOCAL_LABELS_DOLLAR
#define LOCAL_LABELS_DOLLAR 0
#endif
diff --git a/gas/doc/internals.texi b/gas/doc/internals.texi
index 6dc9ac7..dfc2d3a 100644
--- a/gas/doc/internals.texi
+++ b/gas/doc/internals.texi
@@ -960,6 +960,12 @@ default value it zero.
You may define this macro to the lexical type of the @kbd{$} character. The
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
@cindex SINGLE_QUOTE_STRINGS
If you define this macro, GAS will treat single quotes as string delimiters.
diff --git a/gas/expr.c b/gas/expr.c
index ced1239..e2e6499 100644
--- a/gas/expr.c
+++ b/gas/expr.c
@@ -327,7 +327,7 @@ integer_constant (radix, expressionP)
#define valuesize 32
#endif
- if (flag_m68k_mri && radix == 0)
+ if ((NUMBERS_WITH_SUFFIX || flag_m68k_mri) && radix == 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++;
if (small)
@@ -810,13 +812,15 @@ operand (expressionP)
case '9':
input_line_pointer--;
- integer_constant (flag_m68k_mri ? 0 : 10, expressionP);
+ integer_constant ((NUMBERS_WITH_SUFFIX || flag_m68k_mri)
+ ? 0 : 10,
+ expressionP);
break;
case '0':
/* non-decimal radix */
- if (flag_m68k_mri)
+ if (NUMBERS_WITH_SUFFIX || flag_m68k_mri)
{
char *s;
@@ -829,8 +833,26 @@ operand (expressionP)
integer_constant (0, expressionP);
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;
switch (c)
{
@@ -840,7 +862,7 @@ operand (expressionP)
case 'Q':
case '8':
case '9':
- if (flag_m68k_mri)
+ if (NUMBERS_WITH_SUFFIX || flag_m68k_mri)
{
integer_constant (0, expressionP);
break;
@@ -873,7 +895,7 @@ operand (expressionP)
break;
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
some conditions, fall through to call