From f805106cd375e6b5fc6036c95cf99eb6e3c9c7fa Mon Sep 17 00:00:00 2001 From: Timothy Wall Date: Tue, 8 Feb 2000 14:21:53 +0000 Subject: [PATCH] Add handling for numbers with suffixed radix. --- gas/ChangeLog | 7 +++++++ gas/as.h | 4 ++++ gas/doc/internals.texi | 6 ++++++ gas/expr.c | 38 ++++++++++++++++++++++++++++++-------- 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 00c44405437..807ea282d18 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2000-02-08 Timothy Wall + + * 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 * read.c: Added elseif to directives table. diff --git a/gas/as.h b/gas/as.h index 3f16d5649ef..c82788c3c8a 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 6dc9ac7c658..dfc2d3af724 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 ced12395bb9..e2e64991e46 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 -- 2.30.2