* 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.
This commit is contained in:
DJ Delorie
2008-07-18 22:25:07 +00:00
parent d7d9f01ea1
commit c54b5932c5
7 changed files with 87 additions and 1 deletions

View File

@@ -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)
{