__attribute__((visibility ("hidden")))
mono_arch_get_unbox_trampoline (struct MonoMethod * method, void * addr)
{
  long unsigned int addr.0;
  int D.22258;
  int D.22259;
  unsigned int D.22260;
  long int code.1;
  long int start.2;
  long int D.22263;
  _Bool D.22264;
  long int D.22265;
  long int D.22266;
  int D.22269;
  void * D.22270;
  guint8 * code;
  guint8 * start;
  int this_pos;
  struct MonoDomain * domain;

  this_pos = 2;
  domain = mono_domain_get ();
  code = mono_domain_code_reserve (domain, 28);
  start = code;
  MEM[(guint16 *)code] = 3344;
  code = code + 2;
  MEM[(guint32 *)code] = 2817785862;
  code = code + 4;
  addr.0 = (long unsigned int) addr;
  MEM[(guint64 *)code] = addr.0;
  code = code + 8;
  MEM[(guint16 *)code] = 58128;
  code = code + 2;
  MEM[(guint32 *)code] = 268697604;
  code = code + 4;
  D.22258 = this_pos << 20;
  D.22259 = D.22258 | -1492451312;
  D.22260 = (unsigned int) D.22259;
  MEM[(guint32 *)code] = D.22260;
  code = code + 4;
  MEM[(guint16 *)code] = 2033;
  code = code + 2;
  code.1 = (long int) code;
  start.2 = (long int) start;
  D.22263 = code.1 - start.2;
  D.22264 = D.22263 > 28;
  D.22265 = (long int) D.22264;
  D.22266 = __builtin_expect (D.22265, 0);
  if (D.22266 != 0) goto <D.22267>; else goto <D.22268>;
  <D.22267>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 109, "(code - start) <= 28");
  <D.22268>:
  code.1 = (long int) code;
  start.2 = (long int) start;
  D.22263 = code.1 - start.2;
  D.22269 = (int) D.22263;
  mono_arch_flush_icache (start, D.22269);
  D.22270 = start;
  return D.22270;
}


__attribute__((visibility ("hidden")))
mono_arch_patch_callsite (guint8 * method_start, guint8 * orig_code, guint8 * addr)
{
  long int addr.3;
  guint8 * D.22275;
  long int D.22276;
  long int D.22277;
  long int D.22278;
  long unsigned int D.22279;
  guint8 * D.22281;
  unsigned char D.22282;
  _Bool D.22283;
  long int D.22284;
  long int D.22285;
  guint8 * D.22288;
  unsigned char D.22289;
  _Bool D.22290;
  long int D.22291;
  long int D.22292;
  guint8 * D.22295;
  unsigned char D.22296;
  _Bool D.22297;
  long int D.22298;
  long int D.22299;
  guint8 * D.22302;
  unsigned char D.22303;
  _Bool D.22304;
  long int D.22305;
  long int D.22306;
  guint8 * D.22309;
  unsigned char D.22310;
  _Bool D.22311;
  long int D.22312;
  long int D.22313;
  guint8 * D.22316;
  unsigned char D.22317;
  _Bool D.22318;
  long int D.22319;
  long int D.22320;
  _Bool D.22323;
  long int D.22324;
  long int D.22325;
  guint8 * D.22328;
  long unsigned int addr.4;
  gint32 displace;
  short unsigned int opcode;

  opcode = MEM[(short unsigned int *)orig_code + -6B];
  if (opcode == 49381) goto <D.22272>; else goto <D.22273>;
  <D.22272>:
  orig_code = orig_code + 18446744073709551612;
  addr.3 = (long int) addr;
  D.22275 = orig_code + 18446744073709551614;
  D.22276 = (long int) D.22275;
  D.22277 = addr.3 - D.22276;
  D.22278 = D.22277 / 2;
  displace = (gint32) D.22278;
  D.22279 = (long unsigned int) displace;
  s390_patch_rel (orig_code, D.22279);
  mono_arch_flush_icache (orig_code, 4);
  goto <D.22280>;
  <D.22273>:
  D.22281 = orig_code + 18446744073709551608;
  D.22282 = *D.22281;
  D.22283 = D.22282 != 227;
  D.22284 = (long int) D.22283;
  D.22285 = __builtin_expect (D.22284, 0);
  if (D.22285 != 0) goto <D.22286>; else goto <D.22287>;
  <D.22286>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 141, "orig_code [-8] == 0xe3");
  <D.22287>:
  D.22288 = orig_code + 18446744073709551609;
  D.22289 = *D.22288;
  D.22290 = D.22289 != 224;
  D.22291 = (long int) D.22290;
  D.22292 = __builtin_expect (D.22291, 0);
  if (D.22292 != 0) goto <D.22293>; else goto <D.22294>;
  <D.22293>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 142, "orig_code [-7] == 0xe0");
  <D.22294>:
  D.22295 = orig_code + 18446744073709551610;
  D.22296 = *D.22295;
  D.22297 = D.22296 != 208;
  D.22298 = (long int) D.22297;
  D.22299 = __builtin_expect (D.22298, 0);
  if (D.22299 != 0) goto <D.22300>; else goto <D.22301>;
  <D.22300>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 143, "orig_code [-6] == 0xd0");
  <D.22301>:
  D.22302 = orig_code + 18446744073709551611;
  D.22303 = *D.22302;
  D.22304 = D.22303 != 4;
  D.22305 = (long int) D.22304;
  D.22306 = __builtin_expect (D.22305, 0);
  if (D.22306 != 0) goto <D.22307>; else goto <D.22308>;
  <D.22307>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 144, "orig_code [-5] == 0x04");
  <D.22308>:
  D.22309 = orig_code + 18446744073709551612;
  D.22310 = *D.22309;
  D.22311 = D.22310 != 0;
  D.22312 = (long int) D.22311;
  D.22313 = __builtin_expect (D.22312, 0);
  if (D.22313 != 0) goto <D.22314>; else goto <D.22315>;
  <D.22314>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 145, "orig_code [-4] == 0x00");
  <D.22315>:
  D.22316 = orig_code + 18446744073709551613;
  D.22317 = *D.22316;
  D.22318 = D.22317 != 4;
  D.22319 = (long int) D.22318;
  D.22320 = __builtin_expect (D.22319, 0);
  if (D.22320 != 0) goto <D.22321>; else goto <D.22322>;
  <D.22321>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 146, "orig_code [-3] == 0x04");
  <D.22322>:
  opcode = MEM[(short unsigned int *)orig_code + -2B];
  D.22323 = opcode != 3566;
  D.22324 = (long int) D.22323;
  D.22325 = __builtin_expect (D.22324, 0);
  if (D.22325 != 0) goto <D.22326>; else goto <D.22327>;
  <D.22326>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 148, "opcode == 0x0dee");
  <D.22327>:
  D.22328 = orig_code + 18446744073709551600;
  addr.4 = (long unsigned int) addr;
  s390_patch_addr (D.22328, addr.4);
  D.22328 = orig_code + 18446744073709551600;
  mono_arch_flush_icache (D.22328, 8);
  <D.22280>:
}


s390_patch_rel (guchar * code, guint64 target)
{
  unsigned int D.22332;
  guint32 * offset;

  offset = code;
  if (target != 0) goto <D.22330>; else goto <D.22331>;
  <D.22330>:
  D.22332 = (unsigned int) target;
  *offset = D.22332;
  <D.22331>:
}


s390_patch_addr (guchar * code, guint64 target)
{
  guint64 * offset;

  offset = code;
  if (target != 0) goto <D.22333>; else goto <D.22334>;
  <D.22333>:
  *offset = target;
  <D.22334>:
}


__attribute__((visibility ("hidden")))
mono_arch_patch_plt_entry (guint8 * code, void * * got, mgreg_t * regs, guint8 * addr)
{
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "tramp-s390x.c", 169);
}


__attribute__((visibility ("hidden")))
mono_arch_nullify_class_init_trampoline (guint8 * code, mgreg_t * regs)
{
  char patch[2];

  try
    {
      patch[0] = 7;
      patch[1] = 0;
      code = code + 18446744073709551614;
      memcpy (code, &patch, 2);
    }
  finally
    {
      patch = {CLOBBER};
    }
}


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

  D.22336 = __builtin_object_size (__dest, 0);
  D.22335 = __builtin___memcpy_chk (__dest, __src, __len, D.22336);
  return D.22335;
}


__attribute__((visibility ("hidden")))
mono_arch_get_nullified_class_init_trampoline (struct MonoTrampInfo * * info)
{
  long int code.5;
  long int buf.6;
  long int D.22342;
  unsigned int D.22343;
  struct MonoTrampInfo * D.22344;
  void * D.22345;
  guint8 * buf;
  guint8 * code;

  buf = mono_global_codeman_reserve (16);
  code = buf;
  MEM[(guint16 *)code] = 2046;
  code = code + 2;
  if (info != 0B) goto <D.22338>; else goto <D.22339>;
  <D.22338>:
  code.5 = (long int) code;
  buf.6 = (long int) buf;
  D.22342 = code.5 - buf.6;
  D.22343 = (unsigned int) D.22342;
  D.22344 = mono_tramp_info_create ("nullified_class_init_trampoline", buf, D.22343, 0B, 0B);
  *info = D.22344;
  <D.22339>:
  D.22345 = buf;
  return D.22345;
}


__attribute__((visibility ("hidden")))
mono_arch_nullify_plt_entry (guint8 * code, mgreg_t * regs)
{
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "tramp-s390x.c", 231);
}


__attribute__((visibility ("hidden")))
mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, struct MonoTrampInfo * * info, gboolean aot)
{
  _Bool D.22347;
  long int D.22348;
  long int D.22349;
  int D.22352;
  int D.22353;
  int D.22354;
  int D.22355;
  unsigned int D.22356;
  long unsigned int mono_get_lmf_addr.7;
  int D.22358;
  int D.22359;
  unsigned int D.22360;
  long unsigned int tramp.8;
  int D.22371;
  int D.22372;
  unsigned int D.22373;
  int D.22374;
  int D.22375;
  unsigned int D.22376;
  unsigned int D.22380;
  long int buf.9;
  long int code.10;
  long int D.22387;
  int D.22388;
  unsigned int D.22391;
  struct MonoTrampInfo * D.22392;
  _Bool D.22393;
  long int D.22394;
  long int D.22395;
  guchar * D.22398;
  char * tramp_name;
  guint8 * buf;
  guint8 * tramp;
  guint8 * code;
  int i;
  int offset;
  int lmfOffset;
  struct GSList * unwind_ops;
  struct MonoJumpInfo * ji;

  unwind_ops = 0B;
  ji = 0B;
  D.22347 = aot != 0;
  D.22348 = (long int) D.22347;
  D.22349 = __builtin_expect (D.22348, 0);
  if (D.22349 != 0) goto <D.22350>; else goto <D.22351>;
  <D.22350>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 254, "!aot");
  <D.22351>:
  buf = mono_global_codeman_reserve (512);
  code = buf;
  MEM[(guint16 *)buf] = 60271;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4029677604;
  buf = buf + 4;
  MEM[(guint32 *)buf] = 3104047295;
  buf = buf + 4;
  MEM[(guint32 *)buf] = 2818309456;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58288;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4026531876;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4037017636;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 60197;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4037541924;
  buf = buf + 4;
  offset = 200;
  i = 0;
  goto <D.22187>;
  <D.22186>:
  D.22352 = i << 20;
  D.22353 = D.22352 | 1610674176;
  D.22354 = offset & 4095;
  D.22355 = D.22353 | D.22354;
  D.22356 = (unsigned int) D.22355;
  MEM[(guint32 *)buf] = D.22356;
  buf = buf + 4;
  offset = offset + 8;
  i = i + 1;
  <D.22187>:
  if (i <= 15) goto <D.22186>; else goto <D.22188>;
  <D.22188>:
  MEM[(guint16 *)buf] = 3536;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 2817785862;
  buf = buf + 4;
  mono_get_lmf_addr.7 = (long unsigned int) mono_get_lmf_addr;
  MEM[(guint64 *)buf] = mono_get_lmf_addr.7;
  buf = buf + 8;
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3489923076;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 3553;
  buf = buf + 2;
  lmfOffset = 344;
  MEM[(guint32 *)buf] = 3104047327;
  buf = buf + 4;
  D.22358 = lmfOffset & 65535;
  D.22359 = D.22358 | -1478819840;
  D.22360 = (unsigned int) D.22359;
  MEM[(guint32 *)buf] = D.22360;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58144;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3490185252;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58112;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 536870916;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58320;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 536870948;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58112;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3489660964;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4037017604;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3490709540;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4026531844;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3491233828;
  buf = buf + 4;
  if (tramp_type == 1) goto <D.22361>; else goto <D.22362>;
  <D.22361>:
  MEM[(guint32 *)buf] = 2803433472;
  buf = buf + 4;
  goto <D.22363>;
  <D.22362>:
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 275775492;
  buf = buf + 4;
  <D.22363>:
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3491758116;
  buf = buf + 4;
  MEM[(guint32 *)buf] = 3525300328;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 61608;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3528446088;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 45104;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3531591896;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 61640;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 1092678320;
  buf = buf + 4;
  if (tramp_type == 1) goto <D.22364>; else goto <D.22365>;
  <D.22364>:
  MEM[(guint32 *)buf] = 2805530624;
  buf = buf + 4;
  goto <D.22366>;
  <D.22365>:
  MEM[(guint16 *)buf] = 58160;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 2960130052;
  buf = buf + 4;
  <D.22366>:
  if (tramp_type == 3) goto <D.22367>; else goto <D.22368>;
  <D.22367>:
  MEM[(guint16 *)buf] = 58176;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4076339204;
  buf = buf + 4;
  goto <D.22369>;
  <D.22368>:
  MEM[(guint16 *)buf] = 58176;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4037017604;
  buf = buf + 4;
  <D.22369>:
  MEM[(guint16 *)buf] = 3536;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 2817785862;
  buf = buf + 4;
  tramp = mono_get_trampoline_func (tramp_type);
  tramp.8 = (long unsigned int) tramp;
  MEM[(guint64 *)buf] = tramp.8;
  buf = buf + 8;
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3489923076;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 3553;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 3104047122;
  buf = buf + 4;
  {
    int lmfOffset;

    lmfOffset = 0;
    MEM[(guint32 *)buf] = 3104047327;
    buf = buf + 4;
    lmfOffset = 344;
    D.22371 = lmfOffset & 65535;
    D.22372 = D.22371 | -1478819840;
    D.22373 = (unsigned int) D.22372;
    MEM[(guint32 *)buf] = D.22373;
    buf = buf + 4;
    MEM[(guint16 *)buf] = 58208;
    buf = buf + 2;
    MEM[(guint32 *)buf] = 3490185220;
    buf = buf + 4;
    MEM[(guint16 *)buf] = 58112;
    buf = buf + 2;
    MEM[(guint32 *)buf] = 3489660932;
    buf = buf + 4;
    MEM[(guint16 *)buf] = 58320;
    buf = buf + 2;
    MEM[(guint32 *)buf] = 1610612740;
    buf = buf + 4;
    MEM[(guint16 *)buf] = 58112;
    buf = buf + 2;
    MEM[(guint32 *)buf] = 1610612772;
    buf = buf + 4;
  }
  MEM[(guint16 *)buf] = 60197;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4037541892;
  buf = buf + 4;
  offset = 200;
  i = 0;
  goto <D.22191>;
  <D.22190>:
  D.22352 = i << 20;
  D.22374 = D.22352 | 1744891904;
  D.22354 = offset & 4095;
  D.22375 = D.22374 | D.22354;
  D.22376 = (unsigned int) D.22375;
  MEM[(guint32 *)buf] = D.22376;
  buf = buf + 4;
  offset = offset + 8;
  i = i + 1;
  <D.22191>:
  if (i <= 15) goto <D.22190>; else goto <D.22192>;
  <D.22192>:
  MEM[(guint32 *)buf] = 3104047355;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 60270;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 4029677572;
  buf = buf + 4;
  D.22380 = tramp_type + 4294967294;
  if (D.22380 <= 1) goto <D.22377>; else goto <D.22381>;
  <D.22381>:
  if (tramp_type == 8) goto <D.22377>; else goto <D.22382>;
  <D.22382>:
  if (tramp_type == 4) goto <D.22377>; else goto <D.22383>;
  <D.22383>:
  if (tramp_type == 10) goto <D.22377>; else goto <D.22384>;
  <D.22384>:
  if (tramp_type == 11) goto <D.22377>; else goto <D.22378>;
  <D.22377>:
  MEM[(guint32 *)buf] = 3104047137;
  buf = buf + 4;
  MEM[(guint16 *)buf] = 2046;
  buf = buf + 2;
  goto <D.22379>;
  <D.22378>:
  MEM[(guint16 *)buf] = 2033;
  buf = buf + 2;
  <D.22379>:
  buf.9 = (long int) buf;
  code.10 = (long int) code;
  D.22387 = buf.9 - code.10;
  D.22388 = (int) D.22387;
  mono_arch_flush_icache (code, D.22388);
  if (info != 0B) goto <D.22389>; else goto <D.22390>;
  <D.22389>:
  tramp_name = mono_get_generic_trampoline_name (tramp_type);
  buf.9 = (long int) buf;
  code.10 = (long int) code;
  D.22387 = buf.9 - code.10;
  D.22391 = (unsigned int) D.22387;
  D.22392 = mono_tramp_info_create (tramp_name, buf, D.22391, ji, unwind_ops);
  *info = D.22392;
  monoeg_g_free (tramp_name);
  <D.22390>:
  buf.9 = (long int) buf;
  code.10 = (long int) code;
  D.22387 = buf.9 - code.10;
  D.22393 = D.22387 > 512;
  D.22394 = (long int) D.22393;
  D.22395 = __builtin_expect (D.22394, 0);
  if (D.22395 != 0) goto <D.22396>; else goto <D.22397>;
  <D.22396>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 438, "(buf - code) <= 512");
  <D.22397>:
  D.22398 = code;
  return D.22398;
}


__attribute__((visibility ("hidden")))
mono_arch_create_specific_trampoline (void * arg1, MonoTrampolineType tramp_type, struct MonoDomain * domain, guint32 * code_len)
{
  long unsigned int arg1.11;
  long int tramp.12;
  long int buf.13;
  long int D.22403;
  long int D.22404;
  unsigned int displace.14;
  long int code.15;
  long int D.22407;
  int D.22408;
  _Bool D.22409;
  long int D.22410;
  long int D.22411;
  unsigned int D.22416;
  void * D.22417;
  guint8 * code;
  guint8 * buf;
  guint8 * tramp;
  gint32 displace;

  tramp = mono_get_trampoline_code (tramp_type);
  buf = mono_domain_code_reserve (domain, 96);
  code = buf;
  MEM[(guint16 *)buf] = 3344;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 2817785862;
  buf = buf + 4;
  arg1.11 = (long unsigned int) arg1;
  MEM[(guint64 *)buf] = arg1.11;
  buf = buf + 8;
  MEM[(guint16 *)buf] = 58128;
  buf = buf + 2;
  MEM[(guint32 *)buf] = 268697604;
  buf = buf + 4;
  tramp.12 = (long int) tramp;
  buf.13 = (long int) buf;
  D.22403 = tramp.12 - buf.13;
  D.22404 = D.22403 / 2;
  displace = (gint32) D.22404;
  MEM[(guint16 *)buf] = 49396;
  buf = buf + 2;
  displace.14 = (unsigned int) displace;
  MEM[(guint32 *)buf] = displace.14;
  buf = buf + 4;
  buf.13 = (long int) buf;
  code.15 = (long int) code;
  D.22407 = buf.13 - code.15;
  D.22408 = (int) D.22407;
  mono_arch_flush_icache (code, D.22408);
  buf.13 = (long int) buf;
  code.15 = (long int) code;
  D.22407 = buf.13 - code.15;
  D.22409 = D.22407 > 96;
  D.22410 = (long int) D.22409;
  D.22411 = __builtin_expect (D.22410, 0);
  if (D.22411 != 0) goto <D.22412>; else goto <D.22413>;
  <D.22412>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 479, "(buf - code) <= SPECIFIC_TRAMPOLINE_SIZE");
  <D.22413>:
  if (code_len != 0B) goto <D.22414>; else goto <D.22415>;
  <D.22414>:
  buf.13 = (long int) buf;
  code.15 = (long int) code;
  D.22407 = buf.13 - code.15;
  D.22416 = (unsigned int) D.22407;
  *code_len = D.22416;
  <D.22415>:
  D.22417 = code;
  return D.22417;
}


__attribute__((visibility ("hidden")))
mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, struct MonoTrampInfo * * info, gboolean aot)
{
  signed int slot.16;
  _Bool D.22420;
  int slot.17;
  unsigned int index.18;
  unsigned int D.22425;
  int D.22426;
  int D.22428;
  int D.22432;
  long unsigned int D.22433;
  long unsigned int D.22434;
  int iPatch.19;
  long unsigned int D.22439;
  long unsigned int D.22440;
  guint8 * * D.22441;
  int iPatch.20;
  long unsigned int D.22447;
  long unsigned int D.22448;
  guint8 * * D.22449;
  int D.22450;
  long unsigned int D.22451;
  unsigned int D.22452;
  unsigned int D.22453;
  unsigned int D.22454;
  unsigned int D.22455;
  long unsigned int D.22456;
  long unsigned int D.22457;
  unsigned int D.22458;
  unsigned int D.22459;
  unsigned int D.22460;
  unsigned int D.22461;
  unsigned int D.22462;
  int iPatch.21;
  long unsigned int D.22464;
  long unsigned int D.22465;
  guint8 * * D.22466;
  long unsigned int code.22;
  long unsigned int D.22468;
  long unsigned int D.22469;
  guint8 * * D.22470;
  guint8 * D.22471;
  long unsigned int D.22472;
  long unsigned int D.22473;
  long unsigned int D.22474;
  guint8 * D.22475;
  long unsigned int D.22476;
  long unsigned int D.22477;
  void * D.22478;
  struct MonoDomain * D.22479;
  long int tramp.23;
  long int code.24;
  long int D.22482;
  long int D.22483;
  unsigned int displace.25;
  long int buf.26;
  long int D.22486;
  int D.22487;
  long int D.22488;
  _Bool D.22489;
  long int D.22490;
  long int D.22491;
  unsigned int D.22496;
  struct MonoTrampInfo * D.22497;
  void * D.22498;
  guint8 * tramp;
  guint8 * code;
  guint8 * buf;
  guint8 * * rgctx_null_jumps;
  gint32 displace;
  int tramp_size;
  int depth;
  int index;
  int iPatch;
  int i;
  gboolean mrgctx;
  struct MonoJumpInfo * ji;
  struct GSList * unwind_ops;

  iPatch = 0;
  ji = 0B;
  unwind_ops = 0B;
  slot.16 = (signed int) slot;
  D.22420 = slot.16 < 0;
  mrgctx = (gboolean) D.22420;
  slot.17 = (int) slot;
  index = slot.17 & 2147483647;
  if (mrgctx != 0) goto <D.22422>; else goto <D.22423>;
  <D.22422>:
  index.18 = (unsigned int) index;
  D.22425 = index.18 + 2;
  index = (int) D.22425;
  <D.22423>:
  depth = 0;
  <D.22223>:
  {
    int size;

    size = mono_class_rgctx_get_array_size (depth, mrgctx);
    D.22426 = size + -1;
    if (D.22426 > index) goto <D.22222>; else goto <D.22427>;
    <D.22427>:
    D.22426 = size + -1;
    index = index - D.22426;
  }
  depth = depth + 1;
  goto <D.22223>;
  <D.22222>:
  D.22428 = depth + 3;
  tramp_size = D.22428 * 16;
  if (mrgctx != 0) goto <D.22429>; else goto <D.22430>;
  <D.22429>:
  tramp_size = tramp_size + 4;
  goto <D.22431>;
  <D.22430>:
  tramp_size = tramp_size + 12;
  <D.22431>:
  buf = mono_global_codeman_reserve (tramp_size);
  code = buf;
  unwind_ops = mono_arch_get_cie_program ();
  D.22432 = depth + 2;
  D.22433 = (long unsigned int) D.22432;
  D.22434 = D.22433 * 8;
  rgctx_null_jumps = monoeg_malloc (D.22434);
  if (mrgctx != 0) goto <D.22435>; else goto <D.22436>;
  <D.22435>:
  MEM[(guint32 *)code] = 3104047122;
  code = code + 4;
  goto <D.22437>;
  <D.22436>:
  MEM[(guint16 *)code] = 58128;
  code = code + 2;
  MEM[(guint32 *)code] = 540016644;
  code = code + 4;
  MEM[(guint32 *)code] = 3103916049;
  code = code + 4;
  iPatch.19 = iPatch;
  iPatch = iPatch.19 + 1;
  D.22439 = (long unsigned int) iPatch.19;
  D.22440 = D.22439 * 8;
  D.22441 = rgctx_null_jumps + D.22440;
  *D.22441 = code;
  MEM[(guint16 *)code] = 49284;
  code = code + 2;
  MEM[(guint32 *)code] = 0;
  code = code + 4;
  <D.22437>:
  i = 0;
  goto <D.22225>;
  <D.22224>:
  if (mrgctx != 0) goto <D.22444>; else goto <D.22442>;
  <D.22444>:
  if (i == 0) goto <D.22445>; else goto <D.22442>;
  <D.22445>:
  MEM[(guint16 *)code] = 58128;
  code = code + 2;
  MEM[(guint32 *)code] = 269484036;
  code = code + 4;
  goto <D.22443>;
  <D.22442>:
  MEM[(guint16 *)code] = 58128;
  code = code + 2;
  MEM[(guint32 *)code] = 268435460;
  code = code + 4;
  <D.22443>:
  MEM[(guint32 *)code] = 3103916049;
  code = code + 4;
  iPatch.20 = iPatch;
  iPatch = iPatch.20 + 1;
  D.22447 = (long unsigned int) iPatch.20;
  D.22448 = D.22447 * 8;
  D.22449 = rgctx_null_jumps + D.22448;
  *D.22449 = code;
  MEM[(guint16 *)code] = 49284;
  code = code + 2;
  MEM[(guint32 *)code] = 0;
  code = code + 4;
  i = i + 1;
  <D.22225>:
  if (i < depth) goto <D.22224>; else goto <D.22226>;
  <D.22226>:
  MEM[(guint16 *)code] = 58128;
  code = code + 2;
  D.22450 = index + 1;
  D.22451 = (long unsigned int) D.22450;
  D.22452 = (unsigned int) D.22451;
  D.22453 = D.22452 * 8;
  D.22454 = D.22453 << 16;
  D.22455 = D.22454 & 267911168;
  D.22450 = index + 1;
  D.22451 = (long unsigned int) D.22450;
  D.22456 = D.22451 * 8;
  D.22457 = D.22456 >> 12;
  D.22458 = (unsigned int) D.22457;
  D.22459 = D.22458 << 8;
  D.22460 = D.22459 & 65535;
  D.22461 = D.22455 | D.22460;
  D.22462 = D.22461 | 268435460;
  MEM[(guint32 *)code] = D.22462;
  code = code + 4;
  MEM[(guint32 *)code] = 3103916049;
  code = code + 4;
  iPatch.21 = iPatch;
  iPatch = iPatch.21 + 1;
  D.22464 = (long unsigned int) iPatch.21;
  D.22465 = D.22464 * 8;
  D.22466 = rgctx_null_jumps + D.22465;
  *D.22466 = code;
  MEM[(guint16 *)code] = 49284;
  code = code + 2;
  MEM[(guint32 *)code] = 0;
  code = code + 4;
  MEM[(guint32 *)code] = 3104047137;
  code = code + 4;
  MEM[(guint16 *)code] = 2046;
  code = code + 2;
  i = 0;
  goto <D.22228>;
  <D.22227>:
  code.22 = (long unsigned int) code;
  D.22468 = (long unsigned int) i;
  D.22469 = D.22468 * 8;
  D.22470 = rgctx_null_jumps + D.22469;
  D.22471 = *D.22470;
  D.22472 = (long unsigned int) D.22471;
  D.22473 = code.22 - D.22472;
  D.22474 = D.22473 / 2;
  displace = (gint32) D.22474;
  D.22468 = (long unsigned int) i;
  D.22469 = D.22468 * 8;
  D.22470 = rgctx_null_jumps + D.22469;
  D.22471 = *D.22470;
  D.22475 = D.22471 + 2;
  D.22476 = (long unsigned int) displace;
  s390_patch_rel (D.22475, D.22476);
  i = i + 1;
  <D.22228>:
  if (i < iPatch) goto <D.22227>; else goto <D.22229>;
  <D.22229>:
  monoeg_g_free (rgctx_null_jumps);
  MEM[(guint32 *)code] = 3104047250;
  code = code + 4;
  D.22477 = (long unsigned int) slot;
  D.22478 = (void *) D.22477;
  D.22479 = mono_get_root_domain ();
  tramp = mono_arch_create_specific_trampoline (D.22478, 4, D.22479, 0B);
  tramp.23 = (long int) tramp;
  code.24 = (long int) code;
  D.22482 = tramp.23 - code.24;
  D.22483 = D.22482 / 2;
  displace = (gint32) D.22483;
  MEM[(guint16 *)code] = 49396;
  code = code + 2;
  displace.25 = (unsigned int) displace;
  MEM[(guint32 *)code] = displace.25;
  code = code + 4;
  code.24 = (long int) code;
  buf.26 = (long int) buf;
  D.22486 = code.24 - buf.26;
  D.22487 = (int) D.22486;
  mono_arch_flush_icache (buf, D.22487);
  code.24 = (long int) code;
  buf.26 = (long int) buf;
  D.22486 = code.24 - buf.26;
  D.22488 = (long int) tramp_size;
  D.22489 = D.22486 > D.22488;
  D.22490 = (long int) D.22489;
  D.22491 = __builtin_expect (D.22490, 0);
  if (D.22491 != 0) goto <D.22492>; else goto <D.22493>;
  <D.22492>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 593, "code - buf <= tramp_size");
  <D.22493>:
  if (info != 0B) goto <D.22494>; else goto <D.22495>;
  <D.22494>:
  {
    char * name;

    slot.17 = (int) slot;
    name = mono_get_rgctx_fetch_trampoline_name (slot.17);
    code.24 = (long int) code;
    buf.26 = (long int) buf;
    D.22486 = code.24 - buf.26;
    D.22496 = (unsigned int) D.22486;
    D.22497 = mono_tramp_info_create (name, buf, D.22496, ji, unwind_ops);
    *info = D.22497;
    monoeg_g_free (name);
  }
  <D.22495>:
  D.22498 = buf;
  return D.22498;
  D.22498 = 0B;
  return D.22498;
}


__attribute__((visibility ("hidden")))
mono_arch_get_static_rgctx_trampoline (struct MonoMethod * m, struct MonoMethodRuntimeGenericContext * mrgctx, void * addr)
{
  long unsigned int mrgctx.27;
  long unsigned int addr.28;
  long unsigned int code.29;
  long unsigned int D.22503;
  long unsigned int D.22504;
  unsigned int displace.30;
  long int code.31;
  long int start.32;
  long int D.22508;
  long int D.22509;
  _Bool D.22510;
  long int D.22511;
  long int D.22512;
  int D.22515;
  void * D.22516;
  guint8 * code;
  guint8 * start;
  gint32 displace;
  int buf_len;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  buf_len = 32;
  code = mono_domain_code_reserve (domain, buf_len);
  start = code;
  MEM[(guint16 *)code] = 3344;
  code = code + 2;
  MEM[(guint32 *)code] = 2817785862;
  code = code + 4;
  mrgctx.27 = (long unsigned int) mrgctx;
  MEM[(guint64 *)code] = mrgctx.27;
  code = code + 8;
  MEM[(guint16 *)code] = 58256;
  code = code + 2;
  MEM[(guint32 *)code] = 268697604;
  code = code + 4;
  addr.28 = (long unsigned int) addr;
  code.29 = (long unsigned int) code;
  D.22503 = addr.28 - code.29;
  D.22504 = D.22503 / 2;
  displace = (gint32) D.22504;
  MEM[(guint16 *)code] = 49396;
  code = code + 2;
  displace.30 = (unsigned int) displace;
  MEM[(guint32 *)code] = displace.30;
  code = code + 4;
  code.31 = (long int) code;
  start.32 = (long int) start;
  D.22508 = code.31 - start.32;
  D.22509 = (long int) buf_len;
  D.22510 = D.22508 >= D.22509;
  D.22511 = (long int) D.22510;
  D.22512 = __builtin_expect (D.22511, 0);
  if (D.22512 != 0) goto <D.22513>; else goto <D.22514>;
  <D.22513>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 640, "(code - start) < buf_len");
  <D.22514>:
  code.31 = (long int) code;
  start.32 = (long int) start;
  D.22508 = code.31 - start.32;
  D.22515 = (int) D.22508;
  mono_arch_flush_icache (start, D.22515);
  D.22516 = start;
  return D.22516;
}


__attribute__((visibility ("hidden")))
mono_arch_create_generic_class_init_trampoline (struct MonoTrampInfo * * info, gboolean aot)
{
  int byte_offset.33;
  int D.22521;
  int D.22522;
  int D.22523;
  int D.22524;
  int D.22525;
  int D.22526;
  int D.22527;
  int D.22528;
  unsigned int D.22529;
  unsigned char bitmask.34;
  int D.22531;
  int D.22532;
  unsigned int D.22533;
  struct MonoDomain * D.22534;
  long int tramp.35;
  long int code.36;
  long int D.22537;
  long int D.22538;
  unsigned int displace.37;
  long int buf.38;
  long int D.22541;
  int D.22542;
  long int D.22543;
  _Bool D.22544;
  long int D.22545;
  long int D.22546;
  unsigned int D.22551;
  struct MonoTrampInfo * D.22552;
  void * D.22553;
  guint8 * tramp;
  guint8 * code;
  guint8 * buf;
  static int byte_offset = -1;
  static guint8 bitmask;
  guint8 * jump;
  gint32 displace;
  int tramp_size;
  struct GSList * unwind_ops;
  struct MonoJumpInfo * ji;

  unwind_ops = 0B;
  ji = 0B;
  tramp_size = 48;
  buf = mono_global_codeman_reserve (tramp_size);
  code = buf;
  unwind_ops = mono_arch_get_cie_program ();
  byte_offset.33 = byte_offset;
  if (byte_offset.33 < 0) goto <D.22519>; else goto <D.22520>;
  <D.22519>:
  {
    struct MonoVTable tmp;

    try
      {
        memset (&tmp, 0, 56);
        tmp.initialized = 1;
        mono_marshal_find_nonzero_bit_offset (&tmp, 56, &byte_offset, &bitmask);
      }
    finally
      {
        tmp = {CLOBBER};
      }
  }
  <D.22520>:
  MEM[(guint16 *)code] = 58112;
  code = code + 2;
  byte_offset.33 = byte_offset;
  D.22521 = byte_offset.33 << 16;
  D.22522 = D.22521 & 268369920;
  D.22523 = D.22522 | -1879048192;
  byte_offset.33 = byte_offset;
  D.22524 = byte_offset.33 >> 12;
  D.22525 = D.22524 << 8;
  D.22526 = D.22525 & 65535;
  D.22527 = D.22523 | D.22526;
  D.22528 = D.22527 | 144;
  D.22529 = (unsigned int) D.22528;
  MEM[(guint32 *)code] = D.22529;
  code = code + 4;
  bitmask.34 = bitmask;
  D.22531 = (int) bitmask.34;
  D.22532 = D.22531 | -1526267904;
  D.22533 = (unsigned int) D.22532;
  MEM[(guint32 *)code] = D.22533;
  code = code + 4;
  MEM[(guint16 *)code] = 1918;
  code = code + 2;
  D.22534 = mono_get_root_domain ();
  tramp = mono_arch_create_specific_trampoline (0B, 3, D.22534, 0B);
  tramp.35 = (long int) tramp;
  code.36 = (long int) code;
  D.22537 = tramp.35 - code.36;
  D.22538 = D.22537 / 2;
  displace = (gint32) D.22538;
  MEM[(guint16 *)code] = 49396;
  code = code + 2;
  displace.37 = (unsigned int) displace;
  MEM[(guint32 *)code] = displace.37;
  code = code + 4;
  code.36 = (long int) code;
  buf.38 = (long int) buf;
  D.22541 = code.36 - buf.38;
  D.22542 = (int) D.22541;
  mono_arch_flush_icache (buf, D.22542);
  code.36 = (long int) code;
  buf.38 = (long int) buf;
  D.22541 = code.36 - buf.38;
  D.22543 = (long int) tramp_size;
  D.22544 = D.22541 > D.22543;
  D.22545 = (long int) D.22544;
  D.22546 = __builtin_expect (D.22545, 0);
  if (D.22546 != 0) goto <D.22547>; else goto <D.22548>;
  <D.22547>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "tramp-s390x.c", 692, "code - buf <= tramp_size");
  <D.22548>:
  if (info != 0B) goto <D.22549>; else goto <D.22550>;
  <D.22549>:
  code.36 = (long int) code;
  buf.38 = (long int) buf;
  D.22541 = code.36 - buf.38;
  D.22551 = (unsigned int) D.22541;
  D.22552 = mono_tramp_info_create ("generic_class_init_trampoline", buf, D.22551, ji, unwind_ops);
  *info = D.22552;
  <D.22550>:
  D.22553 = buf;
  return D.22553;
}


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

  D.22556 = __builtin_object_size (__dest, 0);
  D.22555 = __builtin___memset_chk (__dest, __ch, __len, D.22556);
  return D.22555;
}


