static hashval_t opcode_hash_hash (const void *p) { struct opcode_hash_entry *entry = (struct opcode_hash_entry *) p; return htab_hash_string (entry->name); }
/* Recursive hash function for RTL X. */ static hashval_t rtx_hash (rtx x) { int i, j; enum rtx_code code; const char *fmt; hashval_t val = 0; if (x == 0) return val; code = GET_CODE (x); val += (int) code + 4095; /* Some RTL can be compared nonrecursively. */ switch (code) { case REG: return val + REGNO (x); case LABEL_REF: return iterative_hash_object (XEXP (x, 0), val); case SYMBOL_REF: return iterative_hash_object (XSTR (x, 0), val); case SCRATCH: case CONST_DOUBLE: case CONST_INT: case CONST_VECTOR: return val; default: break; } /* Hash the elements. */ fmt = GET_RTX_FORMAT (code); for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { switch (fmt[i]) { case 'w': val += XWINT (x, i); break; case 'n': case 'i': val += XINT (x, i); break; case 'V': case 'E': val += XVECLEN (x, i); for (j = 0; j < XVECLEN (x, i); j++) val += rtx_hash (XVECEXP (x, i, j)); break; case 'e': val += rtx_hash (XEXP (x, i)); break; case 'S': case 's': val += htab_hash_string (XSTR (x, i)); break; case 'u': case '0': case 't': break; /* It is believed that rtx's at this level will never contain anything but integers and other rtx's, except for within LABEL_REFs and SYMBOL_REFs. */ default: abort (); } } return val; }
static hashval_t hash_sym (const void *a) { const struct ld_plugin_symbol *as = (const struct ld_plugin_symbol *)a; return htab_hash_string (as->name); }
static hashval_t hash_name (const void *p) { const struct lto_renaming_slot *ds = (const struct lto_renaming_slot *) p; return (hashval_t) htab_hash_string (ds->new_name); }
static void process_i386_opcodes (FILE *table) { FILE *fp; char buf[2048]; unsigned int i, j; char *str, *p, *last, *name; struct opcode_hash_entry **hash_slot, **entry, *next; htab_t opcode_hash_table; struct opcode_hash_entry **opcode_array; unsigned int opcode_array_size = 1024; int lineno = 0; filename = "i386-opc.tbl"; fp = fopen (filename, "r"); if (fp == NULL) fail (_("can't find i386-opc.tbl for reading, errno = %s\n"), xstrerror (errno)); i = 0; opcode_array = (struct opcode_hash_entry **) xmalloc (sizeof (*opcode_array) * opcode_array_size); opcode_hash_table = htab_create_alloc (16, opcode_hash_hash, opcode_hash_eq, NULL, xcalloc, free); fprintf (table, "\n/* i386 opcode table. */\n\n"); fprintf (table, "const insn_template i386_optab[] =\n{\n"); /* Put everything on opcode array. */ while (!feof (fp)) { if (fgets (buf, sizeof (buf), fp) == NULL) break; lineno++; p = remove_leading_whitespaces (buf); /* Skip comments. */ str = strstr (p, "//"); if (str != NULL) str[0] = '\0'; /* Remove trailing white spaces. */ remove_trailing_whitespaces (p); switch (p[0]) { case '#': /* Ignore comments. */ case '\0': continue; break; default: break; } last = p + strlen (p); /* Find name. */ name = next_field (p, ',', &str, last); /* Get the slot in hash table. */ hash_slot = (struct opcode_hash_entry **) htab_find_slot_with_hash (opcode_hash_table, name, htab_hash_string (name), INSERT); if (*hash_slot == NULL) { /* It is the new one. Put it on opcode array. */ if (i >= opcode_array_size) { /* Grow the opcode array when needed. */ opcode_array_size += 1024; opcode_array = (struct opcode_hash_entry **) xrealloc (opcode_array, sizeof (*opcode_array) * opcode_array_size); } opcode_array[i] = (struct opcode_hash_entry *) xmalloc (sizeof (struct opcode_hash_entry)); opcode_array[i]->next = NULL; opcode_array[i]->name = xstrdup (name); opcode_array[i]->opcode = xstrdup (str); opcode_array[i]->lineno = lineno; *hash_slot = opcode_array[i]; i++; } else { /* Append it to the existing one. */ entry = hash_slot; while ((*entry) != NULL) entry = &(*entry)->next; *entry = (struct opcode_hash_entry *) xmalloc (sizeof (struct opcode_hash_entry)); (*entry)->next = NULL; (*entry)->name = (*hash_slot)->name; (*entry)->opcode = xstrdup (str); (*entry)->lineno = lineno; } } /* Process opcode array. */ for (j = 0; j < i; j++) { for (next = opcode_array[j]; next; next = next->next) { name = next->name; str = next->opcode; lineno = next->lineno; last = str + strlen (str); output_i386_opcode (table, name, str, last, lineno); } } fclose (fp); fprintf (table, " { NULL, 0, 0, 0, 0,\n"); process_i386_cpu_flag (table, "0", 0, ",", " ", -1); process_i386_opcode_modifier (table, "0", -1); fprintf (table, " { "); process_i386_operand_type (table, "0", 0, "\t ", -1); fprintf (table, " } }\n"); fprintf (table, "};\n"); }
inline hashval_t event_hasher::hash (const char **v) { return htab_hash_string (*v); }
static hashval_t hash_section_hash_entry (const void *p) { const section_hash_entry *n = (const section_hash_entry *) p; return htab_hash_string (n->name); }
static hashval_t htab_hash_plugin (const PTR p) { const struct plugin_name_args *plugin = (const struct plugin_name_args *) p; return htab_hash_string (plugin->base_name); }
inline hashval_t comdat_entry_hasher::hash (const comdat_entry *entry) { return htab_hash_string (entry->sig); }
static hashval_t s_hook_hash (const void *p) { const struct s_hook *s_hook = (const struct s_hook *)p; return htab_hash_string (s_hook->name); }
inline hashval_t stats_counter_hasher::hash (const statistics_counter *c) { return htab_hash_string (c->id) + c->val; }
static hashval_t hash_statistics_hash (const void *p) { const statistics_counter_t *const c = (const statistics_counter_t *)p; return htab_hash_string (c->id) + c->val; }