mono_runtime_set_shutting_down ()
{
  shutting_down = 1;
}


mono_runtime_is_shutting_down ()
{
  mono_bool D.17527;

  D.17527 = shutting_down;
  return D.17527;
}


__attribute__((visibility ("hidden")))
mono_runtime_try_shutdown ()
{
  int D.17529;
  gboolean D.17532;

  D.17529 = InterlockedCompareExchange (&shutting_down_inited, 1, 0);
  if (D.17529 != 0) goto <D.17530>; else goto <D.17531>;
  <D.17530>:
  D.17532 = 0;
  return D.17532;
  <D.17531>:
  mono_runtime_fire_process_exit_event ();
  shutting_down = 1;
  mono_threads_set_shutting_down ();
  mono_runtime_set_shutting_down ();
  mono_thread_pool_cleanup ();
  D.17532 = 1;
  return D.17532;
}


InterlockedCompareExchange (volatile gint32 * dest, gint32 exch, gint32 comp)
{
  gint32 D.17534;
  unsigned int comp.0;
  unsigned int exch.1;
  unsigned int D.17537;

  comp.0 = (unsigned int) comp;
  exch.1 = (unsigned int) exch;
  D.17537 = __sync_val_compare_and_swap_4 (dest, comp.0, exch.1);
  D.17534 = (gint32) D.17537;
  return D.17534;
}


mono_runtime_fire_process_exit_event ()
{
  mono_domain_foreach (fire_process_exit_event, 0B);
}


fire_process_exit_event (struct MonoDomain * domain, void * user_data)
{
  struct MonoClass * D.17539;
  _Bool D.17540;
  long int D.17541;
  long int D.17542;
  struct MonoAppDomain * D.17545;
  int D.17546;
  sizetype D.17547;
  struct MonoObject * * D.17548;
  struct MonoClassField * field;
  void * pa[2];
  struct MonoObject * delegate;
  struct MonoObject * exc;

  try
    {
      D.17539 = mono_defaults.appdomain_class;
      field = mono_class_get_field_from_name (D.17539, "ProcessExit");
      D.17540 = field == 0B;
      D.17541 = (long int) D.17540;
      D.17542 = __builtin_expect (D.17541, 0);
      if (D.17542 != 0) goto <D.17543>; else goto <D.17544>;
      <D.17543>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "runtime.c", 64, "field");
      <D.17544>:
      D.17545 = domain->domain;
      D.17546 = field->offset;
      D.17547 = (sizetype) D.17546;
      D.17548 = D.17545 + D.17547;
      delegate = *D.17548;
      if (delegate == 0B) goto <D.17549>; else goto <D.17550>;
      <D.17549>:
      return;
      <D.17550>:
      pa[0] = domain;
      pa[1] = 0B;
      mono_runtime_delegate_invoke (delegate, &pa, &exc);
    }
  finally
    {
      pa = {CLOBBER};
      exc = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_runtime_is_critical_method (struct MonoMethod * method)
{
  int D.17554;
  gboolean D.17557;

  D.17554 = mono_monitor_is_il_fastpath_wrapper (method);
  if (D.17554 != 0) goto <D.17555>; else goto <D.17556>;
  <D.17555>:
  D.17557 = 1;
  return D.17557;
  <D.17556>:
  D.17557 = 0;
  return D.17557;
}


__attribute__((visibility ("hidden")))
mono_runtime_init_tls ()
{
  mono_marshal_init_tls ();
  mono_thread_pool_init_tls ();
  mono_thread_init_tls ();
}


