I still have not heard from i386 or ia64 folks.  Anyone?

On 4/24/13, Lawrence Crowl <cr...@googlers.com> wrote:
> This patch is a consolodation of the hash_table patches to the
> cxx-conversion branch for files under gcc/config.
>
> Recipients:
> config/arm/arm.c - ni...@redhat.com, ramana.radhakrish...@arm.com
> config/ia64/ia64.c - wil...@tuliptree.org, sell...@mips.com
> config/mips/mips.c - rdsandif...@googlemail.com
> config/sol2.c - r...@cebitec.uni-bielefeld.de
> config/i386/winnt.c - c...@gcc.gnu.org, kti...@redhat.com
> global - rguent...@suse.de, dnovi...@google.com
>
> Update various hash tables from htab_t to hash_table.
> Modify types and calls to match.
>
> * config/arm/arm.c'arm_libcall_uses_aapcs_base::libcall_htab
>
> Fold libcall_eq and libcall_hash into new struct libcall_hasher.
>
> * config/ia64/ia64.c'bundle_state_table
>
> Fold bundle_state_hash and bundle_state_eq_p into new struct
> bundle_state_hasher.
>
> * config/mips/mips.c'mips_offset_table
>
> Fold mips_lo_sum_offset_hash and mips_lo_sum_offset_eq into new
> struct mips_lo_sum_offset_hasher.
>
> In mips_reorg_process_insns, change call to for_each_rtx to pass
> a pointer to the hash_table rather than a htab_t.  This change
> requires then dereferencing that pointer in mips_record_lo_sum to
> obtain the hash_table.
>
> * config/sol2.c'solaris_comdat_htab
>
> Fold comdat_hash and comdat_eq into new struct comdat_entry_hasher.
>
> * config/i386/winnt.c'i386_pe_section_type_flags::htab
>
> * config/i386/winnt.c'i386_find_on_wrapper_list::wrappers
>
> Fold wrapper_strcmp into new struct wrapped_symbol_hasher.
>
> Tested on x86_64.  Tested with config-list.mk.
>
>
> Index: gcc/ChangeLog
>
> 2013-04-24  Lawrence Crowl  <cr...@google.com>
>
>       * config/arm/t-arm: Update for below.
>
>       * config/arm/arm.c (arm_libcall_uses_aapcs_base::libcall_htab):
>       Change type to hash_table.  Update dependent calls and types.
>
>       * config/i386/t-cygming: Update for below.
>
>       * config/i386/t-interix: Update for below.
>
>       * config/i386/winnt.c (i386_pe_section_type_flags::htab):
>       Change type to hash_table.  Update dependent calls and types.
>       (i386_find_on_wrapper_list::wrappers): Likewise.
>
>       * config/ia64/t-ia64: Update for below.
>
>       * config/ia64/ia64.c (bundle_state_table):
>       Change type to hash_table.  Update dependent calls and types.
>
>       * config/mips/mips.c (mips_reorg_process_insns::htab):
>       Change type to hash_table.  Update dependent calls and types.
>
>       * config/sol2.c (solaris_comdat_htab):
>       Change type to hash_table.  Update dependent calls and types.
>
>       * config/t-sol2: Update for above.
>
> Index: gcc/config/ia64/ia64.c
> ===================================================================
> --- gcc/config/ia64/ia64.c    (revision 198213)
> +++ gcc/config/ia64/ia64.c    (working copy)
> @@ -47,7 +47,7 @@ along with GCC; see the file COPYING3.
>  #include "target-def.h"
>  #include "common/common-target.h"
>  #include "tm_p.h"
> -#include "hashtab.h"
> +#include "hash-table.h"
>  #include "langhooks.h"
>  #include "gimple.h"
>  #include "intl.h"
> @@ -257,8 +257,6 @@ static struct bundle_state *get_free_bun
>  static void free_bundle_state (struct bundle_state *);
>  static void initiate_bundle_states (void);
>  static void finish_bundle_states (void);
> -static unsigned bundle_state_hash (const void *);
> -static int bundle_state_eq_p (const void *, const void *);
>  static int insert_bundle_state (struct bundle_state *);
>  static void initiate_bundle_state_table (void);
>  static void finish_bundle_state_table (void);
> @@ -8528,18 +8526,21 @@ finish_bundle_states (void)
>      }
>  }
>
> -/* Hash table of the bundle states.  The key is dfa_state and insn_num
> -   of the bundle states.  */
> +/* Hashtable helpers.  */
>
> -static htab_t bundle_state_table;
> +struct bundle_state_hasher : typed_noop_remove <bundle_state>
> +{
> +  typedef bundle_state value_type;
> +  typedef bundle_state compare_type;
> +  static inline hashval_t hash (const value_type *);
> +  static inline bool equal (const value_type *, const compare_type *);
> +};
>
>  /* The function returns hash of BUNDLE_STATE.  */
>
> -static unsigned
> -bundle_state_hash (const void *bundle_state)
> +inline hashval_t
> +bundle_state_hasher::hash (const value_type *state)
>  {
> -  const struct bundle_state *const state
> -    = (const struct bundle_state *) bundle_state;
>    unsigned result, i;
>
>    for (result = i = 0; i < dfa_state_size; i++)
> @@ -8550,19 +8551,20 @@ bundle_state_hash (const void *bundle_st
>
>  /* The function returns nonzero if the bundle state keys are equal.  */
>
> -static int
> -bundle_state_eq_p (const void *bundle_state_1, const void *bundle_state_2)
> +inline bool
> +bundle_state_hasher::equal (const value_type *state1,
> +                         const compare_type *state2)
>  {
> -  const struct bundle_state *const state1
> -    = (const struct bundle_state *) bundle_state_1;
> -  const struct bundle_state *const state2
> -    = (const struct bundle_state *) bundle_state_2;
> -
>    return (state1->insn_num == state2->insn_num
>         && memcmp (state1->dfa_state, state2->dfa_state,
>                    dfa_state_size) == 0);
>  }
>
> +/* Hash table of the bundle states.  The key is dfa_state and insn_num
> +   of the bundle states.  */
> +
> +static hash_table <bundle_state_hasher> bundle_state_table;
> +
>  /* The function inserts the BUNDLE_STATE into the hash table.  The
>     function returns nonzero if the bundle has been inserted into the
>     table.  The table contains the best bundle state with given key.  */
> @@ -8570,39 +8572,35 @@ bundle_state_eq_p (const void *bundle_st
>  static int
>  insert_bundle_state (struct bundle_state *bundle_state)
>  {
> -  void **entry_ptr;
> +  struct bundle_state **entry_ptr;
>
> -  entry_ptr = htab_find_slot (bundle_state_table, bundle_state, INSERT);
> +  entry_ptr = bundle_state_table.find_slot (bundle_state, INSERT);
>    if (*entry_ptr == NULL)
>      {
>        bundle_state->next = index_to_bundle_states
> [bundle_state->insn_num];
>        index_to_bundle_states [bundle_state->insn_num] = bundle_state;
> -      *entry_ptr = (void *) bundle_state;
> +      *entry_ptr = bundle_state;
>        return TRUE;
>      }
> -  else if (bundle_state->cost < ((struct bundle_state *) *entry_ptr)->cost
> -        || (bundle_state->cost == ((struct bundle_state *) *entry_ptr)->cost
> -            && (((struct bundle_state *)*entry_ptr)->accumulated_insns_num
> +  else if (bundle_state->cost < (*entry_ptr)->cost
> +        || (bundle_state->cost == (*entry_ptr)->cost
> +            && ((*entry_ptr)->accumulated_insns_num
>                  > bundle_state->accumulated_insns_num
> -                || (((struct bundle_state *)
> -                     *entry_ptr)->accumulated_insns_num
> +                || ((*entry_ptr)->accumulated_insns_num
>                      == bundle_state->accumulated_insns_num
> -                    && (((struct bundle_state *)
> -                         *entry_ptr)->branch_deviation
> +                    && ((*entry_ptr)->branch_deviation
>                          > bundle_state->branch_deviation
> -                        || (((struct bundle_state *)
> -                             *entry_ptr)->branch_deviation
> +                        || ((*entry_ptr)->branch_deviation
>                              == bundle_state->branch_deviation
> -                            && ((struct bundle_state *)
> -                                *entry_ptr)->middle_bundle_stops
> +                            && (*entry_ptr)->middle_bundle_stops
>                              > bundle_state->middle_bundle_stops))))))
>
>      {
>        struct bundle_state temp;
>
> -      temp = *(struct bundle_state *) *entry_ptr;
> -      *(struct bundle_state *) *entry_ptr = *bundle_state;
> -      ((struct bundle_state *) *entry_ptr)->next = temp.next;
> +      temp = **entry_ptr;
> +      **entry_ptr = *bundle_state;
> +      (*entry_ptr)->next = temp.next;
>        *bundle_state = temp;
>      }
>    return FALSE;
> @@ -8613,8 +8611,7 @@ insert_bundle_state (struct bundle_state
>  static void
>  initiate_bundle_state_table (void)
>  {
> -  bundle_state_table = htab_create (50, bundle_state_hash,
> bundle_state_eq_p,
> -                                 (htab_del) 0);
> +  bundle_state_table.create (50);
>  }
>
>  /* Finish work with the hash table.  */
> @@ -8622,7 +8619,7 @@ initiate_bundle_state_table (void)
>  static void
>  finish_bundle_state_table (void)
>  {
> -  htab_delete (bundle_state_table);
> +  bundle_state_table.dispose ();
>  }
>
>  
> Index: gcc/config/ia64/t-ia64
> ===================================================================
> --- gcc/config/ia64/t-ia64    (revision 198213)
> +++ gcc/config/ia64/t-ia64    (working copy)
> @@ -24,4 +24,5 @@ ia64-c.o: $(srcdir)/config/ia64/ia64-c.c
>  # genattrtab generates very long string literals.
>  insn-attrtab.o-warn = -Wno-error
>
> -ia64.o: debug.h $(PARAMS_H) sel-sched.h reload.h $(OPTS_H) dumpfile.h
> +ia64.o: $(srcdir)/config/ia64/ia64.c debug.h $(PARAMS_H) sel-sched.h
> reload.h \
> +     $(OPTS_H) dumpfile.h $(HASH_TABLE_H)
> Index: gcc/config/mips/mips.c
> ===================================================================
> --- gcc/config/mips/mips.c    (revision 198213)
> +++ gcc/config/mips/mips.c    (working copy)
> @@ -43,7 +43,7 @@ along with GCC; see the file COPYING3.
>  #include "tm_p.h"
>  #include "ggc.h"
>  #include "gstab.h"
> -#include "hashtab.h"
> +#include "hash-table.h"
>  #include "debug.h"
>  #include "target.h"
>  #include "target-def.h"
> @@ -15883,30 +15883,43 @@ mips_hash_base (rtx base)
>    return hash_rtx (base, GET_MODE (base), &do_not_record_p, NULL, false);
>  }
>
> +/* Hashtable helpers.  */
> +
> +struct mips_lo_sum_offset_hasher : typed_free_remove <mips_lo_sum_offset>
> +{
> +  typedef mips_lo_sum_offset value_type;
> +  typedef rtx_def compare_type;
> +  static inline hashval_t hash (const value_type *);
> +  static inline bool equal (const value_type *, const compare_type *);
> +};
> +
>  /* Hash-table callbacks for mips_lo_sum_offsets.  */
>
> -static hashval_t
> -mips_lo_sum_offset_hash (const void *entry)
> +inline hashval_t
> +mips_lo_sum_offset_hasher::hash (const value_type *entry)
>  {
> -  return mips_hash_base (((const struct mips_lo_sum_offset *)
> entry)->base);
> +  return mips_hash_base (entry->base);
>  }
>
> -static int
> -mips_lo_sum_offset_eq (const void *entry, const void *value)
> +inline bool
> +mips_lo_sum_offset_hasher::equal (const value_type *entry,
> +                               const compare_type *value)
>  {
> -  return rtx_equal_p (((const struct mips_lo_sum_offset *) entry)->base,
> -                   (const_rtx) value);
> +  return rtx_equal_p (entry->base, value);
>  }
>
> +typedef hash_table <mips_lo_sum_offset_hasher> mips_offset_table;
> +
>  /* Look up symbolic constant X in HTAB, which is a hash table of
>     mips_lo_sum_offsets.  If OPTION is NO_INSERT, return true if X can be
>     paired with a recorded LO_SUM, otherwise record X in the table.  */
>
>  static bool
> -mips_lo_sum_offset_lookup (htab_t htab, rtx x, enum insert_option option)
> +mips_lo_sum_offset_lookup (mips_offset_table htab, rtx x,
> +                        enum insert_option option)
>  {
>    rtx base, offset;
> -  void **slot;
> +  mips_lo_sum_offset **slot;
>    struct mips_lo_sum_offset *entry;
>
>    /* Split X into a base and offset.  */
> @@ -15915,7 +15928,7 @@ mips_lo_sum_offset_lookup (htab_t htab,
>      base = UNSPEC_ADDRESS (base);
>
>    /* Look up the base in the hash table.  */
> -  slot = htab_find_slot_with_hash (htab, base, mips_hash_base (base),
> option);
> +  slot = htab.find_slot_with_hash (base, mips_hash_base (base), option);
>    if (slot == NULL)
>      return false;
>
> @@ -15945,7 +15958,8 @@ static int
>  mips_record_lo_sum (rtx *loc, void *data)
>  {
>    if (GET_CODE (*loc) == LO_SUM)
> -    mips_lo_sum_offset_lookup ((htab_t) data, XEXP (*loc, 1), INSERT);
> +    mips_lo_sum_offset_lookup (*(mips_offset_table*)data,
> +                            XEXP (*loc, 1), INSERT);
>    return 0;
>  }
>
> @@ -15954,7 +15968,7 @@ mips_record_lo_sum (rtx *loc, void *data
>     LO_SUMs in the current function.  */
>
>  static bool
> -mips_orphaned_high_part_p (htab_t htab, rtx insn)
> +mips_orphaned_high_part_p (mips_offset_table htab, rtx insn)
>  {
>    enum mips_symbol_type type;
>    rtx x, set;
> @@ -16062,7 +16076,7 @@ mips_reorg_process_insns (void)
>  {
>    rtx insn, last_insn, subinsn, next_insn, lo_reg, delayed_reg;
>    int hilo_delay;
> -  htab_t htab;
> +  mips_offset_table htab;
>
>    /* Force all instructions to be split into their final form.  */
>    split_all_insns_noflow ();
> @@ -16099,14 +16113,13 @@ mips_reorg_process_insns (void)
>    if (TARGET_FIX_VR4130 && !ISA_HAS_MACCHI)
>      cfun->machine->all_noreorder_p = false;
>
> -  htab = htab_create (37, mips_lo_sum_offset_hash,
> -                   mips_lo_sum_offset_eq, free);
> +  htab.create (37);
>
>    /* Make a first pass over the instructions, recording all the LO_SUMs.
> */
>    for (insn = get_insns (); insn != 0; insn = NEXT_INSN (insn))
>      FOR_EACH_SUBINSN (subinsn, insn)
>        if (USEFUL_INSN_P (subinsn))
> -     for_each_rtx (&PATTERN (subinsn), mips_record_lo_sum, htab);
> +     for_each_rtx (&PATTERN (subinsn), mips_record_lo_sum, &htab);
>
>    last_insn = 0;
>    hilo_delay = 2;
> @@ -16163,7 +16176,7 @@ mips_reorg_process_insns (void)
>       }
>      }
>
> -  htab_delete (htab);
> +  htab.dispose ();
>  }
>
>  /* Return true if the function has a long branch instruction.  */
> Index: gcc/config/sol2.c
> ===================================================================
> --- gcc/config/sol2.c (revision 198213)
> +++ gcc/config/sol2.c (working copy)
> @@ -29,7 +29,7 @@ along with GCC; see the file COPYING3.
>  #include "tm_p.h"
>  #include "diagnostic-core.h"
>  #include "ggc.h"
> -#include "hashtab.h"
> +#include "hash-table.h"
>
>  tree solaris_pending_aligns, solaris_pending_inits, solaris_pending_finis;
>
> @@ -157,10 +157,6 @@ solaris_assemble_visibility (tree decl,
>  #endif
>  }
>
> -/* Hash table of group signature symbols.  */
> -
> -static htab_t solaris_comdat_htab;
> -
>  /* Group section information entry stored in solaris_comdat_htab.  */
>
>  typedef struct comdat_entry
> @@ -171,25 +167,34 @@ typedef struct comdat_entry
>    const char *sig;
>  } comdat_entry;
>
> -/* Helper routines for maintaining solaris_comdat_htab.  */
> +/* Helpers for maintaining solaris_comdat_htab.  */
>
> -static hashval_t
> -comdat_hash (const void *p)
> +struct comdat_entry_hasher : typed_noop_remove <comdat_entry>
>  {
> -  const comdat_entry *entry = (const comdat_entry *) p;
> +  typedef comdat_entry value_type;
> +  typedef comdat_entry compare_type;
> +  static inline hashval_t hash (const value_type *);
> +  static inline bool equal (const value_type *, const compare_type *);
> +  static inline void remove (value_type *);
> +};
>
> +inline hashval_t
> +comdat_entry_hasher::hash (const value_type *entry)
> +{
>    return htab_hash_string (entry->sig);
>  }
>
> -static int
> -comdat_eq (const void *p1, const void *p2)
> +inline bool
> +comdat_entry_hasher::equal (const value_type *entry1,
> +                         const compare_type *entry2)
>  {
> -  const comdat_entry *entry1 = (const comdat_entry *) p1;
> -  const comdat_entry *entry2 = (const comdat_entry *) p2;
> -
>    return strcmp (entry1->sig, entry2->sig) == 0;
>  }
>
> +/* Hash table of group signature symbols.  */
> +
> +static hash_table <comdat_entry_hasher> solaris_comdat_htab;
> +
>  /* Output assembly to switch to COMDAT group section NAME with attributes
>     FLAGS and group signature symbol DECL, using Sun as syntax.  */
>
> @@ -229,12 +234,11 @@ solaris_elf_asm_comdat_section (const ch
>       identify the missing ones without changing the affected frontents,
>       remember the signature symbols and emit those not marked
>       TREE_SYMBOL_REFERENCED in solaris_file_end.  */
> -  if (solaris_comdat_htab == NULL)
> -    solaris_comdat_htab = htab_create_alloc (37, comdat_hash, comdat_eq,
> NULL,
> -                                          xcalloc, free);
> +  if (!solaris_comdat_htab.is_created ())
> +    solaris_comdat_htab.create (37);
>
>    entry.sig = signature;
> -  slot = (comdat_entry **) htab_find_slot (solaris_comdat_htab,
> &entry, INSERT);
> +  slot = solaris_comdat_htab.find_slot (&entry, INSERT);
>
>    if (*slot == NULL)
>      {
> @@ -250,10 +254,11 @@ solaris_elf_asm_comdat_section (const ch
>
>  /* Define unreferenced COMDAT group signature symbol corresponding to SLOT.
>  */
>
> -static int
> -solaris_define_comdat_signature (void **slot, void *aux ATTRIBUTE_UNUSED)
> +int
> +solaris_define_comdat_signature (comdat_entry **slot,
> +                              void *aux ATTRIBUTE_UNUSED)
>  {
> -  comdat_entry *entry = *(comdat_entry **) slot;
> +  comdat_entry *entry = *slot;
>    tree decl = entry->decl;
>
>    if (TREE_CODE (decl) != IDENTIFIER_NODE)
> @@ -277,10 +282,10 @@ solaris_define_comdat_signature (void **
>  void
>  solaris_file_end (void)
>  {
> -  if (solaris_comdat_htab == NULL)
> +  if (!solaris_comdat_htab.is_created ())
>      return;
>
> -  htab_traverse (solaris_comdat_htab, solaris_define_comdat_signature,
> NULL);
> +  solaris_comdat_htab.traverse <void *,
> solaris_define_comdat_signature> (NULL);
>  }
>
>  void
> Index: gcc/config/i386/winnt.c
> ===================================================================
> --- gcc/config/i386/winnt.c   (revision 198213)
> +++ gcc/config/i386/winnt.c   (working copy)
> @@ -30,7 +30,7 @@ along with GCC; see the file COPYING3.
>  #include "flags.h"
>  #include "tm_p.h"
>  #include "diagnostic-core.h"
> -#include "hashtab.h"
> +#include "hash-table.h"
>  #include "langhooks.h"
>  #include "ggc.h"
>  #include "target.h"
> @@ -449,7 +449,7 @@ i386_pe_reloc_rw_mask (void)
>  unsigned int
>  i386_pe_section_type_flags (tree decl, const char *name, int reloc)
>  {
> -  static htab_t htab;
> +  static hash_table <pointer_hash <unsigned int> > htab;
>    unsigned int flags;
>    unsigned int **slot;
>
> @@ -460,8 +460,8 @@ i386_pe_section_type_flags (tree decl, c
>    /* The names we put in the hashtable will always be the unique
>       versions given to us by the stringtable, so we can just use
>       their addresses as the keys.  */
> -  if (!htab)
> -    htab = htab_create (31, htab_hash_pointer, htab_eq_pointer, NULL);
> +  if (!htab.is_created ())
> +    htab.create (31);
>
>    if (decl && TREE_CODE (decl) == FUNCTION_DECL)
>      flags = SECTION_CODE;
> @@ -480,7 +480,7 @@ i386_pe_section_type_flags (tree decl, c
>      flags |= SECTION_LINKONCE;
>
>    /* See if we already have an entry for this section.  */
> -  slot = (unsigned int **) htab_find_slot (htab, name, INSERT);
> +  slot = htab.find_slot ((unsigned int *)name, INSERT);
>    if (!*slot)
>      {
>        *slot = (unsigned int *) xmalloc (sizeof (unsigned int));
> @@ -714,12 +714,29 @@ i386_pe_record_stub (const char *name)
>
>  #ifdef CXX_WRAP_SPEC_LIST
>
> +/* Hashtable helpers.  */
> +
> +struct wrapped_symbol_hasher : typed_noop_remove <char>
> +{
> +  typedef char value_type;
> +  typedef char compare_type;
> +  static inline hashval_t hash (const value_type *);
> +  static inline bool equal (const value_type *, const compare_type *);
> +  static inline void remove (value_type *);
> +};
> +
> +inline hashval_t
> +wrapped_symbol_hasher::hash (const value_type *v)
> +{
> +  return htab_hash_string (v);
> +}
> +
>  /*  Hash table equality helper function.  */
>
> -static int
> -wrapper_strcmp (const void *x, const void *y)
> +inline bool
> +wrapped_symbol_hasher::equal (const value_type *x, const compare_type *y)
>  {
> -  return !strcmp ((const char *) x, (const char *) y);
> +  return !strcmp (x, y);
>  }
>
>  /* Search for a function named TARGET in the list of library wrappers
> @@ -733,7 +750,7 @@ static const char *
>  i386_find_on_wrapper_list (const char *target)
>  {
>    static char first_time = 1;
> -  static htab_t wrappers;
> +  static hash_table <wrapped_symbol_hasher> wrappers;
>
>    if (first_time)
>      {
> @@ -746,8 +763,7 @@ i386_find_on_wrapper_list (const char *t
>        char *bufptr;
>        /* Breaks up the char array into separated strings
>           strings and enter them into the hash table.  */
> -      wrappers = htab_create_alloc (8, htab_hash_string, wrapper_strcmp,
> -     0, xcalloc, free);
> +      wrappers.create (8);
>        for (bufptr = wrapper_list_buffer; *bufptr; ++bufptr)
>       {
>         char *found = NULL;
> @@ -760,12 +776,12 @@ i386_find_on_wrapper_list (const char *t
>         if (*bufptr)
>           *bufptr = 0;
>         if (found)
> -         *htab_find_slot (wrappers, found, INSERT) = found;
> +         *wrappers.find_slot (found, INSERT) = found;
>       }
>        first_time = 0;
>      }
>
> -  return (const char *) htab_find (wrappers, target);
> +  return wrappers.find (target);
>  }
>
>  #endif /* CXX_WRAP_SPEC_LIST */
> Index: gcc/config/i386/t-interix
> ===================================================================
> --- gcc/config/i386/t-interix (revision 198213)
> +++ gcc/config/i386/t-interix (working copy)
> @@ -18,7 +18,7 @@
>
>  winnt.o: $(srcdir)/config/i386/winnt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h
> \
>    $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
> -  $(TM_P_H) $(HASHTAB_H) $(GGC_H)
> +  $(TM_P_H) $(HASH_TABLE_H) $(GGC_H)
>       $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
>               $(srcdir)/config/i386/winnt.c
>
> Index: gcc/config/i386/t-cygming
> ===================================================================
> --- gcc/config/i386/t-cygming (revision 198213)
> +++ gcc/config/i386/t-cygming (working copy)
> @@ -22,7 +22,7 @@ LIMITS_H_TEST = true
>
>  winnt.o: $(srcdir)/config/i386/winnt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h
> \
>    $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
> -  $(TM_P_H) $(HASHTAB_H) $(GGC_H) $(LTO_STREAMER_H)
> +  $(TM_P_H) $(HASH_TABLE_H) $(GGC_H) $(LTO_STREAMER_H)
>       $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
>       $(srcdir)/config/i386/winnt.c
>
> Index: gcc/config/t-sol2
> ===================================================================
> --- gcc/config/t-sol2 (revision 198213)
> +++ gcc/config/t-sol2 (working copy)
> @@ -34,5 +34,5 @@ sol2-stubs.o: $(srcdir)/config/sol2-stub
>
>  # Solaris-specific attributes
>  sol2.o: $(srcdir)/config/sol2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
> -  tree.h output.h $(TM_H) $(TARGET_H) $(TM_P_H) $(GGC_H)
> +  tree.h output.h $(TM_H) $(TARGET_H) $(TM_P_H) $(GGC_H) $(HASH_TABLE_H)
>       $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
> Index: gcc/config/arm/arm.c
> ===================================================================
> --- gcc/config/arm/arm.c      (revision 198213)
> +++ gcc/config/arm/arm.c      (working copy)
> @@ -23,6 +23,7 @@
>  #include "config.h"
>  #include "system.h"
>  #include "coretypes.h"
> +#include "hash-table.h"
>  #include "tm.h"
>  #include "rtl.h"
>  #include "tree.h"
> @@ -3812,36 +3813,48 @@ arm_function_value(const_tree type, cons
>    return arm_libcall_value_1 (mode);
>  }
>
> -static int
> -libcall_eq (const void *p1, const void *p2)
> +/* libcall hashtable helpers.  */
> +
> +struct libcall_hasher : typed_noop_remove <rtx_def>
>  {
> -  return rtx_equal_p ((const_rtx) p1, (const_rtx) p2);
> +  typedef rtx_def value_type;
> +  typedef rtx_def compare_type;
> +  static inline hashval_t hash (const value_type *);
> +  static inline bool equal (const value_type *, const compare_type *);
> +  static inline void remove (value_type *);
> +};
> +
> +inline bool
> +libcall_hasher::equal (const value_type *p1, const compare_type *p2)
> +{
> +  return rtx_equal_p (p1, p2);
>  }
>
> -static hashval_t
> -libcall_hash (const void *p1)
> +inline hashval_t
> +libcall_hasher::hash (const value_type *p1)
>  {
> -  return hash_rtx ((const_rtx) p1, VOIDmode, NULL, NULL, FALSE);
> +  return hash_rtx (p1, VOIDmode, NULL, NULL, FALSE);
>  }
>
> +typedef hash_table <libcall_hasher> libcall_table_type;
> +
>  static void
> -add_libcall (htab_t htab, rtx libcall)
> +add_libcall (libcall_table_type htab, rtx libcall)
>  {
> -  *htab_find_slot (htab, libcall, INSERT) = libcall;
> +  *htab.find_slot (libcall, INSERT) = libcall;
>  }
>
>  static bool
>  arm_libcall_uses_aapcs_base (const_rtx libcall)
>  {
>    static bool init_done = false;
> -  static htab_t libcall_htab;
> +  static libcall_table_type libcall_htab;
>
>    if (!init_done)
>      {
>        init_done = true;
>
> -      libcall_htab = htab_create (31, libcall_hash, libcall_eq,
> -                               NULL);
> +      libcall_htab.create (31);
>        add_libcall (libcall_htab,
>                  convert_optab_libfunc (sfloat_optab, SFmode, SImode));
>        add_libcall (libcall_htab,
> @@ -3900,7 +3913,7 @@ arm_libcall_uses_aapcs_base (const_rtx l
>                                                       DFmode));
>      }
>
> -  return libcall && htab_find (libcall_htab, libcall) != NULL;
> +  return libcall && libcall_htab.find (libcall) != NULL;
>  }
>
>  static rtx
> Index: gcc/config/arm/t-arm
> ===================================================================
> --- gcc/config/arm/t-arm      (revision 198213)
> +++ gcc/config/arm/t-arm      (working copy)
> @@ -78,8 +78,8 @@ $(srcdir)/config/arm/arm-tables.opt: $(s
>       $(SHELL) $(srcdir)/config/arm/genopt.sh $(srcdir)/config/arm > \
>               $(srcdir)/config/arm/arm-tables.opt
>
> -arm.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
> -  $(RTL_H) $(TREE_H) $(OBSTACK_H) $(REGS_H) hard-reg-set.h \
> +arm.o: $(srcdir)/config/arm/arm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h
> $(TM_H) \
> +  $(RTL_H) $(TREE_H) $(HASH_TABLE_H) $(OBSTACK_H) $(REGS_H) hard-reg-set.h
> \
>    insn-config.h conditions.h output.h dumpfile.h \
>    $(INSN_ATTR_H) $(FLAGS_H) reload.h $(FUNCTION_H) \
>    $(EXPR_H) $(OPTABS_H) $(RECOG_H) $(CGRAPH_H) \
>
> --
> Lawrence Crowl
>


-- 
Lawrence Crowl

Reply via email to