From c54b5932c549afd2a2b2343ff57f365796237a40 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Fri, 18 Jul 2008 22:25:07 +0000 Subject: [PATCH] * config/tc-m32c.h (H_TICK_HEX): Define. * config/tc-m32c.c (OPTION_H_TICK_HEX): Define. (md_longopts): Add support for it. (md_parse_option): Likewise. * doc/as.texinfo (Overview): Add new m32c options. * doc/c-m32c.texi (M32C-Modifiers): Likewise * as.h: (enable_h_tick_hex): New. * app.c (enable_h_tick_hex): New. (LEX_IS_H): New. (do_scrub_begin): Mark 'H' and 'h' as special if enable_h_tick_hex. (do_scrub_chars): If enable_h_tick_hex and 'h', check for H'00 style hex constants and convert the input stream to 0x00 style. (do_scrub_chars): If a 'X style character constant is found after a symbol character (like you're or X'00), warn the user. --- gas/ChangeLog | 18 ++++++++++++++++++ gas/app.c | 43 +++++++++++++++++++++++++++++++++++++++++++ gas/as.h | 4 ++++ gas/config/tc-m32c.c | 6 ++++++ gas/config/tc-m32c.h | 2 ++ gas/doc/as.texinfo | 8 +++++++- gas/doc/c-m32c.texi | 7 +++++++ 7 files changed, 87 insertions(+), 1 deletion(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 447c152923..85e5037215 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,21 @@ +2008-07-18 DJ Delorie + + * config/tc-m32c.h (H_TICK_HEX): Define. + * config/tc-m32c.c (OPTION_H_TICK_HEX): Define. + (md_longopts): Add support for it. + (md_parse_option): Likewise. + * doc/as.texinfo (Overview): Add new m32c options. + * doc/c-m32c.texi (M32C-Modifiers): Likewise + + * as.h: (enable_h_tick_hex): New. + * app.c (enable_h_tick_hex): New. + (LEX_IS_H): New. + (do_scrub_begin): Mark 'H' and 'h' as special if enable_h_tick_hex. + (do_scrub_chars): If enable_h_tick_hex and 'h', check for H'00 + style hex constants and convert the input stream to 0x00 style. + (do_scrub_chars): If a 'X style character constant is found after + a symbol character (like you're or X'00), warn the user. + 2008-07-10 Richard Sandiford * config/tc-mips.c (mips16_mark_labels): Use ELF_ST_SET_MIPS16. diff --git a/gas/app.c b/gas/app.c index 8884d9be82..6fa604fa83 100644 --- a/gas/app.c +++ b/gas/app.c @@ -34,6 +34,10 @@ #endif #endif +#ifdef H_TICK_HEX +int enable_h_tick_hex = 0; +#endif + #ifdef TC_M68K /* Whether we are scrubbing in m68k MRI mode. This is different from flag_m68k_mri, because the two flags will be affected by the .mri @@ -78,6 +82,9 @@ static const char symbol_chars[] = #define LEX_IS_DOUBLEBAR_1ST 13 #endif #define LEX_IS_PARALLEL_SEPARATOR 14 +#ifdef H_TICK_HEX +#define LEX_IS_H 15 +#endif #define IS_SYMBOL_COMPONENT(c) (lex[c] == LEX_IS_SYMBOL_COMPONENT) #define IS_WHITESPACE(c) (lex[c] == LEX_IS_WHITESPACE) #define IS_LINE_SEPARATOR(c) (lex[c] == LEX_IS_LINE_SEPARATOR) @@ -190,6 +197,14 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED) /* Must do this is we want VLIW instruction with "->" or "<-". */ lex['-'] = LEX_IS_SYMBOL_COMPONENT; #endif + +#ifdef H_TICK_HEX + if (enable_h_tick_hex) + { + lex['h'] = LEX_IS_H; + lex['H'] = LEX_IS_H; + } +#endif } /* Saved state of the scrubber. */ @@ -1009,6 +1024,14 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) #ifndef IEEE_STYLE case LEX_IS_ONECHAR_QUOTE: + if (state == 9) + { + char c; + + c = GET (); + as_warn ("'%c found after symbol", c); + UNGET (c); + } if (state == 10) { /* Preserve the whitespace in foo 'b'. */ @@ -1254,6 +1277,26 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) PUT ('\n'); break; +#ifdef H_TICK_HEX + case LEX_IS_H: + /* Look for strings like H'[0-9A-Fa-f] and if found, replace + the H' with 0x to make them gas-style hex characters. */ + if (enable_h_tick_hex) + { + char quot; + + quot = GET (); + if (quot == '\'') + { + UNGET ('x'); + ch = '0'; + } + else + UNGET (quot); + } + /* FALL THROUGH */ +#endif + case LEX_IS_SYMBOL_COMPONENT: if (state == 10) { diff --git a/gas/as.h b/gas/as.h index 56c7d2ef86..35162fe810 100644 --- a/gas/as.h +++ b/gas/as.h @@ -615,6 +615,10 @@ int generic_force_reloc (struct fix *); #endif #include "listing.h" +#ifdef H_TICK_HEX +extern int enable_h_tick_hex; +#endif + #ifdef TC_M68K /* True if we are assembling in m68k MRI mode. */ COMMON int flag_m68k_mri; diff --git a/gas/config/tc-m32c.c b/gas/config/tc-m32c.c index 2d13a6661c..615bcc58c0 100644 --- a/gas/config/tc-m32c.c +++ b/gas/config/tc-m32c.c @@ -68,12 +68,14 @@ const char * md_shortopts = M32C_SHORTOPTS; #define OPTION_CPU_M16C (OPTION_MD_BASE) #define OPTION_CPU_M32C (OPTION_MD_BASE + 1) #define OPTION_LINKRELAX (OPTION_MD_BASE + 2) +#define OPTION_H_TICK_HEX (OPTION_MD_BASE + 3) struct option md_longopts[] = { { "m16c", no_argument, NULL, OPTION_CPU_M16C }, { "m32c", no_argument, NULL, OPTION_CPU_M32C }, { "relax", no_argument, NULL, OPTION_LINKRELAX }, + { "h-tick-hex", no_argument, NULL, OPTION_H_TICK_HEX }, {NULL, no_argument, NULL, 0} }; size_t md_longopts_size = sizeof (md_longopts); @@ -125,6 +127,10 @@ md_parse_option (int c, char * arg ATTRIBUTE_UNUSED) m32c_relax = 1; break; + case OPTION_H_TICK_HEX: + enable_h_tick_hex = 1; + break; + default: return 0; } diff --git a/gas/config/tc-m32c.h b/gas/config/tc-m32c.h index 42e0a2768b..8fb0355d34 100644 --- a/gas/config/tc-m32c.h +++ b/gas/config/tc-m32c.h @@ -86,3 +86,5 @@ extern long md_pcrel_from_section PARAMS ((struct fix *, segT)); #define TC_START_LABEL(character, i_l_p) \ ((character) != ':' ? 0 : (character = m32c_is_colon_insn (s)) ? 0 : ((character = ':'), 1)) extern char m32c_is_colon_insn PARAMS ((char *)); + +#define H_TICK_HEX 1 diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo index fbbfa21f11..165eca7cc0 100644 --- a/gas/doc/as.texinfo +++ b/gas/doc/as.texinfo @@ -331,7 +331,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. @ifset M32C @emph{Target M32C options:} - [@b{-m32c}|@b{-m16c}] + [@b{-m32c}|@b{-m16c}] [-relax] [-h-tick-hex] @end ifset @ifset M32R @@ -765,6 +765,12 @@ Assemble M32C instructions. @item -m16c Assemble M16C instructions (the default). +@item -relax +Enable support for link-time relaxations. + +@item -h-tick-hex +Support H'00 style hex constants in addition to 0x00 style. + @end table @end ifset diff --git a/gas/doc/c-m32c.texi b/gas/doc/c-m32c.texi index a49fe20b9d..026f6a2fba 100644 --- a/gas/doc/c-m32c.texi +++ b/gas/doc/c-m32c.texi @@ -45,6 +45,13 @@ Assemble M32C instructions. @cindex architecture options, M16C @cindex M16C architecture option Assemble M16C instructions (default). + +@item -relax +Enable support for link-time relaxations. + +@item -h-tick-hex +Support H'00 style hex constants in addition to 0x00 style. + @end table -- 2.34.1