__attribute__((visibility ("hidden")))
mono_internal_hash_table_init (struct MonoInternalHashTable * table, guint (*GHashFunc) (const void *) hash_func, void * (*MonoInternalHashKeyExtractFunc) (void *) key_extract, void * * (*MonoInternalHashNextValueFunc) (void *) next_value)
{
  int D.5163;
  long unsigned int D.5164;
  long unsigned int D.5165;
  void * D.5166;

  table->hash_func = hash_func;
  table->key_extract = key_extract;
  table->next_value = next_value;
  table->size = 11;
  table->num_entries = 0;
  D.5163 = table->size;
  D.5164 = (long unsigned int) D.5163;
  D.5165 = D.5164 * 8;
  D.5166 = monoeg_malloc0 (D.5165);
  table->table = D.5166;
}


__attribute__((visibility ("hidden")))
mono_internal_hash_table_destroy (struct MonoInternalHashTable * table)
{
  void * * D.5167;

  D.5167 = table->table;
  monoeg_g_free (D.5167);
  table->table = 0B;
}


__attribute__((visibility ("hidden")))
mono_internal_hash_table_lookup (struct MonoInternalHashTable * table, void * key)
{
  void * * D.5168;
  _Bool D.5169;
  long int D.5170;
  long int D.5171;
  guint (*<Td8e>) (const void *) D.5174;
  unsigned int D.5175;
  int D.5176;
  unsigned int D.5177;
  unsigned int D.5178;
  long unsigned int D.5179;
  long unsigned int D.5180;
  void * * D.5181;
  void * (*<Tf92>) (void *) D.5182;
  void * D.5183;
  void * D.5186;
  void * * (*<Tf97>) (void *) D.5187;
  void * * D.5188;
  void * value;

  D.5168 = table->table;
  D.5169 = D.5168 == 0B;
  D.5170 = (long int) D.5169;
  D.5171 = __builtin_expect (D.5170, 0);
  if (D.5171 != 0) goto <D.5172>; else goto <D.5173>;
  <D.5172>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 46, "table->table != NULL");
  <D.5173>:
  D.5168 = table->table;
  D.5174 = table->hash_func;
  D.5175 = D.5174 (key);
  D.5176 = table->size;
  D.5177 = (unsigned int) D.5176;
  D.5178 = D.5175 % D.5177;
  D.5179 = (long unsigned int) D.5178;
  D.5180 = D.5179 * 8;
  D.5181 = D.5168 + D.5180;
  value = *D.5181;
  goto <D.5131>;
  <D.5130>:
  D.5182 = table->key_extract;
  D.5183 = D.5182 (value);
  if (D.5183 == key) goto <D.5184>; else goto <D.5185>;
  <D.5184>:
  D.5186 = value;
  return D.5186;
  <D.5185>:
  D.5187 = table->next_value;
  D.5188 = D.5187 (value);
  value = *D.5188;
  <D.5131>:
  if (value != 0B) goto <D.5130>; else goto <D.5132>;
  <D.5132>:
  D.5186 = 0B;
  return D.5186;
}


__attribute__((visibility ("hidden")))
mono_internal_hash_table_insert (struct MonoInternalHashTable * table, void * key, void * value)
{
  guint (*<Td8e>) (const void *) D.5190;
  unsigned int D.5191;
  int D.5192;
  unsigned int D.5193;
  unsigned int D.5194;
  void * (*<Tf92>) (void *) D.5195;
  void * D.5196;
  _Bool D.5197;
  long int D.5198;
  long int D.5199;
  void * * (*<Tf97>) (void *) D.5202;
  void * * D.5203;
  void * D.5204;
  _Bool D.5205;
  long int D.5206;
  long int D.5207;
  void * D.5210;
  _Bool D.5211;
  long int D.5212;
  long int D.5213;
  void * * D.5216;
  void * * D.5217;
  long unsigned int D.5218;
  long unsigned int D.5219;
  void * * D.5220;
  void * D.5221;
  int D.5222;
  int D.5223;
  gint hash;

  D.5190 = table->hash_func;
  D.5191 = D.5190 (key);
  D.5192 = table->size;
  D.5193 = (unsigned int) D.5192;
  D.5194 = D.5191 % D.5193;
  hash = (gint) D.5194;
  D.5195 = table->key_extract;
  D.5196 = D.5195 (value);
  D.5197 = D.5196 != key;
  D.5198 = (long int) D.5197;
  D.5199 = __builtin_expect (D.5198, 0);
  if (D.5199 != 0) goto <D.5200>; else goto <D.5201>;
  <D.5200>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 96, "table->key_extract(value) == key");
  <D.5201>:
  D.5202 = table->next_value;
  D.5203 = D.5202 (value);
  D.5204 = *D.5203;
  D.5205 = D.5204 != 0B;
  D.5206 = (long int) D.5205;
  D.5207 = __builtin_expect (D.5206, 0);
  if (D.5207 != 0) goto <D.5208>; else goto <D.5209>;
  <D.5208>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 97, "*(table->next_value (value)) == NULL");
  <D.5209>:
  D.5210 = mono_internal_hash_table_lookup (table, key);
  D.5211 = D.5210 != 0B;
  D.5212 = (long int) D.5211;
  D.5213 = __builtin_expect (D.5212, 0);
  if (D.5213 != 0) goto <D.5214>; else goto <D.5215>;
  <D.5214>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 98, "mono_internal_hash_table_lookup (table, key) == NULL");
  <D.5215>:
  D.5202 = table->next_value;
  D.5216 = D.5202 (value);
  D.5217 = table->table;
  D.5218 = (long unsigned int) hash;
  D.5219 = D.5218 * 8;
  D.5220 = D.5217 + D.5219;
  D.5221 = *D.5220;
  *D.5216 = D.5221;
  D.5217 = table->table;
  D.5218 = (long unsigned int) hash;
  D.5219 = D.5218 * 8;
  D.5220 = D.5217 + D.5219;
  *D.5220 = value;
  D.5222 = table->num_entries;
  D.5223 = D.5222 + 1;
  table->num_entries = D.5223;
  resize_if_needed (table);
}


resize_if_needed (struct MonoInternalHashTable * table)
{
  int D.5224;
  int D.5225;
  int D.5226;
  unsigned int D.5229;
  unsigned int D.5230;
  long unsigned int D.5231;
  long unsigned int D.5232;
  void * * D.5233;
  long unsigned int D.5234;
  long unsigned int D.5235;
  void * * D.5236;
  void * * (*<Tf97>) (void *) D.5237;
  void * * D.5238;
  void * D.5239;
  guint (*<Td8e>) (const void *) D.5240;
  void * (*<Tf92>) (void *) D.5241;
  void * D.5242;
  unsigned int D.5243;
  unsigned int new_size.0;
  unsigned int D.5245;
  void * * D.5246;
  long unsigned int D.5247;
  long unsigned int D.5248;
  void * * D.5249;
  void * D.5250;
  void * D.5251;
  void * * new_table;
  gint new_size;
  gint i;

  D.5224 = table->num_entries;
  D.5225 = table->size;
  D.5226 = D.5225 * 3;
  if (D.5224 < D.5226) goto <D.5227>; else goto <D.5228>;
  <D.5227>:
  return;
  <D.5228>:
  D.5224 = table->num_entries;
  D.5229 = (unsigned int) D.5224;
  D.5230 = monoeg_g_spaced_primes_closest (D.5229);
  new_size = (gint) D.5230;
  D.5231 = (long unsigned int) new_size;
  D.5232 = D.5231 * 8;
  new_table = monoeg_malloc0 (D.5232);
  i = 0;
  goto <D.5145>;
  <D.5144>:
  goto <D.5142>;
  <D.5141>:
  {
    void * value;
    gint hash;

    D.5233 = table->table;
    D.5234 = (long unsigned int) i;
    D.5235 = D.5234 * 8;
    D.5236 = D.5233 + D.5235;
    value = *D.5236;
    D.5233 = table->table;
    D.5234 = (long unsigned int) i;
    D.5235 = D.5234 * 8;
    D.5236 = D.5233 + D.5235;
    D.5237 = table->next_value;
    D.5238 = D.5237 (value);
    D.5239 = *D.5238;
    *D.5236 = D.5239;
    D.5240 = table->hash_func;
    D.5241 = table->key_extract;
    D.5242 = D.5241 (value);
    D.5243 = D.5240 (D.5242);
    new_size.0 = (unsigned int) new_size;
    D.5245 = D.5243 % new_size.0;
    hash = (gint) D.5245;
    D.5237 = table->next_value;
    D.5246 = D.5237 (value);
    D.5247 = (long unsigned int) hash;
    D.5248 = D.5247 * 8;
    D.5249 = new_table + D.5248;
    D.5250 = *D.5249;
    *D.5246 = D.5250;
    D.5247 = (long unsigned int) hash;
    D.5248 = D.5247 * 8;
    D.5249 = new_table + D.5248;
    *D.5249 = value;
  }
  <D.5142>:
  D.5233 = table->table;
  D.5234 = (long unsigned int) i;
  D.5235 = D.5234 * 8;
  D.5236 = D.5233 + D.5235;
  D.5251 = *D.5236;
  if (D.5251 != 0B) goto <D.5141>; else goto <D.5143>;
  <D.5143>:
  i = i + 1;
  <D.5145>:
  D.5225 = table->size;
  if (D.5225 > i) goto <D.5144>; else goto <D.5146>;
  <D.5146>:
  D.5233 = table->table;
  monoeg_g_free (D.5233);
  table->size = new_size;
  table->table = new_table;
}


__attribute__((visibility ("hidden")))
mono_internal_hash_table_remove (struct MonoInternalHashTable * table, void * key)
{
  guint (*<Td8e>) (const void *) D.5253;
  unsigned int D.5254;
  int D.5255;
  unsigned int D.5256;
  unsigned int D.5257;
  void * * D.5258;
  long unsigned int D.5259;
  long unsigned int D.5260;
  void * (*<Tf92>) (void *) D.5261;
  void * D.5262;
  void * D.5263;
  void * * (*<Tf97>) (void *) D.5266;
  void * * D.5267;
  void * D.5268;
  int D.5269;
  int D.5270;
  gint hash;
  void * * value;

  D.5253 = table->hash_func;
  D.5254 = D.5253 (key);
  D.5255 = table->size;
  D.5256 = (unsigned int) D.5255;
  D.5257 = D.5254 % D.5256;
  hash = (gint) D.5257;
  D.5258 = table->table;
  D.5259 = (long unsigned int) hash;
  D.5260 = D.5259 * 8;
  value = D.5258 + D.5260;
  goto <D.5160>;
  <D.5159>:
  D.5261 = table->key_extract;
  D.5262 = *value;
  D.5263 = D.5261 (D.5262);
  if (D.5263 == key) goto <D.5264>; else goto <D.5265>;
  <D.5264>:
  D.5266 = table->next_value;
  D.5262 = *value;
  D.5267 = D.5266 (D.5262);
  D.5268 = *D.5267;
  *value = D.5268;
  D.5269 = table->num_entries;
  D.5270 = D.5269 + -1;
  table->num_entries = D.5270;
  return;
  <D.5265>:
  D.5266 = table->next_value;
  D.5262 = *value;
  value = D.5266 (D.5262);
  <D.5160>:
  D.5262 = *value;
  if (D.5262 != 0B) goto <D.5159>; else goto <D.5161>;
  <D.5161>:
  if (1 != 0) goto <D.5271>; else goto <D.5272>;
  <D.5271>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 125, "0");
  <D.5272>:
}


