mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			read-md.c: Move various state to within class rtx_reader
gcc/ChangeLog: * genattrtab.c (attr_string): Use rtx_reader_ptr for call to copy_md_ptr_loc. (gen_attr): Use rtx_reader_ptr for lookup_enum_type call. (write_test_expr): Use rtx_reader_ptr for calls to fprint_c_condition. (write_attr_value): Likewise. * genconditions.c (write_one_condition): Use rtx_reader_ptr for call to print_md_ptr_loc. (write_one_condition): Likewise for calls to print_c_condition. * genconstants.c: Include "statistics.h" and "vec.h". (main): Update for conversion to member functions. * genemit.c (emit_c_code): Use rtx_reader_ptr for call to print_md_ptr_loc. * genenums.c: Include "statistics.h" and "vec.h". (main): Update for conversion of traverse_enum_types to a method. * genmddeps.c: Include "statistics.h" and "vec.h". * genoutput.c (process_template): Use rtx_reader_ptr for call to print_md_ptr_loc. * genpreds.c (write_predicate_subfunction): Likewise. (write_predicate_expr): Likewise for calls to print_c_condition. * genrecog.c (print_test): Likewise. * gensupport.c (process_rtx): Likewise for calls to copy_md_ptr_loc and join_c_conditions. (alter_test_for_insn): Likewise for call to join_c_conditions. (process_substs_on_one_elem): Likewise. (gen_mnemonic_setattr): Update for move of string_obstack to a field of rtx_reader. (mnemonic_htab_callback): Likewise. Fix formatting. (gen_mnemonic_attr): Likewise. * gentarget-def.c (def_target_insn): Use rtx_reader_ptr for calls to print_c_condition. * read-md.c: Include "statistics.h" and "vec.h". (string_obstack): Convert this global to field "m_string_obstack" of class rtx_reader. (ptr_locs): Likewise, as "m_ptr_locs". (ptr_loc_obstack): Likewise, as "m_ptr_loc_obstack". (joined_conditions): Likewise, as "m_joined_conditions". (joined_conditions_obstack): Likewise, as "m_joined_conditions_obstack". (md_constants): Likewise, as "m_md_constants". (enum_types): Likewise, as "m_enum_types". (set_md_ptr_loc): Convert to... (rtx_reader::set_md_ptr_loc): ...member function. (get_md_ptr_loc): Convert to... (rtx_reader::get_md_ptr_loc): ...member function. (copy_md_ptr_loc): Convert to... (rtx_reader::copy_md_ptr_loc): ...member function. (fprint_md_ptr_loc): Convert to... (rtx_reader::fprint_md_ptr_loc): ...member function. (print_md_ptr_loc): Convert to... (rtx_reader::print_md_ptr_loc): ...member function. (join_c_conditions): Convert to... (rtx_reader::join_c_conditions): ...member function. (fprint_c_condition): Convert to... (rtx_reader::fprint_c_condition): ...member function. (print_c_condition): Convert to... (rtx_reader::print_c_condition): ...member function. (read_name): Convert to... (rtx_reader::read_name): ...member function. (read_escape): Convert to... (rtx_reader::read_escape): ...member function. (read_quoted_string): Convert to... (rtx_reader::read_quoted_string): ...member function. (read_braced_string): Convert to... (rtx_reader::read_braced_string): ...member function. (read_string): Convert to... (rtx_reader::read_string): ...member function. (read_skip_construct): Convert to... (rtx_reader::read_skip_construct): ...member function. (handle_constants): Convert to... (rtx_reader::handle_constants): ...member function. (traverse_md_constants): Convert to... (rtx_reader::traverse_md_constants): ...member function. (handle_enum): Convert to... (rtx_reader::handle_enum): ...member function. (lookup_enum_type): Convert to... (rtx_reader::lookup_enum_type): ...member function. (traverse_enum_types): Convert to... (rtx_reader::traverse_enum_types): ...member function. (rtx_reader::rtx_reader): Move initializations of various former global data from rtx_reader::read_md_files to here, as fields, along with the call to unlock_std_streams. (rtx_reader::~rtx_reader): Clean up m_base_dir, and clean up the new fields. (rtx_reader::read_md_files): Move initializations of various global data from here to the ctor. * read-md.h (read_name): Convert to... (rtx_reader::read_name): ...member function. (rtx_reader::read_escape): New method decl. (read_quoted_string): Convert to... (rtx_reader::read_quoted_string): ...member function. (rtx_reader::read_braced_string): New method decl. (read_string): Convert to... (rtx_reader::read_string): ...member function. (rtx_reader::read_skip_construct): New method decl. (rtx_reader::set_md_ptr_loc): New method decl. (rtx_reader::get_md_ptr_loc): New method decl. (copy_md_ptr_loc): Convert to... (rtx_reader::copy_md_ptr_loc): ...member function. (fprint_md_ptr_loc): Convert to... (rtx_reader::fprint_md_ptr_loc): ...member function. (print_md_ptr_loc): Convert to... (rtx_reader::print_md_ptr_loc): ...member function. (rtx_reader::lookup_enum_type): New method decl. (rtx_reader::traverse_enum_types): New method decl. (rtx_reader::handle_constants): New method decl. (traverse_md_constants): Convert to... (rtx_reader::traverse_md_constants): ...member function. (rtx_reader::handle_enum): New method decl. (rtx_reader::join_c_conditions): New method decl. (fprint_c_condition): Convert to... (rtx_reader::fprint_c_condition): ...member function. (print_c_condition): Convert to... (rtx_reader::print_c_condition): ...member function. (rtx_reader::apply_iterator_to_string): New method decl. (rtx_reader::copy_rtx_for_iterators): New method decl. (rtx_reader::read_conditions): New method decl. (rtx_reader::record_potential_iterator_use): New method decl. (rtx_reader::read_mapping): New method decl. (rtx_reader::read_rtx): New method decl. (rtx_reader::read_rtx_code): New method decl. (rtx_reader::read_rtx_operand): New method decl. (rtx_reader::read_nested_rtx): New method decl. (rtx_reader::read_rtx_variadic): New method decl. (rtx_reader::get_string_obstack): New method. (rtx_reader::get_md_constants): New method. (string_obstack): Convert global variable decl to... (rtx_reader::m_string_obstack): ...this new field. (rtx_reader::m_ptr_locs): New field. (rtx_reader::m_ptr_loc_obstack): New field. (rtx_reader::m_joined_conditions): New field. (rtx_reader::m_joined_conditions_obstack): New field. (rtx_reader::m_md_constants): New field. (rtx_reader::m_enum_types): New field. * read-rtl.c (apply_iterator_to_string): Convert to... (rtx_reader::apply_iterator_to_string): ...member function. (copy_rtx_for_iterators): Convert to... (rtx_reader::copy_rtx_for_iterators): ...member function. (add_condition_to_string): Use rtx_reader_ptr for calls join_c_conditions. (apply_iterators): Use rtx_reader_ptr for calls to join_c_conditions and copy_rtx_for_iterators. (read_conditions): Convert to... (rtx_reader::read_conditions): ...member function. (record_potential_iterator_use): Convert to... (rtx_reader::record_potential_iterator_use): ...member function. (read_mapping): Convert to... (rtx_reader::read_mapping): ...member function. (read_subst_mapping): Use rtx_reader_ptr for read_string call. (read_rtx): Convert to... (rtx_reader::read_rtx): ...member function. (read_rtx_code): Convert to... (rtx_reader::read_rtx_code): ...member function. (read_rtx_operand): Convert to... (rtx_reader::read_rtx_operand): ...member function. Update for move of string_obstack to a field. (read_nested_rtx): Convert to.. (rtx_reader::read_nested_rtx): ...member function. (read_rtx_variadic): Convert to.. (rtx_reader::read_rtx_variadic): ...member function. From-SVN: r241293
This commit is contained in:
		
							parent
							
								
									b0ce21917d
								
							
						
					
					
						commit
						b78027d1a3
					
				
							
								
								
									
										162
									
								
								gcc/ChangeLog
								
								
								
								
							
							
						
						
									
										162
									
								
								gcc/ChangeLog
								
								
								
								
							|  | @ -1,3 +1,165 @@ | |||
| 2016-10-18  David Malcolm  <dmalcolm@redhat.com> | ||||
| 
 | ||||
| 	* genattrtab.c (attr_string): Use rtx_reader_ptr for call to | ||||
| 	copy_md_ptr_loc. | ||||
| 	(gen_attr): Use rtx_reader_ptr for lookup_enum_type call. | ||||
| 	(write_test_expr): Use rtx_reader_ptr for calls to | ||||
| 	fprint_c_condition. | ||||
| 	(write_attr_value): Likewise. | ||||
| 	* genconditions.c (write_one_condition): Use rtx_reader_ptr for | ||||
| 	call to print_md_ptr_loc. | ||||
| 	(write_one_condition): Likewise for calls to print_c_condition. | ||||
| 	* genconstants.c: Include "statistics.h" and "vec.h". | ||||
| 	(main): Update for conversion to member functions. | ||||
| 	* genemit.c (emit_c_code): Use rtx_reader_ptr for | ||||
| 	call to print_md_ptr_loc. | ||||
| 	* genenums.c: Include "statistics.h" and "vec.h". | ||||
| 	(main): Update for conversion of traverse_enum_types to a method. | ||||
| 	* genmddeps.c: Include "statistics.h" and "vec.h". | ||||
| 	* genoutput.c (process_template): Use rtx_reader_ptr for call to | ||||
| 	print_md_ptr_loc. | ||||
| 	* genpreds.c (write_predicate_subfunction): Likewise. | ||||
| 	(write_predicate_expr): Likewise for calls to print_c_condition. | ||||
| 	* genrecog.c (print_test): Likewise. | ||||
| 	* gensupport.c (process_rtx): Likewise for calls to | ||||
| 	copy_md_ptr_loc and join_c_conditions. | ||||
| 	(alter_test_for_insn): Likewise for call to join_c_conditions. | ||||
| 	(process_substs_on_one_elem): Likewise. | ||||
| 	(gen_mnemonic_setattr): Update for move of string_obstack to a | ||||
| 	field of rtx_reader. | ||||
| 	(mnemonic_htab_callback): Likewise.  Fix formatting. | ||||
| 	(gen_mnemonic_attr): Likewise. | ||||
| 	* gentarget-def.c (def_target_insn): Use rtx_reader_ptr for calls | ||||
| 	to print_c_condition. | ||||
| 	* read-md.c: Include "statistics.h" and "vec.h". | ||||
| 	(string_obstack): Convert this global to field "m_string_obstack" | ||||
| 	of class rtx_reader. | ||||
| 	(ptr_locs): Likewise, as "m_ptr_locs". | ||||
| 	(ptr_loc_obstack): Likewise, as "m_ptr_loc_obstack". | ||||
| 	(joined_conditions): Likewise, as "m_joined_conditions". | ||||
| 	(joined_conditions_obstack): Likewise, as "m_joined_conditions_obstack". | ||||
| 	(md_constants): Likewise, as "m_md_constants". | ||||
| 	(enum_types): Likewise, as "m_enum_types". | ||||
| 	(set_md_ptr_loc): Convert to... | ||||
| 	(rtx_reader::set_md_ptr_loc): ...member function. | ||||
| 	(get_md_ptr_loc): Convert to... | ||||
| 	(rtx_reader::get_md_ptr_loc): ...member function. | ||||
| 	(copy_md_ptr_loc): Convert to... | ||||
| 	(rtx_reader::copy_md_ptr_loc): ...member function. | ||||
| 	(fprint_md_ptr_loc): Convert to... | ||||
| 	(rtx_reader::fprint_md_ptr_loc): ...member function. | ||||
| 	(print_md_ptr_loc): Convert to... | ||||
| 	(rtx_reader::print_md_ptr_loc): ...member function. | ||||
| 	(join_c_conditions): Convert to... | ||||
| 	(rtx_reader::join_c_conditions): ...member function. | ||||
| 	(fprint_c_condition): Convert to... | ||||
| 	(rtx_reader::fprint_c_condition): ...member function. | ||||
| 	(print_c_condition): Convert to... | ||||
| 	(rtx_reader::print_c_condition): ...member function. | ||||
| 	(read_name): Convert to... | ||||
| 	(rtx_reader::read_name): ...member function. | ||||
| 	(read_escape): Convert to... | ||||
| 	(rtx_reader::read_escape): ...member function. | ||||
| 	(read_quoted_string): Convert to... | ||||
| 	(rtx_reader::read_quoted_string): ...member function. | ||||
| 	(read_braced_string): Convert to... | ||||
| 	(rtx_reader::read_braced_string): ...member function. | ||||
| 	(read_string): Convert to... | ||||
| 	(rtx_reader::read_string): ...member function. | ||||
| 	(read_skip_construct): Convert to... | ||||
| 	(rtx_reader::read_skip_construct): ...member function. | ||||
| 	(handle_constants): Convert to... | ||||
| 	(rtx_reader::handle_constants): ...member function. | ||||
| 	(traverse_md_constants): Convert to... | ||||
| 	(rtx_reader::traverse_md_constants): ...member function. | ||||
| 	(handle_enum): Convert to... | ||||
| 	(rtx_reader::handle_enum): ...member function. | ||||
| 	(lookup_enum_type): Convert to... | ||||
| 	(rtx_reader::lookup_enum_type): ...member function. | ||||
| 	(traverse_enum_types): Convert to... | ||||
| 	(rtx_reader::traverse_enum_types): ...member function. | ||||
| 	(rtx_reader::rtx_reader): Move initializations | ||||
| 	of various former global data from rtx_reader::read_md_files to | ||||
| 	here, as fields, along with the call to unlock_std_streams. | ||||
| 	(rtx_reader::~rtx_reader): Clean up m_base_dir, and clean up | ||||
| 	the new fields. | ||||
| 	(rtx_reader::read_md_files): Move initializations of various | ||||
| 	global data from here to the ctor. | ||||
| 	* read-md.h (read_name): Convert to... | ||||
| 	(rtx_reader::read_name): ...member function. | ||||
| 	(rtx_reader::read_escape): New method decl. | ||||
| 	(read_quoted_string): Convert to... | ||||
| 	(rtx_reader::read_quoted_string): ...member function. | ||||
| 	(rtx_reader::read_braced_string): New method decl. | ||||
| 	(read_string): Convert to... | ||||
| 	(rtx_reader::read_string): ...member function. | ||||
| 	(rtx_reader::read_skip_construct): New method decl. | ||||
| 	(rtx_reader::set_md_ptr_loc): New method decl. | ||||
| 	(rtx_reader::get_md_ptr_loc): New method decl. | ||||
| 	(copy_md_ptr_loc): Convert to... | ||||
| 	(rtx_reader::copy_md_ptr_loc): ...member function. | ||||
| 	(fprint_md_ptr_loc): Convert to... | ||||
| 	(rtx_reader::fprint_md_ptr_loc): ...member function. | ||||
| 	(print_md_ptr_loc): Convert to... | ||||
| 	(rtx_reader::print_md_ptr_loc): ...member function. | ||||
| 	(rtx_reader::lookup_enum_type): New method decl. | ||||
| 	(rtx_reader::traverse_enum_types): New method decl. | ||||
| 	(rtx_reader::handle_constants): New method decl. | ||||
| 	(traverse_md_constants): Convert to... | ||||
| 	(rtx_reader::traverse_md_constants): ...member function. | ||||
| 	(rtx_reader::handle_enum): New method decl. | ||||
| 	(rtx_reader::join_c_conditions): New method decl. | ||||
| 	(fprint_c_condition): Convert to... | ||||
| 	(rtx_reader::fprint_c_condition): ...member function. | ||||
| 	(print_c_condition): Convert to... | ||||
| 	(rtx_reader::print_c_condition): ...member function. | ||||
| 	(rtx_reader::apply_iterator_to_string): New method decl. | ||||
| 	(rtx_reader::copy_rtx_for_iterators): New method decl. | ||||
| 	(rtx_reader::read_conditions): New method decl. | ||||
| 	(rtx_reader::record_potential_iterator_use): New method decl. | ||||
| 	(rtx_reader::read_mapping): New method decl. | ||||
| 	(rtx_reader::read_rtx): New method decl. | ||||
| 	(rtx_reader::read_rtx_code): New method decl. | ||||
| 	(rtx_reader::read_rtx_operand): New method decl. | ||||
| 	(rtx_reader::read_nested_rtx): New method decl. | ||||
| 	(rtx_reader::read_rtx_variadic): New method decl. | ||||
| 	(rtx_reader::get_string_obstack): New method. | ||||
| 	(rtx_reader::get_md_constants): New method. | ||||
| 	(string_obstack): Convert global variable decl to... | ||||
| 	(rtx_reader::m_string_obstack): ...this new field. | ||||
| 	(rtx_reader::m_ptr_locs): New field. | ||||
| 	(rtx_reader::m_ptr_loc_obstack): New field. | ||||
| 	(rtx_reader::m_joined_conditions): New field. | ||||
| 	(rtx_reader::m_joined_conditions_obstack): New field. | ||||
| 	(rtx_reader::m_md_constants): New field. | ||||
| 	(rtx_reader::m_enum_types): New field. | ||||
| 	* read-rtl.c (apply_iterator_to_string): Convert to... | ||||
| 	(rtx_reader::apply_iterator_to_string): ...member function. | ||||
| 	(copy_rtx_for_iterators): Convert to... | ||||
| 	(rtx_reader::copy_rtx_for_iterators): ...member function. | ||||
| 	(add_condition_to_string): Use rtx_reader_ptr for | ||||
| 	calls join_c_conditions. | ||||
| 	(apply_iterators): Use rtx_reader_ptr for calls to | ||||
| 	join_c_conditions and copy_rtx_for_iterators. | ||||
| 	(read_conditions): Convert to... | ||||
| 	(rtx_reader::read_conditions): ...member function. | ||||
| 	(record_potential_iterator_use): Convert to... | ||||
| 	(rtx_reader::record_potential_iterator_use): ...member function. | ||||
| 	(read_mapping): Convert to... | ||||
| 	(rtx_reader::read_mapping): ...member function. | ||||
| 	(read_subst_mapping): Use rtx_reader_ptr for read_string call. | ||||
| 	(read_rtx): Convert to... | ||||
| 	(rtx_reader::read_rtx): ...member function. | ||||
| 	(read_rtx_code): Convert to... | ||||
| 	(rtx_reader::read_rtx_code): ...member function. | ||||
| 	(read_rtx_operand): Convert to... | ||||
| 	(rtx_reader::read_rtx_operand): ...member function.  Update for move | ||||
| 	of string_obstack to a field. | ||||
| 	(read_nested_rtx): Convert to.. | ||||
| 	(rtx_reader::read_nested_rtx): ...member function. | ||||
| 	(read_rtx_variadic): Convert to.. | ||||
| 	(rtx_reader::read_rtx_variadic): ...member function. | ||||
| 
 | ||||
| 2016-10-18  Kugan Vivekanandarajah  <kuganv@linaro.org> | ||||
| 
 | ||||
| 	* tree-vrp.c (get_value_range): Check get_ptr_nonnull. | ||||
|  |  | |||
|  | @ -630,7 +630,7 @@ attr_string (const char *str, int len) | |||
|   memcpy (new_str, str, len); | ||||
|   new_str[len] = '\0'; | ||||
|   attr_hash_add_string (hashcode, new_str); | ||||
|   copy_md_ptr_loc (new_str, str); | ||||
|   rtx_reader_ptr->copy_md_ptr_loc (new_str, str); | ||||
| 
 | ||||
|   return new_str;			/* Return the new string.  */ | ||||
| } | ||||
|  | @ -3157,7 +3157,7 @@ gen_attr (md_rtx_info *info) | |||
|   if (GET_CODE (def) == DEFINE_ENUM_ATTR) | ||||
|     { | ||||
|       attr->enum_name = XSTR (def, 1); | ||||
|       et = lookup_enum_type (XSTR (def, 1)); | ||||
|       et = rtx_reader_ptr->lookup_enum_type (XSTR (def, 1)); | ||||
|       if (!et || !et->md_p) | ||||
| 	error_at (info->loc, "No define_enum called `%s' defined", | ||||
| 		  attr->name); | ||||
|  | @ -3768,14 +3768,14 @@ write_test_expr (FILE *outf, rtx exp, unsigned int attrs_cached, int flags, | |||
|       break; | ||||
| 
 | ||||
|     case MATCH_TEST: | ||||
|       fprint_c_condition (outf, XSTR (exp, 0)); | ||||
|       rtx_reader_ptr->fprint_c_condition (outf, XSTR (exp, 0)); | ||||
|       if (flags & FLG_BITWISE) | ||||
| 	fprintf (outf, " != 0"); | ||||
|       break; | ||||
| 
 | ||||
|     /* A random C expression.  */ | ||||
|     case SYMBOL_REF: | ||||
|       fprint_c_condition (outf, XSTR (exp, 0)); | ||||
|       rtx_reader_ptr->fprint_c_condition (outf, XSTR (exp, 0)); | ||||
|       break; | ||||
| 
 | ||||
|     /* The address of the branch target.  */ | ||||
|  | @ -4365,7 +4365,7 @@ write_attr_value (FILE *outf, struct attr_desc *attr, rtx value) | |||
|       break; | ||||
| 
 | ||||
|     case SYMBOL_REF: | ||||
|       fprint_c_condition (outf, XSTR (value, 0)); | ||||
|       rtx_reader_ptr->fprint_c_condition (outf, XSTR (value, 0)); | ||||
|       break; | ||||
| 
 | ||||
|     case ATTR: | ||||
|  |  | |||
|  | @ -124,7 +124,7 @@ write_one_condition (void **slot, void * ARG_UNUSED (dummy)) | |||
|   const struct c_test *test = * (const struct c_test **) slot; | ||||
|   const char *p; | ||||
| 
 | ||||
|   print_md_ptr_loc (test->expr); | ||||
|   rtx_reader_ptr->print_md_ptr_loc (test->expr); | ||||
|   fputs ("  { \"", stdout); | ||||
|   for (p = test->expr; *p; p++) | ||||
|     { | ||||
|  | @ -139,9 +139,9 @@ write_one_condition (void **slot, void * ARG_UNUSED (dummy)) | |||
|     } | ||||
| 
 | ||||
|   fputs ("\",\n    __builtin_constant_p ", stdout); | ||||
|   print_c_condition (test->expr); | ||||
|   rtx_reader_ptr->print_c_condition (test->expr); | ||||
|   fputs ("\n    ? (int) ", stdout); | ||||
|   print_c_condition (test->expr); | ||||
|   rtx_reader_ptr->print_c_condition (test->expr); | ||||
|   fputs ("\n    : -1 },\n", stdout); | ||||
|   return 1; | ||||
| } | ||||
|  |  | |||
|  | @ -28,6 +28,8 @@ along with GCC; see the file COPYING3.  If not see | |||
| #include "system.h" | ||||
| #include "coretypes.h" | ||||
| #include "errors.h" | ||||
| #include "statistics.h" | ||||
| #include "vec.h" | ||||
| #include "read-md.h" | ||||
| 
 | ||||
| /* Called via traverse_md_constants; emit a #define for
 | ||||
|  | @ -91,8 +93,8 @@ main (int argc, const char **argv) | |||
|   puts ("#ifndef GCC_INSN_CONSTANTS_H"); | ||||
|   puts ("#define GCC_INSN_CONSTANTS_H\n"); | ||||
| 
 | ||||
|   traverse_md_constants (print_md_constant, 0); | ||||
|   traverse_enum_types (print_enum_type, 0); | ||||
|   reader.traverse_md_constants (print_md_constant, 0); | ||||
|   reader.traverse_enum_types (print_enum_type, 0); | ||||
| 
 | ||||
|   puts ("\n#endif /* GCC_INSN_CONSTANTS_H */"); | ||||
| 
 | ||||
|  |  | |||
|  | @ -302,7 +302,7 @@ emit_c_code (const char *code, bool can_fail_p, const char *name) | |||
|   printf ("#define DONE return (_val = get_insns ()," | ||||
| 	  "end_sequence (), _val)\n"); | ||||
| 
 | ||||
|   print_md_ptr_loc (code); | ||||
|   rtx_reader_ptr->print_md_ptr_loc (code); | ||||
|   printf ("%s\n", code); | ||||
| 
 | ||||
|   printf ("#undef DONE\n"); | ||||
|  |  | |||
|  | @ -21,6 +21,8 @@ along with GCC; see the file COPYING3.  If not see | |||
| #include "system.h" | ||||
| #include "coretypes.h" | ||||
| #include "errors.h" | ||||
| #include "statistics.h" | ||||
| #include "vec.h" | ||||
| #include "read-md.h" | ||||
| 
 | ||||
| /* Called via traverse_enum_types.  Emit an enum definition for
 | ||||
|  | @ -59,7 +61,7 @@ main (int argc, const char **argv) | |||
|   puts ("#include \"system.h\"\n"); | ||||
|   puts ("#include \"insn-constants.h\"\n"); | ||||
| 
 | ||||
|   traverse_enum_types (print_enum_type, 0); | ||||
|   reader.traverse_enum_types (print_enum_type, 0); | ||||
| 
 | ||||
|   if (ferror (stdout) || fflush (stdout) || fclose (stdout)) | ||||
|     return FATAL_EXIT_CODE; | ||||
|  |  | |||
|  | @ -19,6 +19,8 @@ | |||
| #include "system.h" | ||||
| #include "coretypes.h" | ||||
| #include "errors.h" | ||||
| #include "statistics.h" | ||||
| #include "vec.h" | ||||
| #include "read-md.h" | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -631,7 +631,7 @@ process_template (struct data *d, const char *template_code) | |||
|       printf ("output_%d (rtx *operands ATTRIBUTE_UNUSED, rtx_insn *insn ATTRIBUTE_UNUSED)\n", | ||||
| 	      d->code_number); | ||||
|       puts ("{"); | ||||
|       print_md_ptr_loc (template_code); | ||||
|       rtx_reader_ptr->print_md_ptr_loc (template_code); | ||||
|       puts (template_code + 1); | ||||
|       puts ("}"); | ||||
|     } | ||||
|  |  | |||
|  | @ -154,7 +154,7 @@ write_predicate_subfunction (struct pred_data *p) | |||
|   printf ("static inline int\n" | ||||
| 	  "%s_1 (rtx op, machine_mode mode ATTRIBUTE_UNUSED)\n", | ||||
| 	  p->name); | ||||
|   print_md_ptr_loc (p->c_block); | ||||
|   rtx_reader_ptr->print_md_ptr_loc (p->c_block); | ||||
|   if (p->c_block[0] == '{') | ||||
|     fputs (p->c_block, stdout); | ||||
|   else | ||||
|  | @ -538,7 +538,7 @@ write_predicate_expr (rtx exp) | |||
|       break; | ||||
| 
 | ||||
|     case MATCH_TEST: | ||||
|       print_c_condition (XSTR (exp, 0)); | ||||
|       rtx_reader_ptr->print_c_condition (XSTR (exp, 0)); | ||||
|       break; | ||||
| 
 | ||||
|     default: | ||||
|  |  | |||
|  | @ -4659,7 +4659,7 @@ print_test (output_state *os, const rtx_test &test, bool is_param, | |||
|       gcc_assert (!is_param && value == 1); | ||||
|       if (invert_p) | ||||
| 	printf ("!"); | ||||
|       print_c_condition (test.u.string); | ||||
|       rtx_reader_ptr->print_c_condition (test.u.string); | ||||
|       break; | ||||
| 
 | ||||
|     case rtx_test::ACCEPT: | ||||
|  |  | |||
|  | @ -551,8 +551,9 @@ process_rtx (rtx desc, file_location loc) | |||
| 	split_cond = XSTR (desc, 4); | ||||
| 	if (split_cond[0] == '&' && split_cond[1] == '&') | ||||
| 	  { | ||||
| 	    copy_md_ptr_loc (split_cond + 2, split_cond); | ||||
| 	    split_cond = join_c_conditions (XSTR (desc, 2), split_cond + 2); | ||||
| 	    rtx_reader_ptr->copy_md_ptr_loc (split_cond + 2, split_cond); | ||||
| 	    split_cond = rtx_reader_ptr->join_c_conditions (XSTR (desc, 2), | ||||
| 							    split_cond + 2); | ||||
| 	  } | ||||
| 	XSTR (split, 1) = split_cond; | ||||
| 	XVEC (split, 2) = XVEC (desc, 5); | ||||
|  | @ -1262,7 +1263,7 @@ static const char * | |||
| alter_test_for_insn (struct queue_elem *ce_elem, | ||||
| 		     struct queue_elem *insn_elem) | ||||
| { | ||||
|   return join_c_conditions (XSTR (ce_elem->data, 1), | ||||
|   return rtx_reader_ptr->join_c_conditions (XSTR (ce_elem->data, 1), | ||||
| 					    XSTR (insn_elem->data, 2)); | ||||
| } | ||||
| 
 | ||||
|  | @ -1871,7 +1872,8 @@ process_substs_on_one_elem (struct queue_elem *elem, | |||
| 
 | ||||
|       /* Recalculate condition, joining conditions from original and
 | ||||
| 	 DEFINE_SUBST input patterns.  */ | ||||
|       XSTR (elem->data, 2) = join_c_conditions (XSTR (subst_elem->data, 2), | ||||
|       XSTR (elem->data, 2) | ||||
| 	= rtx_reader_ptr->join_c_conditions (XSTR (subst_elem->data, 2), | ||||
| 					     XSTR (elem->data, 2)); | ||||
|       /* Mark that subst was applied by changing attribute from "yes"
 | ||||
| 	 to "no".  */ | ||||
|  | @ -2299,6 +2301,7 @@ gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn) | |||
|   rtx set_attr; | ||||
|   char *attr_name; | ||||
|   rtvec new_vec; | ||||
|   struct obstack *string_obstack = rtx_reader_ptr->get_string_obstack (); | ||||
| 
 | ||||
|   template_code = XTMPL (insn, 3); | ||||
| 
 | ||||
|  | @ -2324,13 +2327,13 @@ gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn) | |||
| 	  sp = ep + 1; | ||||
| 
 | ||||
|       if (i > 0) | ||||
| 	obstack_1grow (&string_obstack, ','); | ||||
| 	obstack_1grow (string_obstack, ','); | ||||
| 
 | ||||
|       while (cp < sp && ((*cp >= '0' && *cp <= '9') | ||||
| 			 || (*cp >= 'a' && *cp <= 'z'))) | ||||
| 
 | ||||
| 	{ | ||||
| 	  obstack_1grow (&string_obstack, *cp); | ||||
| 	  obstack_1grow (string_obstack, *cp); | ||||
| 	  cp++; | ||||
| 	  size++; | ||||
| 	} | ||||
|  | @ -2341,7 +2344,7 @@ gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn) | |||
| 	    { | ||||
| 	      /* Don't set a value if there are more than one
 | ||||
| 		 instruction in the string.  */ | ||||
| 	      obstack_blank_fast (&string_obstack, -size); | ||||
| 	      obstack_blank_fast (string_obstack, -size); | ||||
| 	      size = 0; | ||||
| 
 | ||||
| 	      cp = sp; | ||||
|  | @ -2350,22 +2353,22 @@ gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn) | |||
| 	  cp++; | ||||
| 	} | ||||
|       if (size == 0) | ||||
| 	obstack_1grow (&string_obstack, '*'); | ||||
| 	obstack_1grow (string_obstack, '*'); | ||||
|       else | ||||
| 	add_mnemonic_string (mnemonic_htab, | ||||
| 			     (char *) obstack_next_free (&string_obstack) - size, | ||||
| 			     (char *) obstack_next_free (string_obstack) - size, | ||||
| 			     size); | ||||
|       i++; | ||||
|     } | ||||
| 
 | ||||
|   /* An insn definition might emit an empty string.  */ | ||||
|   if (obstack_object_size (&string_obstack) == 0) | ||||
|   if (obstack_object_size (string_obstack) == 0) | ||||
|     return; | ||||
| 
 | ||||
|   obstack_1grow (&string_obstack, '\0'); | ||||
|   obstack_1grow (string_obstack, '\0'); | ||||
| 
 | ||||
|   set_attr = rtx_alloc (SET_ATTR); | ||||
|   XSTR (set_attr, 1) = XOBFINISH (&string_obstack, char *); | ||||
|   XSTR (set_attr, 1) = XOBFINISH (string_obstack, char *); | ||||
|   attr_name = XNEWVAR (char, strlen (MNEMONIC_ATTR_NAME) + 1); | ||||
|   strcpy (attr_name, MNEMONIC_ATTR_NAME); | ||||
|   XSTR (set_attr, 0) = attr_name; | ||||
|  | @ -2388,8 +2391,10 @@ gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn) | |||
| static int | ||||
| mnemonic_htab_callback (void **slot, void *info ATTRIBUTE_UNUSED) | ||||
| { | ||||
|   obstack_grow (&string_obstack, (char*)*slot, strlen ((char*)*slot)); | ||||
|   obstack_1grow (&string_obstack, ','); | ||||
|   struct obstack *string_obstack = rtx_reader_ptr->get_string_obstack (); | ||||
| 
 | ||||
|   obstack_grow (string_obstack, (char*) *slot, strlen ((char*) *slot)); | ||||
|   obstack_1grow (string_obstack, ','); | ||||
|   return 1; | ||||
| } | ||||
| 
 | ||||
|  | @ -2407,6 +2412,7 @@ gen_mnemonic_attr (void) | |||
|   htab_t mnemonic_htab; | ||||
|   const char *str, *p; | ||||
|   int i; | ||||
|   struct obstack *string_obstack = rtx_reader_ptr->get_string_obstack (); | ||||
| 
 | ||||
|   if (have_error) | ||||
|     return; | ||||
|  | @ -2470,8 +2476,8 @@ gen_mnemonic_attr (void) | |||
|   htab_traverse (mnemonic_htab, mnemonic_htab_callback, NULL); | ||||
| 
 | ||||
|   /* Replace the last ',' with the zero end character.  */ | ||||
|   *((char *)obstack_next_free (&string_obstack) - 1) = '\0'; | ||||
|   XSTR (mnemonic_attr, 1) = XOBFINISH (&string_obstack, char *); | ||||
|   *((char *) obstack_next_free (string_obstack) - 1) = '\0'; | ||||
|   XSTR (mnemonic_attr, 1) = XOBFINISH (string_obstack, char *); | ||||
| } | ||||
| 
 | ||||
| /* Check if there are DEFINE_ATTRs with the same name.  */ | ||||
|  |  | |||
|  | @ -191,7 +191,7 @@ def_target_insn (const char *name, const char *prototype) | |||
| 	      printf ("target_have_%s (void)\n", name); | ||||
| 	      printf ("{\n"); | ||||
| 	      printf ("  return "); | ||||
| 	      print_c_condition (test); | ||||
| 	      rtx_reader_ptr->print_c_condition (test); | ||||
| 	      printf (";\n"); | ||||
| 	      printf ("}\n"); | ||||
| 	    } | ||||
|  |  | |||
							
								
								
									
										195
									
								
								gcc/read-md.c
								
								
								
								
							
							
						
						
									
										195
									
								
								gcc/read-md.c
								
								
								
								
							|  | @ -21,6 +21,8 @@ along with GCC; see the file COPYING3.  If not see | |||
| #include "system.h" | ||||
| #include "coretypes.h" | ||||
| #include "errors.h" | ||||
| #include "statistics.h" | ||||
| #include "vec.h" | ||||
| #include "read-md.h" | ||||
| 
 | ||||
| /* Associates PTR (which can be a string, etc.) with the file location
 | ||||
|  | @ -31,25 +33,6 @@ struct ptr_loc { | |||
|   int lineno; | ||||
| }; | ||||
| 
 | ||||
| /* Obstack used for allocating MD strings.  */ | ||||
| struct obstack string_obstack; | ||||
| 
 | ||||
| /* A table of ptr_locs, hashed on the PTR field.  */ | ||||
| static htab_t ptr_locs; | ||||
| 
 | ||||
| /* An obstack for the above.  Plain xmalloc is a bit heavyweight for a
 | ||||
|    small structure like ptr_loc.  */ | ||||
| static struct obstack ptr_loc_obstack; | ||||
| 
 | ||||
| /* A hash table of triples (A, B, C), where each of A, B and C is a condition
 | ||||
|    and A is equivalent to "B && C".  This is used to keep track of the source | ||||
|    of conditions that are made up of separate MD strings (such as the split | ||||
|    condition of a define_insn_and_split).  */ | ||||
| static htab_t joined_conditions; | ||||
| 
 | ||||
| /* An obstack for allocating joined_conditions entries.  */ | ||||
| static struct obstack joined_conditions_obstack; | ||||
| 
 | ||||
| /* This callback will be invoked whenever an md include directive is
 | ||||
|    processed.  To be used for creation of the dependency file.  */ | ||||
| void (*include_callback) (const char *); | ||||
|  | @ -58,13 +41,6 @@ void (*include_callback) (const char *); | |||
| 
 | ||||
| rtx_reader *rtx_reader_ptr; | ||||
| 
 | ||||
| /* A table of md_constant structures, hashed by name.  Null if no
 | ||||
|    constant expansion should occur.  */ | ||||
| static htab_t md_constants; | ||||
| 
 | ||||
| /* A table of enum_type structures, hashed by name.  */ | ||||
| static htab_t enum_types; | ||||
| 
 | ||||
| /* Given an object that starts with a char * name field, return a hash
 | ||||
|    code for its name.  */ | ||||
| 
 | ||||
|  | @ -102,32 +78,32 @@ leading_ptr_eq_p (const void *def1, const void *def2) | |||
| 
 | ||||
| /* Associate PTR with the file position given by FILENAME and LINENO.  */ | ||||
| 
 | ||||
| static void | ||||
| set_md_ptr_loc (const void *ptr, const char *filename, int lineno) | ||||
| void | ||||
| rtx_reader::set_md_ptr_loc (const void *ptr, const char *filename, int lineno) | ||||
| { | ||||
|   struct ptr_loc *loc; | ||||
| 
 | ||||
|   loc = (struct ptr_loc *) obstack_alloc (&ptr_loc_obstack, | ||||
|   loc = (struct ptr_loc *) obstack_alloc (&m_ptr_loc_obstack, | ||||
| 					  sizeof (struct ptr_loc)); | ||||
|   loc->ptr = ptr; | ||||
|   loc->filename = filename; | ||||
|   loc->lineno = lineno; | ||||
|   *htab_find_slot (ptr_locs, loc, INSERT) = loc; | ||||
|   *htab_find_slot (m_ptr_locs, loc, INSERT) = loc; | ||||
| } | ||||
| 
 | ||||
| /* Return the position associated with pointer PTR.  Return null if no
 | ||||
|    position was set.  */ | ||||
| 
 | ||||
| static const struct ptr_loc * | ||||
| get_md_ptr_loc (const void *ptr) | ||||
| const struct ptr_loc * | ||||
| rtx_reader::get_md_ptr_loc (const void *ptr) | ||||
| { | ||||
|   return (const struct ptr_loc *) htab_find (ptr_locs, &ptr); | ||||
|   return (const struct ptr_loc *) htab_find (m_ptr_locs, &ptr); | ||||
| } | ||||
| 
 | ||||
| /* Associate NEW_PTR with the same file position as OLD_PTR.  */ | ||||
| 
 | ||||
| void | ||||
| copy_md_ptr_loc (const void *new_ptr, const void *old_ptr) | ||||
| rtx_reader::copy_md_ptr_loc (const void *new_ptr, const void *old_ptr) | ||||
| { | ||||
|   const struct ptr_loc *loc = get_md_ptr_loc (old_ptr); | ||||
|   if (loc != 0) | ||||
|  | @ -138,7 +114,7 @@ copy_md_ptr_loc (const void *new_ptr, const void *old_ptr) | |||
|    directive for it to OUTF.  */ | ||||
| 
 | ||||
| void | ||||
| fprint_md_ptr_loc (FILE *outf, const void *ptr) | ||||
| rtx_reader::fprint_md_ptr_loc (FILE *outf, const void *ptr) | ||||
| { | ||||
|   const struct ptr_loc *loc = get_md_ptr_loc (ptr); | ||||
|   if (loc != 0) | ||||
|  | @ -147,7 +123,7 @@ fprint_md_ptr_loc (FILE *outf, const void *ptr) | |||
| 
 | ||||
| /* Special fprint_md_ptr_loc for writing to STDOUT.  */ | ||||
| void | ||||
| print_md_ptr_loc (const void *ptr) | ||||
| rtx_reader::print_md_ptr_loc (const void *ptr) | ||||
| { | ||||
|   fprint_md_ptr_loc (stdout, ptr); | ||||
| } | ||||
|  | @ -156,7 +132,7 @@ print_md_ptr_loc (const void *ptr) | |||
|    may be null or empty.  */ | ||||
| 
 | ||||
| const char * | ||||
| join_c_conditions (const char *cond1, const char *cond2) | ||||
| rtx_reader::join_c_conditions (const char *cond1, const char *cond2) | ||||
| { | ||||
|   char *result; | ||||
|   const void **entry; | ||||
|  | @ -171,11 +147,11 @@ join_c_conditions (const char *cond1, const char *cond2) | |||
|     return cond1; | ||||
| 
 | ||||
|   result = concat ("(", cond1, ") && (", cond2, ")", NULL); | ||||
|   obstack_ptr_grow (&joined_conditions_obstack, result); | ||||
|   obstack_ptr_grow (&joined_conditions_obstack, cond1); | ||||
|   obstack_ptr_grow (&joined_conditions_obstack, cond2); | ||||
|   entry = XOBFINISH (&joined_conditions_obstack, const void **); | ||||
|   *htab_find_slot (joined_conditions, entry, INSERT) = entry; | ||||
|   obstack_ptr_grow (&m_joined_conditions_obstack, result); | ||||
|   obstack_ptr_grow (&m_joined_conditions_obstack, cond1); | ||||
|   obstack_ptr_grow (&m_joined_conditions_obstack, cond2); | ||||
|   entry = XOBFINISH (&m_joined_conditions_obstack, const void **); | ||||
|   *htab_find_slot (m_joined_conditions, entry, INSERT) = entry; | ||||
|   return result; | ||||
| } | ||||
| 
 | ||||
|  | @ -185,9 +161,9 @@ join_c_conditions (const char *cond1, const char *cond2) | |||
|    directive for COND if its original file position is known.  */ | ||||
| 
 | ||||
| void | ||||
| fprint_c_condition (FILE *outf, const char *cond) | ||||
| rtx_reader::fprint_c_condition (FILE *outf, const char *cond) | ||||
| { | ||||
|   const char **halves = (const char **) htab_find (joined_conditions, &cond); | ||||
|   const char **halves = (const char **) htab_find (m_joined_conditions, &cond); | ||||
|   if (halves != 0) | ||||
|     { | ||||
|       fprintf (outf, "("); | ||||
|  | @ -207,7 +183,7 @@ fprint_c_condition (FILE *outf, const char *cond) | |||
| /* Special fprint_c_condition for writing to STDOUT.  */ | ||||
| 
 | ||||
| void | ||||
| print_c_condition (const char *cond) | ||||
| rtx_reader::print_c_condition (const char *cond) | ||||
| { | ||||
|   fprint_c_condition (stdout, cond); | ||||
| } | ||||
|  | @ -414,7 +390,7 @@ rtx_reader::unread_char (int ch) | |||
|    punctuation chars of rtx printed syntax.  */ | ||||
| 
 | ||||
| void | ||||
| read_name (struct md_name *name) | ||||
| rtx_reader::read_name (struct md_name *name) | ||||
| { | ||||
|   int c; | ||||
|   size_t i; | ||||
|  | @ -458,7 +434,7 @@ read_name (struct md_name *name) | |||
|   name->buffer[i] = 0; | ||||
|   name->string = name->buffer; | ||||
| 
 | ||||
|   if (md_constants) | ||||
|   if (m_md_constants) | ||||
|     { | ||||
|       /* Do constant expansion.  */ | ||||
|       struct md_constant *def; | ||||
|  | @ -468,7 +444,7 @@ read_name (struct md_name *name) | |||
| 	  struct md_constant tmp_def; | ||||
| 
 | ||||
| 	  tmp_def.name = name->string; | ||||
| 	  def = (struct md_constant *) htab_find (md_constants, &tmp_def); | ||||
| 	  def = (struct md_constant *) htab_find (m_md_constants, &tmp_def); | ||||
| 	  if (def) | ||||
| 	    name->string = def->value; | ||||
| 	} | ||||
|  | @ -479,8 +455,8 @@ read_name (struct md_name *name) | |||
| /* Subroutine of the string readers.  Handles backslash escapes.
 | ||||
|    Caller has read the backslash, but not placed it into the obstack.  */ | ||||
| 
 | ||||
| static void | ||||
| read_escape (void) | ||||
| void | ||||
| rtx_reader::read_escape () | ||||
| { | ||||
|   int c = read_char (); | ||||
| 
 | ||||
|  | @ -508,32 +484,32 @@ read_escape (void) | |||
|     case 'a': case 'b': case 'f': case 'n': case 'r': case 't': case 'v': | ||||
|     case '0': case '1': case '2': case '3': case '4': case '5': case '6': | ||||
|     case '7': case 'x': | ||||
|       obstack_1grow (&string_obstack, '\\'); | ||||
|       obstack_1grow (&m_string_obstack, '\\'); | ||||
|       break; | ||||
| 
 | ||||
|       /* \; makes stuff for a C string constant containing
 | ||||
| 	 newline and tab.  */ | ||||
|     case ';': | ||||
|       obstack_grow (&string_obstack, "\\n\\t", 4); | ||||
|       obstack_grow (&m_string_obstack, "\\n\\t", 4); | ||||
|       return; | ||||
| 
 | ||||
|       /* pass anything else through, but issue a warning.  */ | ||||
|     default: | ||||
|       fprintf (stderr, "%s:%d: warning: unrecognized escape \\%c\n", | ||||
| 	       rtx_reader_ptr->get_filename (), rtx_reader_ptr->get_lineno (), | ||||
| 	       get_filename (), get_lineno (), | ||||
| 	       c); | ||||
|       obstack_1grow (&string_obstack, '\\'); | ||||
|       obstack_1grow (&m_string_obstack, '\\'); | ||||
|       break; | ||||
|     } | ||||
| 
 | ||||
|   obstack_1grow (&string_obstack, c); | ||||
|   obstack_1grow (&m_string_obstack, c); | ||||
| } | ||||
| 
 | ||||
| /* Read a double-quoted string onto the obstack.  Caller has scanned
 | ||||
|    the leading quote.  */ | ||||
| 
 | ||||
| char * | ||||
| read_quoted_string (void) | ||||
| rtx_reader::read_quoted_string () | ||||
| { | ||||
|   int c; | ||||
| 
 | ||||
|  | @ -548,25 +524,25 @@ read_quoted_string (void) | |||
|       else if (c == '"' || c == EOF) | ||||
| 	break; | ||||
| 
 | ||||
|       obstack_1grow (&string_obstack, c); | ||||
|       obstack_1grow (&m_string_obstack, c); | ||||
|     } | ||||
| 
 | ||||
|   obstack_1grow (&string_obstack, 0); | ||||
|   return XOBFINISH (&string_obstack, char *); | ||||
|   obstack_1grow (&m_string_obstack, 0); | ||||
|   return XOBFINISH (&m_string_obstack, char *); | ||||
| } | ||||
| 
 | ||||
| /* Read a braced string (a la Tcl) onto the string obstack.  Caller
 | ||||
|    has scanned the leading brace.  Note that unlike quoted strings, | ||||
|    the outermost braces _are_ included in the string constant.  */ | ||||
| 
 | ||||
| static char * | ||||
| read_braced_string (void) | ||||
| char * | ||||
| rtx_reader::read_braced_string () | ||||
| { | ||||
|   int c; | ||||
|   int brace_depth = 1;  /* caller-processed */ | ||||
|   unsigned long starting_read_md_lineno = rtx_reader_ptr->get_lineno (); | ||||
|   unsigned long starting_read_md_lineno = get_lineno (); | ||||
| 
 | ||||
|   obstack_1grow (&string_obstack, '{'); | ||||
|   obstack_1grow (&m_string_obstack, '{'); | ||||
|   while (brace_depth) | ||||
|     { | ||||
|       c = read_char (); /* Read the string  */ | ||||
|  | @ -585,11 +561,11 @@ read_braced_string (void) | |||
| 	  ("missing closing } for opening brace on line %lu", | ||||
| 	   starting_read_md_lineno); | ||||
| 
 | ||||
|       obstack_1grow (&string_obstack, c); | ||||
|       obstack_1grow (&m_string_obstack, c); | ||||
|     } | ||||
| 
 | ||||
|   obstack_1grow (&string_obstack, 0); | ||||
|   return XOBFINISH (&string_obstack, char *); | ||||
|   obstack_1grow (&m_string_obstack, 0); | ||||
|   return XOBFINISH (&m_string_obstack, char *); | ||||
| } | ||||
| 
 | ||||
| /* Read some kind of string constant.  This is the high-level routine
 | ||||
|  | @ -597,7 +573,7 @@ read_braced_string (void) | |||
|    and dispatch to the appropriate string constant reader.  */ | ||||
| 
 | ||||
| char * | ||||
| read_string (int star_if_braced) | ||||
| rtx_reader::read_string (int star_if_braced) | ||||
| { | ||||
|   char *stringbuf; | ||||
|   int saw_paren = 0; | ||||
|  | @ -610,13 +586,13 @@ read_string (int star_if_braced) | |||
|       c = read_skip_spaces (); | ||||
|     } | ||||
| 
 | ||||
|   old_lineno = rtx_reader_ptr->get_lineno (); | ||||
|   old_lineno = get_lineno (); | ||||
|   if (c == '"') | ||||
|     stringbuf = read_quoted_string (); | ||||
|   else if (c == '{') | ||||
|     { | ||||
|       if (star_if_braced) | ||||
| 	obstack_1grow (&string_obstack, '*'); | ||||
| 	obstack_1grow (&m_string_obstack, '*'); | ||||
|       stringbuf = read_braced_string (); | ||||
|     } | ||||
|   else | ||||
|  | @ -625,15 +601,15 @@ read_string (int star_if_braced) | |||
|   if (saw_paren) | ||||
|     require_char_ws (')'); | ||||
| 
 | ||||
|   set_md_ptr_loc (stringbuf, rtx_reader_ptr->get_filename (), old_lineno); | ||||
|   set_md_ptr_loc (stringbuf, get_filename (), old_lineno); | ||||
|   return stringbuf; | ||||
| } | ||||
| 
 | ||||
| /* Skip the rest of a construct that started at line LINENO and that
 | ||||
|    is currently nested by DEPTH levels of parentheses.  */ | ||||
| 
 | ||||
| static void | ||||
| read_skip_construct (int depth, file_location loc) | ||||
| void | ||||
| rtx_reader::read_skip_construct (int depth, file_location loc) | ||||
| { | ||||
|   struct md_name name; | ||||
|   int c; | ||||
|  | @ -774,8 +750,8 @@ add_constant (htab_t defs, char *name, char *value, | |||
| /* Process a define_constants directive, starting with the optional space
 | ||||
|    after the "define_constants".  */ | ||||
| 
 | ||||
| static void | ||||
| handle_constants (void) | ||||
| void | ||||
| rtx_reader::handle_constants () | ||||
| { | ||||
|   int c; | ||||
|   htab_t defs; | ||||
|  | @ -783,8 +759,8 @@ handle_constants (void) | |||
|   require_char_ws ('['); | ||||
| 
 | ||||
|   /* Disable constant expansion during definition processing.  */ | ||||
|   defs = md_constants; | ||||
|   md_constants = 0; | ||||
|   defs = m_md_constants; | ||||
|   m_md_constants = 0; | ||||
|   while ( (c = read_skip_spaces ()) != ']') | ||||
|     { | ||||
|       struct md_name name, value; | ||||
|  | @ -798,7 +774,7 @@ handle_constants (void) | |||
| 
 | ||||
|       require_char_ws (')'); | ||||
|     } | ||||
|   md_constants = defs; | ||||
|   m_md_constants = defs; | ||||
| } | ||||
| 
 | ||||
| /* For every constant definition, call CALLBACK with two arguments:
 | ||||
|  | @ -806,9 +782,9 @@ handle_constants (void) | |||
|    Stop when CALLBACK returns zero.  */ | ||||
| 
 | ||||
| void | ||||
| traverse_md_constants (htab_trav callback, void *info) | ||||
| rtx_reader::traverse_md_constants (htab_trav callback, void *info) | ||||
| { | ||||
|   htab_traverse (md_constants, callback, info); | ||||
|   htab_traverse (get_md_constants (), callback, info); | ||||
| } | ||||
| 
 | ||||
| /* Return a malloc()ed decimal string that represents number NUMBER.  */ | ||||
|  | @ -828,8 +804,8 @@ md_decimal_string (int number) | |||
|    number on which the directive started and MD_P is true if the | ||||
|    directive is a define_enum rather than a define_c_enum.  */ | ||||
| 
 | ||||
| static void | ||||
| handle_enum (file_location loc, bool md_p) | ||||
| void | ||||
| rtx_reader::handle_enum (file_location loc, bool md_p) | ||||
| { | ||||
|   char *enum_name, *value_name; | ||||
|   struct md_name name; | ||||
|  | @ -839,7 +815,7 @@ handle_enum (file_location loc, bool md_p) | |||
|   int c; | ||||
| 
 | ||||
|   enum_name = read_string (false); | ||||
|   slot = htab_find_slot (enum_types, &enum_name, INSERT); | ||||
|   slot = htab_find_slot (m_enum_types, &enum_name, INSERT); | ||||
|   if (*slot) | ||||
|     { | ||||
|       def = (struct enum_type *) *slot; | ||||
|  | @ -883,7 +859,7 @@ handle_enum (file_location loc, bool md_p) | |||
| 	  value_name = xstrdup (name.string); | ||||
| 	  ev->name = value_name; | ||||
| 	} | ||||
|       ev->def = add_constant (md_constants, value_name, | ||||
|       ev->def = add_constant (get_md_constants (), value_name, | ||||
| 			      md_decimal_string (def->num_values), def); | ||||
| 
 | ||||
|       *def->tail_ptr = ev; | ||||
|  | @ -895,9 +871,9 @@ handle_enum (file_location loc, bool md_p) | |||
| /* Try to find the definition of the given enum.  Return null on failure.  */ | ||||
| 
 | ||||
| struct enum_type * | ||||
| lookup_enum_type (const char *name) | ||||
| rtx_reader::lookup_enum_type (const char *name) | ||||
| { | ||||
|   return (struct enum_type *) htab_find (enum_types, &name); | ||||
|   return (struct enum_type *) htab_find (m_enum_types, &name); | ||||
| } | ||||
| 
 | ||||
| /* For every enum definition, call CALLBACK with two arguments:
 | ||||
|  | @ -905,9 +881,9 @@ lookup_enum_type (const char *name) | |||
|    returns zero.  */ | ||||
| 
 | ||||
| void | ||||
| traverse_enum_types (htab_trav callback, void *info) | ||||
| rtx_reader::traverse_enum_types (htab_trav callback, void *info) | ||||
| { | ||||
|   htab_traverse (enum_types, callback, info); | ||||
|   htab_traverse (m_enum_types, callback, info); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -925,12 +901,43 @@ rtx_reader::rtx_reader () | |||
| { | ||||
|   /* Set the global singleton pointer.  */ | ||||
|   rtx_reader_ptr = this; | ||||
| 
 | ||||
|   obstack_init (&m_string_obstack); | ||||
| 
 | ||||
|   m_ptr_locs = htab_create (161, leading_ptr_hash, leading_ptr_eq_p, 0); | ||||
|   obstack_init (&m_ptr_loc_obstack); | ||||
| 
 | ||||
|   m_joined_conditions = htab_create (161, leading_ptr_hash, leading_ptr_eq_p, 0); | ||||
|   obstack_init (&m_joined_conditions_obstack); | ||||
| 
 | ||||
|   m_md_constants = htab_create (31, leading_string_hash, | ||||
| 				leading_string_eq_p, (htab_del) 0); | ||||
| 
 | ||||
|   m_enum_types = htab_create (31, leading_string_hash, | ||||
| 			      leading_string_eq_p, (htab_del) 0); | ||||
| 
 | ||||
|   /* Unlock the stdio streams.  */ | ||||
|   unlock_std_streams (); | ||||
| } | ||||
| 
 | ||||
| /* rtx_reader's destructor.  */ | ||||
| 
 | ||||
| rtx_reader::~rtx_reader () | ||||
| { | ||||
|   free (m_base_dir); | ||||
| 
 | ||||
|   htab_delete (m_enum_types); | ||||
| 
 | ||||
|   htab_delete (m_md_constants); | ||||
| 
 | ||||
|   obstack_free (&m_joined_conditions_obstack, NULL); | ||||
|   htab_delete (m_joined_conditions); | ||||
| 
 | ||||
|   obstack_free (&m_ptr_loc_obstack, NULL); | ||||
|   htab_delete (m_ptr_locs); | ||||
| 
 | ||||
|   obstack_free (&m_string_obstack, NULL); | ||||
| 
 | ||||
|   /* Clear the global singleton pointer.  */ | ||||
|   rtx_reader_ptr = NULL; | ||||
| } | ||||
|  | @ -1105,20 +1112,6 @@ rtx_reader::read_md_files (int argc, const char **argv, | |||
|   bool already_read_stdin; | ||||
|   int num_files; | ||||
| 
 | ||||
|   /* Initialize global data.  */ | ||||
|   obstack_init (&string_obstack); | ||||
|   ptr_locs = htab_create (161, leading_ptr_hash, leading_ptr_eq_p, 0); | ||||
|   obstack_init (&ptr_loc_obstack); | ||||
|   joined_conditions = htab_create (161, leading_ptr_hash, leading_ptr_eq_p, 0); | ||||
|   obstack_init (&joined_conditions_obstack); | ||||
|   md_constants = htab_create (31, leading_string_hash, | ||||
| 			      leading_string_eq_p, (htab_del) 0); | ||||
|   enum_types = htab_create (31, leading_string_hash, | ||||
| 			    leading_string_eq_p, (htab_del) 0); | ||||
| 
 | ||||
|   /* Unlock the stdio streams.  */ | ||||
|   unlock_std_streams (); | ||||
| 
 | ||||
|   /* First we loop over all the options.  */ | ||||
|   for (i = 1; i < argc; i++) | ||||
|     if (argv[i][0] == '-') | ||||
|  |  | |||
|  | @ -107,14 +107,54 @@ class rtx_reader | |||
| 
 | ||||
|   file_location get_current_location () const; | ||||
| 
 | ||||
|   /* Defined in read-md.c.  */ | ||||
|   int read_char (void); | ||||
|   void unread_char (int ch); | ||||
|   void read_name (struct md_name *name); | ||||
|   void read_escape (); | ||||
|   char *read_quoted_string (); | ||||
|   char *read_braced_string (); | ||||
|   char *read_string (int star_if_braced); | ||||
|   void read_skip_construct (int depth, file_location loc); | ||||
| 
 | ||||
|   void set_md_ptr_loc (const void *ptr, const char *filename, int lineno); | ||||
|   const struct ptr_loc *get_md_ptr_loc (const void *ptr); | ||||
|   void copy_md_ptr_loc (const void *new_ptr, const void *old_ptr); | ||||
|   void fprint_md_ptr_loc (FILE *outf, const void *ptr); | ||||
|   void print_md_ptr_loc (const void *ptr); | ||||
| 
 | ||||
|   struct enum_type *lookup_enum_type (const char *name); | ||||
|   void traverse_enum_types (htab_trav callback, void *info); | ||||
| 
 | ||||
|   void handle_constants (); | ||||
|   void traverse_md_constants (htab_trav callback, void *info); | ||||
|   void handle_enum (file_location loc, bool md_p); | ||||
| 
 | ||||
|   const char *join_c_conditions (const char *cond1, const char *cond2); | ||||
|   void fprint_c_condition (FILE *outf, const char *cond); | ||||
|   void print_c_condition (const char *cond); | ||||
| 
 | ||||
|   /* Defined in read-rtl.c.  */ | ||||
|   const char *apply_iterator_to_string (const char *string); | ||||
|   rtx copy_rtx_for_iterators (rtx original); | ||||
|   void read_conditions (); | ||||
|   void record_potential_iterator_use (struct iterator_group *group, | ||||
| 				      void *ptr, const char *name); | ||||
|   struct mapping *read_mapping (struct iterator_group *group, htab_t table); | ||||
|   bool read_rtx (const char *rtx_name, vec<rtx> *rtxen); | ||||
|   rtx read_rtx_code (const char *code_name); | ||||
|   void read_rtx_operand (rtx return_rtx, int idx); | ||||
|   rtx read_nested_rtx (); | ||||
|   rtx read_rtx_variadic (rtx form); | ||||
| 
 | ||||
|   const char *get_top_level_filename () const { return m_toplevel_fname; } | ||||
|   const char *get_filename () const { return m_read_md_filename; } | ||||
|   int get_lineno () const { return m_read_md_lineno; } | ||||
|   int get_colno () const { return m_read_md_colno; } | ||||
| 
 | ||||
|   struct obstack *get_string_obstack () { return &m_string_obstack; } | ||||
|   htab_t get_md_constants () { return m_md_constants; } | ||||
| 
 | ||||
|  private: | ||||
|   /* A singly-linked list of filenames.  */ | ||||
|   struct file_name_list { | ||||
|  | @ -159,6 +199,32 @@ class rtx_reader | |||
| 
 | ||||
|   /* A pointer to the null terminator of the md include chain.  */ | ||||
|   file_name_list **m_last_dir_md_include_ptr; | ||||
| 
 | ||||
|   /* Obstack used for allocating MD strings.  */ | ||||
|   struct obstack m_string_obstack; | ||||
| 
 | ||||
|   /* A table of ptr_locs, hashed on the PTR field.  */ | ||||
|   htab_t m_ptr_locs; | ||||
| 
 | ||||
|   /* An obstack for the above.  Plain xmalloc is a bit heavyweight for a
 | ||||
|      small structure like ptr_loc.  */ | ||||
|   struct obstack m_ptr_loc_obstack; | ||||
| 
 | ||||
|   /* A hash table of triples (A, B, C), where each of A, B and C is a condition
 | ||||
|      and A is equivalent to "B && C".  This is used to keep track of the source | ||||
|      of conditions that are made up of separate MD strings (such as the split | ||||
|      condition of a define_insn_and_split).  */ | ||||
|   htab_t m_joined_conditions; | ||||
| 
 | ||||
|   /* An obstack for allocating joined_conditions entries.  */ | ||||
|   struct obstack m_joined_conditions_obstack; | ||||
| 
 | ||||
|   /* A table of md_constant structures, hashed by name.  Null if no
 | ||||
|      constant expansion should occur.  */ | ||||
|   htab_t m_md_constants; | ||||
| 
 | ||||
|   /* A table of enum_type structures, hashed by name.  */ | ||||
|   htab_t m_enum_types; | ||||
| }; | ||||
| 
 | ||||
| /* Global singleton.  */ | ||||
|  | @ -175,7 +241,6 @@ class noop_reader : public rtx_reader | |||
|   void handle_unknown_directive (file_location, const char *); | ||||
| }; | ||||
| 
 | ||||
| extern struct obstack string_obstack; | ||||
| extern void (*include_callback) (const char *); | ||||
| 
 | ||||
| /* Read the next character from the MD file.  */ | ||||
|  | @ -196,12 +261,7 @@ unread_char (int ch) | |||
| 
 | ||||
| extern hashval_t leading_string_hash (const void *); | ||||
| extern int leading_string_eq_p (const void *, const void *); | ||||
| extern void copy_md_ptr_loc (const void *, const void *); | ||||
| extern void print_md_ptr_loc (const void *); | ||||
| extern void fprint_md_ptr_loc (FILE *, const void *); | ||||
| extern const char *join_c_conditions (const char *, const char *); | ||||
| extern void print_c_condition (const char *); | ||||
| extern void fprint_c_condition (FILE *, const char *); | ||||
| extern void message_at (file_location, const char *, ...) ATTRIBUTE_PRINTF_2; | ||||
| extern void error_at (file_location, const char *, ...) ATTRIBUTE_PRINTF_2; | ||||
| extern void fatal_at (file_location, const char *, ...) ATTRIBUTE_PRINTF_2; | ||||
|  | @ -210,13 +270,9 @@ extern void fatal_with_file_and_line (const char *, ...) | |||
| extern void fatal_expected_char (int, int) ATTRIBUTE_NORETURN; | ||||
| extern int read_skip_spaces (void); | ||||
| extern void require_char_ws (char expected); | ||||
| extern void read_name (struct md_name *); | ||||
| extern char *read_quoted_string (void); | ||||
| extern char *read_string (int); | ||||
| extern int n_comma_elts (const char *); | ||||
| extern const char *scan_comma_elt (const char **); | ||||
| extern void upcase_string (char *); | ||||
| extern void traverse_md_constants (htab_trav, void *); | ||||
| extern void traverse_enum_types (htab_trav, void *); | ||||
| extern struct enum_type *lookup_enum_type (const char *); | ||||
| 
 | ||||
|  |  | |||
|  | @ -106,10 +106,6 @@ htab_t subst_attr_to_iter_map = NULL; | |||
| const char *current_iterator_name; | ||||
| 
 | ||||
| static void validate_const_int (const char *); | ||||
| static rtx read_rtx_code (const char *); | ||||
| static void read_rtx_operand (rtx, int); | ||||
| static rtx read_nested_rtx (void); | ||||
| static rtx read_rtx_variadic (rtx); | ||||
| 
 | ||||
| /* The mode and code iterator structures.  */ | ||||
| static struct iterator_group modes, codes, ints, substs; | ||||
|  | @ -329,8 +325,8 @@ map_attr_string (const char *p) | |||
| /* Apply the current iterator values to STRING.  Return the new string
 | ||||
|    if any changes were needed, otherwise return STRING itself.  */ | ||||
| 
 | ||||
| static const char * | ||||
| apply_iterator_to_string (const char *string) | ||||
| const char * | ||||
| rtx_reader::apply_iterator_to_string (const char *string) | ||||
| { | ||||
|   char *base, *copy, *p, *start, *end; | ||||
|   struct map_value *v; | ||||
|  | @ -351,14 +347,14 @@ apply_iterator_to_string (const char *string) | |||
| 
 | ||||
|       /* Add everything between the last copied byte and the '<',
 | ||||
| 	 then add in the attribute value.  */ | ||||
|       obstack_grow (&string_obstack, base, start - base); | ||||
|       obstack_grow (&string_obstack, v->string, strlen (v->string)); | ||||
|       obstack_grow (&m_string_obstack, base, start - base); | ||||
|       obstack_grow (&m_string_obstack, v->string, strlen (v->string)); | ||||
|       base = end + 1; | ||||
|     } | ||||
|   if (base != copy) | ||||
|     { | ||||
|       obstack_grow (&string_obstack, base, strlen (base) + 1); | ||||
|       copy = XOBFINISH (&string_obstack, char *); | ||||
|       obstack_grow (&m_string_obstack, base, strlen (base) + 1); | ||||
|       copy = XOBFINISH (&m_string_obstack, char *); | ||||
|       copy_md_ptr_loc (copy, string); | ||||
|       return copy; | ||||
|     } | ||||
|  | @ -368,8 +364,8 @@ apply_iterator_to_string (const char *string) | |||
| /* Return a deep copy of X, substituting the current iterator
 | ||||
|    values into any strings.  */ | ||||
| 
 | ||||
| static rtx | ||||
| copy_rtx_for_iterators (rtx original) | ||||
| rtx | ||||
| rtx_reader::copy_rtx_for_iterators (rtx original) | ||||
| { | ||||
|   const char *format_ptr, *p; | ||||
|   int i, j; | ||||
|  | @ -428,7 +424,7 @@ add_condition_to_string (const char *original, const char *extra) | |||
| { | ||||
|   if (original != 0 && original[0] == '&' && original[1] == '&') | ||||
|     return original; | ||||
|   return join_c_conditions (original, extra); | ||||
|   return rtx_reader_ptr->join_c_conditions (original, extra); | ||||
| } | ||||
| 
 | ||||
| /* Like add_condition, but applied to all conditions in rtx X.  */ | ||||
|  | @ -543,10 +539,10 @@ apply_iterators (rtx original, vec<rtx> *queue) | |||
| 	    continue; | ||||
| 	  v = iuse->iterator->current_value; | ||||
| 	  iuse->iterator->group->apply_iterator (iuse->ptr, v->number); | ||||
| 	  condition = join_c_conditions (condition, v->string); | ||||
| 	  condition = rtx_reader_ptr->join_c_conditions (condition, v->string); | ||||
| 	} | ||||
|       apply_attribute_uses (); | ||||
|       x = copy_rtx_for_iterators (original); | ||||
|       x = rtx_reader_ptr->copy_rtx_for_iterators (original); | ||||
|       add_condition_to_rtx (x, condition); | ||||
| 
 | ||||
|       /* We apply subst iterator after RTL-template is copied, as during
 | ||||
|  | @ -738,8 +734,8 @@ atoll (const char *p) | |||
|    generated by (the program generated by) genconditions.c, and | ||||
|    slipped in at the beginning of the sequence of MD files read by | ||||
|    most of the other generators.  */ | ||||
| static void | ||||
| read_conditions (void) | ||||
| void | ||||
| rtx_reader::read_conditions () | ||||
| { | ||||
|   int c; | ||||
| 
 | ||||
|  | @ -837,9 +833,9 @@ record_attribute_use (struct iterator_group *group, void *ptr, | |||
|    for group GROUP.  PTR is the value to pass to GROUP's apply_iterator | ||||
|    callback.  */ | ||||
| 
 | ||||
| static void | ||||
| record_potential_iterator_use (struct iterator_group *group, void *ptr, | ||||
| 			       const char *name) | ||||
| void | ||||
| rtx_reader::record_potential_iterator_use (struct iterator_group *group, | ||||
| 					   void *ptr, const char *name) | ||||
| { | ||||
|   struct mapping *m; | ||||
|   size_t len; | ||||
|  | @ -849,8 +845,8 @@ record_potential_iterator_use (struct iterator_group *group, void *ptr, | |||
|     { | ||||
|       /* Copy the attribute string into permanent storage, without the
 | ||||
| 	 angle brackets around it.  */ | ||||
|       obstack_grow0 (&string_obstack, name + 1, len - 2); | ||||
|       record_attribute_use (group, ptr, XOBFINISH (&string_obstack, char *)); | ||||
|       obstack_grow0 (&m_string_obstack, name + 1, len - 2); | ||||
|       record_attribute_use (group, ptr, XOBFINISH (&m_string_obstack, char *)); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|  | @ -872,8 +868,8 @@ record_potential_iterator_use (struct iterator_group *group, void *ptr, | |||
|    Represent the declaration as a "mapping" structure; add it to TABLE | ||||
|    (which belongs to GROUP) and return it.  */ | ||||
| 
 | ||||
| static struct mapping * | ||||
| read_mapping (struct iterator_group *group, htab_t table) | ||||
| struct mapping * | ||||
| rtx_reader::read_mapping (struct iterator_group *group, htab_t table) | ||||
| { | ||||
|   struct md_name name; | ||||
|   struct mapping *m; | ||||
|  | @ -974,7 +970,7 @@ read_subst_mapping (htab_t subst_iters_table, htab_t subst_attrs_table, | |||
|   int i; | ||||
| 
 | ||||
|   for (i = 0; i < 4; i++) | ||||
|     attr_operands[i] = read_string (false); | ||||
|     attr_operands[i] = rtx_reader_ptr->read_string (false); | ||||
| 
 | ||||
|   add_define_subst_attr (attr_operands, queue); | ||||
| 
 | ||||
|  | @ -1019,7 +1015,7 @@ check_code_iterator (struct mapping *iterator) | |||
|    store the list of rtxes as an EXPR_LIST in *X.  */ | ||||
| 
 | ||||
| bool | ||||
| read_rtx (const char *rtx_name, vec<rtx> *rtxen) | ||||
| rtx_reader::read_rtx (const char *rtx_name, vec<rtx> *rtxen) | ||||
| { | ||||
|   static bool initialized = false; | ||||
| 
 | ||||
|  | @ -1087,8 +1083,8 @@ read_rtx (const char *rtx_name, vec<rtx> *rtxen) | |||
|    either an rtx code or a code iterator.  Parse the rest of the rtx and | ||||
|    return it.  */ | ||||
| 
 | ||||
| static rtx | ||||
| read_rtx_code (const char *code_name) | ||||
| rtx | ||||
| rtx_reader::read_rtx_code (const char *code_name) | ||||
| { | ||||
|   RTX_CODE code; | ||||
|   struct mapping *iterator; | ||||
|  | @ -1200,8 +1196,8 @@ read_rtx_code (const char *code_name) | |||
|    based on the corresponding format character within GET_RTX_FORMAT | ||||
|    for the GET_CODE (RETURN_RTX).  */ | ||||
| 
 | ||||
| static void | ||||
| read_rtx_operand (rtx return_rtx, int idx) | ||||
| void | ||||
| rtx_reader::read_rtx_operand (rtx return_rtx, int idx) | ||||
| { | ||||
|   RTX_CODE code = GET_CODE (return_rtx); | ||||
|   const char *format_ptr = GET_RTX_FORMAT (code); | ||||
|  | @ -1304,17 +1300,17 @@ read_rtx_operand (rtx return_rtx, int idx) | |||
| 		|| GET_CODE (return_rtx) == DEFINE_INSN_AND_SPLIT)) | ||||
| 	  { | ||||
| 	    char line_name[20]; | ||||
| 	    const char *read_md_filename = rtx_reader_ptr->get_filename (); | ||||
| 	    const char *read_md_filename = get_filename (); | ||||
| 	    const char *fn = (read_md_filename ? read_md_filename : "rtx"); | ||||
| 	    const char *slash; | ||||
| 	    for (slash = fn; *slash; slash ++) | ||||
| 	      if (*slash == '/' || *slash == '\\' || *slash == ':') | ||||
| 		fn = slash + 1; | ||||
| 	    obstack_1grow (&string_obstack, '*'); | ||||
| 	    obstack_grow (&string_obstack, fn, strlen (fn)); | ||||
| 	    sprintf (line_name, ":%d", rtx_reader_ptr->get_lineno ()); | ||||
| 	    obstack_grow (&string_obstack, line_name, strlen (line_name)+1); | ||||
| 	    stringbuf = XOBFINISH (&string_obstack, char *); | ||||
| 	    obstack_1grow (&m_string_obstack, '*'); | ||||
| 	    obstack_grow (&m_string_obstack, fn, strlen (fn)); | ||||
| 	    sprintf (line_name, ":%d", get_lineno ()); | ||||
| 	    obstack_grow (&m_string_obstack, line_name, strlen (line_name)+1); | ||||
| 	    stringbuf = XOBFINISH (&m_string_obstack, char *); | ||||
| 	  } | ||||
| 
 | ||||
| 	/* Find attr-names in the string.  */ | ||||
|  | @ -1402,8 +1398,8 @@ read_rtx_operand (rtx return_rtx, int idx) | |||
| 
 | ||||
| /* Read a nested rtx construct from the MD file and return it.  */ | ||||
| 
 | ||||
| static rtx | ||||
| read_nested_rtx (void) | ||||
| rtx | ||||
| rtx_reader::read_nested_rtx () | ||||
| { | ||||
|   struct md_name name; | ||||
|   rtx return_rtx; | ||||
|  | @ -1427,8 +1423,8 @@ read_nested_rtx (void) | |||
|    When called, FORM is (thing x1 x2), and the file position | ||||
|    is just past the leading parenthesis of x3.  Only works | ||||
|    for THINGs which are dyadic expressions, e.g. AND, IOR.  */ | ||||
| static rtx | ||||
| read_rtx_variadic (rtx form) | ||||
| rtx | ||||
| rtx_reader::read_rtx_variadic (rtx form) | ||||
| { | ||||
|   char c = '('; | ||||
|   rtx p = form, q; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 David Malcolm
						David Malcolm