diff options
author | DJ Delorie <dj@redhat.com> | 2008-07-18 22:25:07 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2008-07-18 22:25:07 +0000 |
commit | c54b5932c549afd2a2b2343ff57f365796237a40 (patch) | |
tree | 7881491c1fb579ddc1d7523b8984cad02ea7aa24 /gas/app.c | |
parent | d7d9f01ea18f14a9a1574042bd65dd73f9b6b2b8 (diff) | |
download | binutils-c54b5932c549afd2a2b2343ff57f365796237a40.zip binutils-c54b5932c549afd2a2b2343ff57f365796237a40.tar.gz binutils-c54b5932c549afd2a2b2343ff57f365796237a40.tar.bz2 |
* 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.
Diffstat (limited to 'gas/app.c')
-rw-r--r-- | gas/app.c | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -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) { |