__attribute__((visibility ("hidden")))
mono_arch_get_call_filter (struct MonoTrampInfo * * info, gboolean aot)
{
  _Bool D.22404;
  long int D.22405;
  long int D.22406;
  int inited.0;
  void * D.22412;
  void * start.1;
  int D.22414;
  int D.22415;
  int D.22416;
  unsigned int D.22417;
  int D.22418;
  int D.22419;
  int D.22420;
  int D.22421;
  unsigned int D.22422;
  unsigned int pos.2;
  unsigned int D.22424;
  int D.22425;
  int D.22426;
  unsigned int D.22427;
  int D.22428;
  int D.22429;
  unsigned int D.22430;
  int D.22431;
  int D.22432;
  unsigned int D.22433;
  long int code.3;
  guint8 * start.4;
  long int start.5;
  long int D.22437;
  _Bool D.22438;
  long int D.22439;
  long int D.22440;
  unsigned int D.22445;
  struct MonoTrampInfo * D.22446;
  static guint8 * start;
  static int inited = 0;
  guint8 * code;
  int alloc_size;
  int pos;
  int i;
  struct GSList * unwind_ops;
  struct MonoJumpInfo * ji;

  unwind_ops = 0B;
  ji = 0B;
  D.22404 = aot != 0;
  D.22405 = (long int) D.22404;
  D.22406 = __builtin_expect (D.22405, 0);
  if (D.22406 != 0) goto <D.22407>; else goto <D.22408>;
  <D.22407>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "exceptions-s390x.c", 108, "!aot");
  <D.22408>:
  inited.0 = inited;
  if (inited.0 != 0) goto <D.22410>; else goto <D.22411>;
  <D.22410>:
  D.22412 = start;
  return D.22412;
  <D.22411>:
  inited = 1;
  start.1 = mono_global_codeman_reserve (512);
  start = start.1;
  code = start;
  MEM[(guint16 *)code] = 60270;
  code = code + 2;
  MEM[(guint32 *)code] = 4029677604;
  code = code + 4;
  MEM[(guint32 *)code] = 3104047343;
  code = code + 4;
  alloc_size = 480;
  D.22414 = -alloc_size;
  D.22415 = D.22414 & 65535;
  D.22416 = D.22415 | -1476722688;
  D.22417 = (unsigned int) D.22416;
  MEM[(guint32 *)code] = D.22417;
  code = code + 4;
  MEM[(guint16 *)code] = 58336;
  code = code + 2;
  MEM[(guint32 *)code] = 4026531876;
  code = code + 4;
  MEM[(guint16 *)code] = 60175;
  code = code + 2;
  MEM[(guint32 *)code] = 4037017636;
  code = code + 4;
  pos = 288;
  i = 0;
  goto <D.22297>;
  <D.22296>:
  D.22418 = i << 20;
  D.22419 = D.22418 | 1610674176;
  D.22420 = pos & 4095;
  D.22421 = D.22419 | D.22420;
  D.22422 = (unsigned int) D.22421;
  MEM[(guint32 *)code] = D.22422;
  code = code + 4;
  pos.2 = (unsigned int) pos;
  D.22424 = pos.2 + 8;
  pos = (int) D.22424;
  i = i + 1;
  <D.22297>:
  if (i <= 15) goto <D.22296>; else goto <D.22298>;
  <D.22298>:
  MEM[(guint32 *)code] = 2601513376;
  code = code + 4;
  MEM[(guint32 *)code] = 3104047314;
  code = code + 4;
  MEM[(guint32 *)code] = 3104047107;
  code = code + 4;
  MEM[(guint32 *)code] = 3104047140;
  code = code + 4;
  MEM[(guint16 *)code] = 60220;
  code = code + 2;
  MEM[(guint32 *)code] = 3494903812;
  code = code + 4;
  pos = 256;
  i = 0;
  goto <D.22300>;
  <D.22299>:
  D.22418 = i << 20;
  D.22425 = D.22418 | 1744883712;
  D.22420 = pos & 4095;
  D.22426 = D.22425 | D.22420;
  D.22427 = (unsigned int) D.22426;
  MEM[(guint32 *)code] = D.22427;
  code = code + 4;
  pos.2 = (unsigned int) pos;
  D.22424 = pos.2 + 8;
  pos = (int) D.22424;
  i = i + 1;
  <D.22300>:
  if (i <= 15) goto <D.22299>; else goto <D.22301>;
  <D.22301>:
  MEM[(guint32 *)code] = 3104047120;
  code = code + 4;
  MEM[(guint16 *)code] = 3553;
  code = code + 2;
  MEM[(guint32 *)code] = 3104047330;
  code = code + 4;
  MEM[(guint16 *)code] = 60173;
  code = code + 2;
  MEM[(guint32 *)code] = 4037017604;
  code = code + 4;
  pos = 288;
  i = 0;
  goto <D.22303>;
  <D.22302>:
  D.22418 = i << 20;
  D.22428 = D.22418 | 1744891904;
  D.22420 = pos & 4095;
  D.22429 = D.22428 | D.22420;
  D.22430 = (unsigned int) D.22429;
  MEM[(guint32 *)code] = D.22430;
  code = code + 4;
  pos.2 = (unsigned int) pos;
  D.22424 = pos.2 + 8;
  pos = (int) D.22424;
  i = i + 1;
  <D.22303>:
  if (i <= 15) goto <D.22302>; else goto <D.22304>;
  <D.22304>:
  MEM[(guint32 *)code] = 3104047150;
  code = code + 4;
  MEM[(guint32 *)code] = 2584736160;
  code = code + 4;
  D.22431 = alloc_size & 65535;
  D.22432 = D.22431 | -1476722688;
  D.22433 = (unsigned int) D.22432;
  MEM[(guint32 *)code] = D.22433;
  code = code + 4;
  MEM[(guint16 *)code] = 60270;
  code = code + 2;
  MEM[(guint32 *)code] = 4029677572;
  code = code + 4;
  MEM[(guint16 *)code] = 2046;
  code = code + 2;
  code.3 = (long int) code;
  start.4 = start;
  start.5 = (long int) start.4;
  D.22437 = code.3 - start.5;
  D.22438 = D.22437 > 383;
  D.22439 = (long int) D.22438;
  D.22440 = __builtin_expect (D.22439, 0);
  if (D.22440 != 0) goto <D.22441>; else goto <D.22442>;
  <D.22441>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "exceptions-s390x.c", 213, "(code - start) < SZ_THROW");
  <D.22442>:
  if (info != 0B) goto <D.22443>; else goto <D.22444>;
  <D.22443>:
  start.4 = start;
  code.3 = (long int) code;
  start.4 = start;
  start.5 = (long int) start.4;
  D.22437 = code.3 - start.5;
  D.22445 = (unsigned int) D.22437;
  D.22446 = mono_tramp_info_create ("call_filter", start.4, D.22445, ji, unwind_ops);
  *info = D.22446;
  <D.22444>:
  D.22412 = start;
  return D.22412;
}


__attribute__((visibility ("hidden")))
mono_arch_get_throw_exception (struct MonoTrampInfo * * info, gboolean aot)
{
  _Bool D.22448;
  long int D.22449;
  long int D.22450;
  void * D.22455;

  D.22448 = aot != 0;
  D.22449 = (long int) D.22448;
  D.22450 = __builtin_expect (D.22449, 0);
  if (D.22450 != 0) goto <D.22451>; else goto <D.22452>;
  <D.22451>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "exceptions-s390x.c", 388, "!aot");
  <D.22452>:
  if (info != 0B) goto <D.22453>; else goto <D.22454>;
  <D.22453>:
  *info = 0B;
  <D.22454>:
  D.22455 = mono_arch_get_throw_exception_generic (384, info, 0, 0, aot);
  return D.22455;
}


mono_arch_get_throw_exception_generic (int size, struct MonoTrampInfo * * info, int corlib, gboolean rethrow, gboolean aot)
{
  int D.22457;
  int D.22458;
  int D.22459;
  unsigned int D.22460;
  struct MonoClass * D.22463;
  struct MonoImage * D.22464;
  long unsigned int D.22465;
  long unsigned int mono_exception_from_token.6;
  int D.22467;
  int D.22468;
  unsigned int D.22469;
  int D.22470;
  int D.22471;
  int D.22472;
  int D.22473;
  unsigned int D.22474;
  unsigned int pos.7;
  unsigned int D.22476;
  int D.22477;
  int D.22478;
  unsigned int D.22479;
  long unsigned int throw_exception.8;
  long int code.9;
  long int start.10;
  long int D.22483;
  long int D.22484;
  _Bool D.22485;
  long int D.22486;
  long int D.22487;
  const char * iftmp.11;
  const char * iftmp.12;
  unsigned int D.22500;
  struct MonoTrampInfo * D.22501;
  void * D.22502;
  guint8 * code;
  guint8 * start;
  int alloc_size;
  int pos;
  int i;
  struct MonoJumpInfo * ji;
  struct GSList * unwind_ops;

  ji = 0B;
  unwind_ops = 0B;
  start = mono_global_codeman_reserve (size);
  code = start;
  MEM[(guint16 *)code] = 60270;
  code = code + 2;
  MEM[(guint32 *)code] = 4029677604;
  code = code + 4;
  alloc_size = 504;
  MEM[(guint32 *)code] = 3104047343;
  code = code + 4;
  D.22457 = -alloc_size;
  D.22458 = D.22457 & 65535;
  D.22459 = D.22458 | -1476722688;
  D.22460 = (unsigned int) D.22459;
  MEM[(guint32 *)code] = D.22460;
  code = code + 4;
  MEM[(guint16 *)code] = 58336;
  code = code + 2;
  MEM[(guint32 *)code] = 4026531876;
  code = code + 4;
  MEM[(guint32 *)code] = 3104047154;
  code = code + 4;
  if (corlib != 0) goto <D.22461>; else goto <D.22462>;
  <D.22461>:
  MEM[(guint16 *)code] = 3536;
  code = code + 2;
  MEM[(guint32 *)code] = 2817785866;
  code = code + 4;
  D.22463 = mono_defaults.exception_class;
  D.22464 = D.22463->image;
  D.22465 = (long unsigned int) D.22464;
  MEM[(guint64 *)code] = D.22465;
  code = code + 8;
  mono_exception_from_token.6 = (long unsigned int) mono_exception_from_token;
  MEM[(guint64 *)code] = mono_exception_from_token.6;
  code = code + 8;
  MEM[(guint16 *)code] = 58144;
  code = code + 2;
  MEM[(guint32 *)code] = 3489923076;
  code = code + 4;
  MEM[(guint16 *)code] = 58128;
  code = code + 2;
  MEM[(guint32 *)code] = 3490447364;
  code = code + 4;
  MEM[(guint16 *)code] = 3553;
  code = code + 2;
  <D.22462>:
  MEM[(guint16 *)code] = 60173;
  code = code + 2;
  MEM[(guint32 *)code] = 4038328356;
  code = code + 4;
  MEM[(guint32 *)code] = 3104047135;
  code = code + 4;
  D.22467 = alloc_size & 65535;
  D.22468 = D.22467 | -1491402752;
  D.22469 = (unsigned int) D.22468;
  MEM[(guint32 *)code] = D.22469;
  code = code + 4;
  MEM[(guint16 *)code] = 58160;
  code = code + 2;
  MEM[(guint32 *)code] = 275775492;
  code = code + 4;
  pos = 308;
  i = 0;
  goto <D.22336>;
  <D.22335>:
  D.22470 = i << 20;
  D.22471 = D.22470 | 1610674176;
  D.22472 = pos & 4095;
  D.22473 = D.22471 | D.22472;
  D.22474 = (unsigned int) D.22473;
  MEM[(guint32 *)code] = D.22474;
  code = code + 4;
  pos.7 = (unsigned int) pos;
  D.22476 = pos.7 + 8;
  pos = (int) D.22476;
  i = i + 1;
  <D.22336>:
  if (i <= 15) goto <D.22335>; else goto <D.22337>;
  <D.22337>:
  MEM[(guint32 *)code] = 2601513396;
  code = code + 4;
  MEM[(guint32 *)code] = 3104047169;
  code = code + 4;
  MEM[(guint32 *)code] = 1095823540;
  code = code + 4;
  MEM[(guint32 *)code] = 1096872244;
  code = code + 4;
  MEM[(guint32 *)code] = 1097920948;
  code = code + 4;
  MEM[(guint16 *)code] = 58224;
  code = code + 2;
  MEM[(guint32 *)code] = 4037017636;
  code = code + 4;
  MEM[(guint32 *)code] = 2996629676;
  code = code + 4;
  D.22477 = rethrow & 65535;
  D.22478 = D.22477 | -1485242368;
  D.22479 = (unsigned int) D.22478;
  MEM[(guint32 *)code] = D.22479;
  code = code + 4;
  MEM[(guint16 *)code] = 58224;
  code = code + 2;
  MEM[(guint32 *)code] = 4038066212;
  code = code + 4;
  MEM[(guint16 *)code] = 3536;
  code = code + 2;
  MEM[(guint32 *)code] = 2817785862;
  code = code + 4;
  throw_exception.8 = (long unsigned int) throw_exception;
  MEM[(guint64 *)code] = throw_exception.8;
  code = code + 8;
  MEM[(guint16 *)code] = 58128;
  code = code + 2;
  MEM[(guint32 *)code] = 3489923076;
  code = code + 4;
  MEM[(guint16 *)code] = 3553;
  code = code + 2;
  MEM[(guint16 *)code] = 0;
  code = code + 2;
  code.9 = (long int) code;
  start.10 = (long int) start;
  D.22483 = code.9 - start.10;
  D.22484 = (long int) size;
  D.22485 = D.22483 >= D.22484;
  D.22486 = (long int) D.22485;
  D.22487 = __builtin_expect (D.22486, 0);
  if (D.22487 != 0) goto <D.22488>; else goto <D.22489>;
  <D.22488>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "exceptions-s390x.c", 360, "(code - start) < size");
  <D.22489>:
  if (info != 0B) goto <D.22490>; else goto <D.22491>;
  <D.22490>:
  if (corlib == 0) goto <D.22493>; else goto <D.22494>;
  <D.22493>:
  if (rethrow != 0) goto <D.22496>; else goto <D.22497>;
  <D.22496>:
  iftmp.12 = "rethrow_exception";
  goto <D.22498>;
  <D.22497>:
  iftmp.12 = "throw_exception";
  <D.22498>:
  iftmp.11 = iftmp.12;
  goto <D.22499>;
  <D.22494>:
  iftmp.11 = "throw_corlib_exception";
  <D.22499>:
  code.9 = (long int) code;
  start.10 = (long int) start;
  D.22483 = code.9 - start.10;
  D.22500 = (unsigned int) D.22483;
  D.22501 = mono_tramp_info_create (iftmp.11, start, D.22500, ji, unwind_ops);
  *info = D.22501;
  <D.22491>:
  D.22502 = start;
  return D.22502;
}


throw_exception (struct MonoObject * exc, long unsigned int ip, long unsigned int sp, gulong * int_regs, gdouble * fp_regs, gint32 * acc_regs, guint fpc, gboolean rethrow)
{
  long unsigned int D.22504;
  long unsigned int D.22505;
  gulong * D.22506;
  long unsigned int D.22507;
  gdouble * D.22508;
  double D.22509;
  long unsigned int D.22510;
  gint32 * D.22511;
  int D.22512;
  unsigned int D.22513;
  void * sp.13;
  struct MonoClass * D.22515;
  struct MonoObject * D.22516;
  struct MonoContext ctx;
  int iReg;

  try
    {
      memset (&ctx, 0, 512);
      ip = ip + 18446744073709551614;
      iReg = 0;
      goto <D.22318>;
      <D.22317>:
      D.22504 = (long unsigned int) iReg;
      D.22505 = D.22504 * 8;
      D.22506 = int_regs + D.22505;
      D.22507 = *D.22506;
      ctx.uc_mcontext.gregs[iReg] = D.22507;
      D.22504 = (long unsigned int) iReg;
      D.22505 = D.22504 * 8;
      D.22508 = fp_regs + D.22505;
      D.22509 = *D.22508;
      ctx.uc_mcontext.fpregs.fprs[iReg].d = D.22509;
      D.22504 = (long unsigned int) iReg;
      D.22510 = D.22504 * 4;
      D.22511 = acc_regs + D.22510;
      D.22512 = *D.22511;
      D.22513 = (unsigned int) D.22512;
      ctx.uc_mcontext.aregs[iReg] = D.22513;
      iReg = iReg + 1;
      <D.22318>:
      if (iReg <= 15) goto <D.22317>; else goto <D.22319>;
      <D.22319>:
      ctx.uc_mcontext.fpregs.fpc = fpc;
      ctx.uc_mcontext.gregs[15] = sp;
      sp.13 = (void *) sp;
      ctx.uc_stack.ss_sp = sp.13;
      ctx.uc_mcontext.gregs[14] = ip;
      ctx.uc_mcontext.psw.addr = ip;
      D.22515 = mono_defaults.exception_class;
      D.22516 = mono_object_isinst (exc, D.22515);
      if (D.22516 != 0B) goto <D.22517>; else goto <D.22518>;
      <D.22517>:
      {
        struct MonoException * mono_ex;

        mono_ex = exc;
        if (rethrow == 0) goto <D.22519>; else goto <D.22520>;
        <D.22519>:
        mono_ex->stack_trace = 0B;
        <D.22520>:
      }
      <D.22518>:
      mono_handle_exception (&ctx, exc);
      mono_restore_context (&ctx);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "exceptions-s390x.c", 268);
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memset (void * __dest, int __ch, size_t __len)
{
  void * D.22521;
  long unsigned int D.22522;

  D.22522 = __builtin_object_size (__dest, 0);
  D.22521 = __builtin___memset_chk (__dest, __ch, __len, D.22522);
  return D.22521;
}


__attribute__((visibility ("hidden")))
mono_arch_get_rethrow_exception (struct MonoTrampInfo * * info, gboolean aot)
{
  _Bool D.22524;
  long int D.22525;
  long int D.22526;
  void * D.22531;

  D.22524 = aot != 0;
  D.22525 = (long int) D.22524;
  D.22526 = __builtin_expect (D.22525, 0);
  if (D.22526 != 0) goto <D.22527>; else goto <D.22528>;
  <D.22527>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "exceptions-s390x.c", 411, "!aot");
  <D.22528>:
  if (info != 0B) goto <D.22529>; else goto <D.22530>;
  <D.22529>:
  *info = 0B;
  <D.22530>:
  D.22531 = mono_arch_get_throw_exception_generic (384, info, 0, 0, aot);
  return D.22531;
}


__attribute__((visibility ("hidden")))
mono_arch_get_throw_corlib_exception (struct MonoTrampInfo * * info, gboolean aot)
{
  _Bool D.22533;
  long int D.22534;
  long int D.22535;
  void * D.22540;

  D.22533 = aot != 0;
  D.22534 = (long int) D.22533;
  D.22535 = __builtin_expect (D.22534, 0);
  if (D.22535 != 0) goto <D.22536>; else goto <D.22537>;
  <D.22536>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "exceptions-s390x.c", 434, "!aot");
  <D.22537>:
  if (info != 0B) goto <D.22538>; else goto <D.22539>;
  <D.22538>:
  *info = 0B;
  <D.22539>:
  D.22540 = mono_arch_get_throw_exception_generic (384, info, 1, 0, aot);
  return D.22540;
}


__attribute__((visibility ("hidden")))
mono_arch_find_jit_info (struct MonoDomain * domain, struct MonoJitTlsData * jit_tls, struct MonoJitInfo * ji, struct MonoContext * ctx, struct MonoContext * new_ctx, struct MonoLMF * * lmf, mgreg_t * * save_locations, struct StackFrameInfo * frame)
{
  long unsigned int D.22542;
  long unsigned int D.22545;
  long unsigned int D.22546;
  unsigned int D.22550;
  struct MonoLMF * D.22551;
  struct MonoLMF * D.22554;
  long unsigned int D.22557;
  void * D.22558;
  long unsigned int D.22559;
  void * D.22560;
  void * D.22563;
  long int ip.14;
  void * D.22565;
  long int D.22566;
  long unsigned int[16] * D.22567;
  unsigned int unwind_info_len.15;
  int D.22569;
  sizetype D.22570;
  guint8 * D.22571;
  long unsigned int[16] * D.22572;
  long int D.22573;
  long unsigned int D.22574;
  long unsigned int D.22575;
  guint8 * cfa.16;
  long unsigned int cfa.17;
  gboolean D.22582;
  long unsigned int D.22585;
  char * D.22586;
  struct MonoMethod * D.22589;
  gulong[16] * D.22592;
  union fpreg_t[16] * D.22593;
  gdouble[16] * D.22594;
  long unsigned int D.22595;
  void * ip;
  struct MonoS390StackFrame * sframe;

  D.22542 = ctx->uc_mcontext.psw.addr;
  ip = (void *) D.22542;
  memset (frame, 0, 88);
  frame->ji = ji;
  *new_ctx = *ctx;
  if (ji != 0B) goto <D.22543>; else goto <D.22544>;
  <D.22543>:
  {
    gint64 address;
    guint8 * cfa;
    guint32 unwind_info_len;
    guint8 * unwind_info;
    mgreg_t regs[16];

    try
      {
        frame->type = 0;
        D.22545 = BIT_FIELD_REF <*ji, 64, 256>;
        D.22546 = D.22545 & 8796093022208;
        if (D.22546 != 0) goto <D.22547>; else goto <D.22548>;
        <D.22547>:
        unwind_info = mono_aot_get_unwind_info (ji, &unwind_info_len);
        goto <D.22549>;
        <D.22548>:
        D.22550 = ji->used_regs;
        unwind_info = mono_get_cached_unwind_info (D.22550, &unwind_info_len);
        <D.22549>:
        D.22551 = *lmf;
        if (D.22551 != 0B) goto <D.22552>; else goto <D.22553>;
        <D.22552>:
        D.22551 = *lmf;
        D.22554 = jit_tls->first_lmf;
        if (D.22551 != D.22554) goto <D.22555>; else goto <D.22556>;
        <D.22555>:
        D.22557 = ctx->uc_mcontext.gregs[15];
        D.22558 = (void *) D.22557;
        D.22551 = *lmf;
        D.22559 = D.22551->ebp;
        D.22560 = (void *) D.22559;
        if (D.22558 >= D.22560) goto <D.22561>; else goto <D.22562>;
        <D.22561>:
        D.22551 = *lmf;
        D.22563 = D.22551->previous_lmf;
        *lmf = D.22563;
        <D.22562>:
        <D.22556>:
        <D.22553>:
        ip.14 = (long int) ip;
        D.22565 = ji->code_start;
        D.22566 = (long int) D.22565;
        address = ip.14 - D.22566;
        D.22567 = &ctx->uc_mcontext.gregs;
        memcpy (&regs, D.22567, 128);
        unwind_info_len.15 = unwind_info_len;
        D.22565 = ji->code_start;
        D.22565 = ji->code_start;
        D.22569 = ji->code_size;
        D.22570 = (sizetype) D.22569;
        D.22571 = D.22565 + D.22570;
        mono_unwind_frame (unwind_info, unwind_info_len.15, D.22565, D.22571, ip, &regs, 16, save_locations, 16, &cfa);
        D.22572 = &new_ctx->uc_mcontext.gregs;
        memcpy (D.22572, &regs, 128);
        D.22573 = regs[14];
        D.22574 = (long unsigned int) D.22573;
        D.22575 = D.22574 + 18446744073709551614;
        new_ctx->uc_mcontext.gregs[14] = D.22575;
        D.22573 = regs[14];
        D.22574 = (long unsigned int) D.22573;
        D.22575 = D.22574 + 18446744073709551614;
        new_ctx->uc_mcontext.psw.addr = D.22575;
        cfa.16 = cfa;
        cfa.17 = (long unsigned int) cfa.16;
        new_ctx->uc_mcontext.gregs[15] = cfa.17;
        cfa.16 = cfa;
        new_ctx->uc_stack.ss_sp = cfa.16;
        D.22551 = *lmf;
        if (D.22551 != 0B) goto <D.22578>; else goto <D.22579>;
        <D.22578>:
        D.22557 = ctx->uc_mcontext.gregs[15];
        D.22558 = (void *) D.22557;
        D.22551 = *lmf;
        D.22559 = D.22551->ebp;
        D.22560 = (void *) D.22559;
        if (D.22558 >= D.22560) goto <D.22580>; else goto <D.22581>;
        <D.22580>:
        D.22551 = *lmf;
        D.22563 = D.22551->previous_lmf;
        *lmf = D.22563;
        <D.22581>:
        <D.22579>:
        D.22582 = 1;
        return D.22582;
      }
    finally
      {
        cfa = {CLOBBER};
        unwind_info_len = {CLOBBER};
        regs = {CLOBBER};
      }
  }
  <D.22544>:
  D.22551 = *lmf;
  if (D.22551 != 0B) goto <D.22583>; else goto <D.22584>;
  <D.22583>:
  D.22551 = *lmf;
  D.22585 = D.22551->eip;
  D.22586 = (char *) D.22585;
  ji = mini_jit_info_table_find (domain, D.22586, 0B);
  if (ji == 0B) goto <D.22587>; else goto <D.22588>;
  <D.22587>:
  D.22551 = *lmf;
  D.22589 = D.22551->method;
  if (D.22589 == 0B) goto <D.22590>; else goto <D.22591>;
  <D.22590>:
  D.22582 = 0;
  return D.22582;
  <D.22591>:
  D.22551 = *lmf;
  D.22589 = D.22551->method;
  frame->method = D.22589;
  <D.22588>:
  frame->ji = ji;
  frame->type = 2;
  D.22572 = &new_ctx->uc_mcontext.gregs;
  D.22551 = *lmf;
  D.22592 = &D.22551->gregs;
  memcpy (D.22572, D.22592, 128);
  D.22593 = &new_ctx->uc_mcontext.fpregs.fprs;
  D.22551 = *lmf;
  D.22594 = &D.22551->fregs;
  memcpy (D.22593, D.22594, 128);
  D.22551 = *lmf;
  D.22559 = D.22551->ebp;
  new_ctx->uc_mcontext.gregs[15] = D.22559;
  D.22551 = *lmf;
  D.22559 = D.22551->ebp;
  D.22560 = (void *) D.22559;
  new_ctx->uc_stack.ss_sp = D.22560;
  D.22551 = *lmf;
  D.22585 = D.22551->eip;
  D.22595 = D.22585 + 18446744073709551614;
  new_ctx->uc_mcontext.gregs[14] = D.22595;
  D.22551 = *lmf;
  D.22585 = D.22551->eip;
  D.22595 = D.22585 + 18446744073709551614;
  new_ctx->uc_mcontext.psw.addr = D.22595;
  D.22551 = *lmf;
  D.22563 = D.22551->previous_lmf;
  *lmf = D.22563;
  D.22582 = 1;
  return D.22582;
  <D.22584>:
  D.22582 = 0;
  return D.22582;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.22598;
  long unsigned int D.22599;

  D.22599 = __builtin_object_size (__dest, 0);
  D.22598 = __builtin___memcpy_chk (__dest, __src, __len, D.22599);
  return D.22598;
}


__attribute__((visibility ("hidden")))
mono_arch_handle_exception (void * uc, void * obj)
{
  gboolean D.22601;

  D.22601 = mono_handle_exception (uc, obj);
  return D.22601;
}


__attribute__((visibility ("hidden")))
mono_arch_sigctx_to_monoctx (void * ctx, struct MonoContext * mctx)
{
  mono_sigctx_to_monoctx (ctx, mctx);
}


__attribute__((visibility ("hidden")))
mono_arch_monoctx_to_sigctx (struct MonoContext * mctx, void * ctx)
{
  mono_monoctx_to_sigctx (mctx, ctx);
}


__attribute__((visibility ("hidden")))
mono_arch_ip_from_context (void * sigctx)
{
  void * D.22603;
  long unsigned int D.22604;

  D.22604 = MEM[(struct MonoContext *)sigctx].uc_mcontext.psw.addr;
  D.22603 = (void *) D.22604;
  return D.22603;
}


__attribute__((visibility ("hidden")))
mono_arch_get_restore_context (struct MonoTrampInfo * * info, gboolean aot)
{
  _Bool D.22606;
  long int D.22607;
  long int D.22608;
  void * D.22613;

  D.22606 = aot != 0;
  D.22607 = (long int) D.22606;
  D.22608 = __builtin_expect (D.22607, 0);
  if (D.22608 != 0) goto <D.22609>; else goto <D.22610>;
  <D.22609>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "exceptions-s390x.c", 612, "!aot");
  <D.22610>:
  if (info != 0B) goto <D.22611>; else goto <D.22612>;
  <D.22611>:
  *info = 0B;
  <D.22612>:
  D.22613 = setcontext;
  return D.22613;
}


__attribute__((visibility ("hidden")))
mono_arch_is_int_overflow (void * uc, void * info)
{
  unsigned char D.22615;
  int D.22616;
  guint8 * D.22617;
  unsigned char D.22618;
  int D.22619;
  long unsigned int D.22620;
  guint16 * D.22623;
  short unsigned int D.22624;
  int D.22625;
  long unsigned int D.22626;
  long unsigned int D.22627;
  long unsigned int D.22630;
  long unsigned int D.22631;
  long unsigned int D.22632;
  guint8 * D.22640;
  unsigned char D.22641;
  int D.22642;
  guint8 * D.22647;
  unsigned char D.22648;
  guint8 * D.22652;
  unsigned char D.22653;
  int D.22654;
  int D.22655;
  int D.22656;
  guint8 * D.22657;
  unsigned char D.22658;
  int D.22659;
  int D.22660;
  long unsigned int code.18;
  gboolean D.22666;
  struct MonoContext * ctx;
  guint8 * code;
  guint64 * operand;
  gboolean arithExc;
  gint regNo;
  gint idxNo;
  gint offset;

  arithExc = 1;
  ctx = uc;
  code = MEM[(struct siginfo_t *)info]._sifields._sigfault.si_addr;
  D.22615 = *code;
  D.22616 = (int) D.22615;
  switch (D.22616) <default: <D.22402>, case 29: <D.22397>, case 93: <D.22399>, case 185: <D.22400>, case 227: <D.22401>>
  <D.22397>:
  D.22617 = code + 1;
  D.22618 = *D.22617;
  D.22619 = (int) D.22618;
  regNo = D.22619 & 15;
  D.22620 = ctx->uc_mcontext.gregs[regNo];
  if (D.22620 == 0) goto <D.22621>; else goto <D.22622>;
  <D.22621>:
  arithExc = 0;
  <D.22622>:
  goto <D.22398>;
  <D.22399>:
  regNo = 0;
  D.22617 = code + 1;
  D.22618 = *D.22617;
  D.22619 = (int) D.22618;
  idxNo = D.22619 & 15;
  D.22623 = code + 4;
  D.22624 = *D.22623;
  D.22625 = (int) D.22624;
  offset = D.22625 & 4095;
  D.22620 = ctx->uc_mcontext.gregs[regNo];
  D.22626 = (long unsigned int) offset;
  D.22627 = D.22620 + D.22626;
  operand = (guint64 *) D.22627;
  if (idxNo != 0) goto <D.22628>; else goto <D.22629>;
  <D.22628>:
  D.22630 = ctx->uc_mcontext.gregs[idxNo];
  D.22631 = D.22630 * 8;
  operand = operand + D.22631;
  <D.22629>:
  D.22632 = *operand;
  if (D.22632 == 0) goto <D.22633>; else goto <D.22634>;
  <D.22633>:
  arithExc = 0;
  <D.22634>:
  goto <D.22398>;
  <D.22400>:
  D.22617 = code + 1;
  D.22618 = *D.22617;
  if (D.22618 == 151) goto <D.22635>; else goto <D.22637>;
  <D.22637>:
  D.22617 = code + 1;
  D.22618 = *D.22617;
  if (D.22618 == 135) goto <D.22635>; else goto <D.22638>;
  <D.22638>:
  D.22617 = code + 1;
  D.22618 = *D.22617;
  if (D.22618 == 13) goto <D.22635>; else goto <D.22639>;
  <D.22639>:
  D.22617 = code + 1;
  D.22618 = *D.22617;
  if (D.22618 == 29) goto <D.22635>; else goto <D.22636>;
  <D.22635>:
  D.22640 = code + 3;
  D.22641 = *D.22640;
  D.22642 = (int) D.22641;
  regNo = D.22642 & 15;
  D.22620 = ctx->uc_mcontext.gregs[regNo];
  if (D.22620 == 0) goto <D.22643>; else goto <D.22644>;
  <D.22643>:
  arithExc = 0;
  <D.22644>:
  <D.22636>:
  goto <D.22398>;
  <D.22401>:
  D.22647 = code + 5;
  D.22648 = *D.22647;
  if (D.22648 == 151) goto <D.22645>; else goto <D.22649>;
  <D.22649>:
  D.22647 = code + 5;
  D.22648 = *D.22647;
  if (D.22648 == 135) goto <D.22645>; else goto <D.22650>;
  <D.22650>:
  D.22647 = code + 5;
  D.22648 = *D.22647;
  if (D.22648 == 13) goto <D.22645>; else goto <D.22651>;
  <D.22651>:
  D.22647 = code + 5;
  D.22648 = *D.22647;
  if (D.22648 == 29) goto <D.22645>; else goto <D.22646>;
  <D.22645>:
  regNo = 0;
  D.22617 = code + 1;
  D.22618 = *D.22617;
  D.22619 = (int) D.22618;
  idxNo = D.22619 & 15;
  D.22652 = code + 2;
  D.22653 = *D.22652;
  D.22654 = (int) D.22653;
  D.22655 = D.22654 & 3840;
  D.22640 = code + 3;
  D.22641 = *D.22640;
  D.22642 = (int) D.22641;
  D.22656 = D.22655 + D.22642;
  D.22657 = code + 4;
  D.22658 = *D.22657;
  D.22659 = (int) D.22658;
  D.22660 = D.22659 << 12;
  offset = D.22656 + D.22660;
  D.22620 = ctx->uc_mcontext.gregs[regNo];
  D.22626 = (long unsigned int) offset;
  D.22627 = D.22620 + D.22626;
  operand = (guint64 *) D.22627;
  if (idxNo != 0) goto <D.22661>; else goto <D.22662>;
  <D.22661>:
  D.22630 = ctx->uc_mcontext.gregs[idxNo];
  D.22631 = D.22630 * 8;
  operand = operand + D.22631;
  <D.22662>:
  D.22632 = *operand;
  if (D.22632 == 0) goto <D.22663>; else goto <D.22664>;
  <D.22663>:
  arithExc = 0;
  <D.22664>:
  <D.22646>:
  goto <D.22398>;
  <D.22402>:
  arithExc = 1;
  <D.22398>:
  code.18 = (long unsigned int) code;
  ctx->uc_mcontext.psw.addr = code.18;
  D.22666 = arithExc;
  return D.22666;
}


