diff options
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/as.h | 4 | ||||
-rw-r--r-- | gas/doc/internals.texi | 6 | ||||
-rw-r--r-- | gas/expr.c | 38 |
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. @@ -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. @@ -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 |