This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: H' hex constants


Thanks!  Tested with no regressions for i386 and m32c.  Applied as
attached:

* core support for H_TICK_HEX
* core warning for "symbol'c"
* m32c option -h-tick-hex

2008-07-18  DJ Delorie  <dj@redhat.com>

	* 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.

Index: as.h
===================================================================
RCS file: /cvs/src/src/gas/as.h,v
retrieving revision 1.59
diff -p -U3 -r1.59 as.h
--- as.h	17 Oct 2007 16:45:54 -0000	1.59
+++ as.h	18 Jul 2008 22:19:36 -0000
@@ -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;
Index: app.c
===================================================================
RCS file: /cvs/src/src/gas/app.c,v
retrieving revision 1.46
diff -p -U3 -r1.46 app.c
--- app.c	17 Jun 2008 16:01:28 -0000	1.46
+++ app.c	18 Jul 2008 22:19:36 -0000
@@ -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_U
   /* 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)
 
 #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)
 	  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)
 	    {
Index: doc/as.texinfo
===================================================================
RCS file: /cvs/src/src/gas/doc/as.texinfo,v
retrieving revision 1.178
diff -p -U3 -r1.178 as.texinfo
--- doc/as.texinfo	10 Apr 2008 12:45:18 -0000	1.178
+++ doc/as.texinfo	18 Jul 2008 22:19:37 -0000
@@ -331,7 +331,7 @@ gcc(1), ld(1), and the Info entries for 
 @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
 
Index: doc/c-m32c.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/c-m32c.texi,v
retrieving revision 1.2
diff -p -U3 -r1.2 c-m32c.texi
--- doc/c-m32c.texi	26 Jul 2005 03:21:52 -0000	1.2
+++ doc/c-m32c.texi	18 Jul 2008 22:19:37 -0000
@@ -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
 
Index: config/tc-m32c.h
===================================================================
RCS file: /cvs/src/src/gas/config/tc-m32c.h,v
retrieving revision 1.5
diff -p -U3 -r1.5 tc-m32c.h
--- config/tc-m32c.h	3 Jul 2007 11:01:04 -0000	1.5
+++ config/tc-m32c.h	18 Jul 2008 22:19:37 -0000
@@ -86,3 +86,5 @@ extern long md_pcrel_from_section PARAMS
 #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
Index: config/tc-m32c.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-m32c.c,v
retrieving revision 1.15
diff -p -U3 -r1.15 tc-m32c.c
--- config/tc-m32c.c	17 Oct 2007 16:45:55 -0000	1.15
+++ config/tc-m32c.c	18 Jul 2008 22:19:37 -0000
@@ -68,12 +68,14 @@ const char * md_shortopts = M32C_SHORTOP
 #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 ATTRI
       m32c_relax = 1;
       break;
 
+    case OPTION_H_TICK_HEX:
+      enable_h_tick_hex = 1;
+      break;
+
     default:
       return 0;
     }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]