grtm_test(int paddr, int descsize, int buffersize, int buffers, int rsdepth,
          int reed, int reed8, int pseudo, int conv, int mark, int split,
          int sub) {
  report_device(0x01030000);
  struct grtm_dma {
    volatile unsigned long ctrl;
    volatile unsigned long stat;
    volatile unsigned long len;
    volatile unsigned long descr;
    volatile unsigned long conf;
    volatile unsigned long rev;
  };
  struct grtm_tx {
    volatile unsigned long ctrl;
    volatile unsigned long stat;
    volatile unsigned long conf;
    volatile unsigned long dummy0;
    volatile unsigned long phy;
    volatile unsigned long code;
    volatile unsigned long aasm;
    volatile unsigned long dummy1;
    volatile unsigned long all;
    volatile unsigned long master;
    volatile unsigned long idle;
    volatile unsigned long dummy2;
    volatile unsigned long dummy3;
    volatile unsigned long dummy4;
    volatile unsigned long dummy5;
    volatile unsigned long dummy6;
    volatile unsigned long fsh0;
    volatile unsigned long fsh1;
    volatile unsigned long fsh2;
    volatile unsigned long fsh3;
    volatile unsigned long ocf;
  };
  struct grtm_dma *ldma = (struct grtm_dma *)(paddr);
  struct grtm_tx *ltx = (struct grtm_tx *)(paddr + 0x80);
  long int subtst = ((rsdepth - 1) << 15) | (reed << 14) | (reed8 << 13) |
                    (pseudo << 12) | (mark << 11) | (conv << 10) |
                    (split << 9) | (sub << 8);
  report_subtest(subtst);
  if ((ldma->rev & 0xff) < 3)
    fail(1);
  int TFIE = 0;
  int RST = 1;
  int TXRST = 1;
  int IE = 0;
  int EN = 0;
  ldma->ctrl = (TFIE << 4) | (RST << 3) | (TXRST << 2) | (IE << 1) | (EN);
  RST = 0;
  TXRST = 0;
  EN = 0;
  ldma->ctrl = (TFIE << 4) | (RST << 3) | (TXRST << 2) | (IE << 1) | (EN);
  int LIMIT = 32 * 2;
  int LENGTH = rsdepth * (223 + 16 * reed8);
  ldma->len = ((LIMIT - 1) << 16) | (LENGTH - 1);
  int SF = 1;
  int SYMBOLRATE = 1;
  int SCF = 0;
  int SUBRATE = 1;
  ltx->phy = (SF << 31) | (SYMBOLRATE << 16) | (SCF << 15) | (SUBRATE);
  int CIF = 0;
  int CSEL = 0;
  int AASM = 0;
  int RS = reed;
  int RSDEPTH = rsdepth - 1;
  int RS8 = reed8;
  int PSR = pseudo;
  int NRZ = mark;
  int CE = conv;
  int CERATE = 0;
  int SP = split;
  int SC = sub;
  ltx->code = (CIF << 19) | (CSEL << 17) | (AASM << 16) | (RS << 15) |
              (RSDEPTH << 12) | (RS8 << 11) | (PSR << 7) | (NRZ << 6) |
              (CE << 5) | (CERATE << 2) | (SP << 1) | (SC);
  long int SYNC = 0x352EF853;
  ltx->aasm = SYNC;
  int FSHLENGTH = 0;
  int IZ = 0;
  int FECF = 1;
  int FHEC = 0;
  int VER = 0x0;
  ltx->all = (FSHLENGTH << 17) | (IZ << 16) | (FECF << 15) | (FHEC << 14) |
             (VER << 12);
  int MC = 1;
  int FSH = 0;
  int OCF = 1;
  int OW = 1;
  ltx->master = (MC << 3) | (FSH << 2) | (OCF << 1) | (OW);
  int IDLE = 1;
  int IDLE_OCF = 1;
  int EVC = 0;
  int IDLE_FSH = 0;
  int VCC = 0;
  int IDLE_MC = 0;
  int VCID = 0x7;
  int SCID = 0x123;
  ltx->idle = (IDLE << 21) | (IDLE_OCF << 20) | (EVC << 19) | (IDLE_FSH << 18) |
              (VCC << 17) | (IDLE_MC << 16) | (VCID << 10) | (SCID);
  long int CLCW = 0xFEEDBACC;
  ltx->ocf = CLCW;
  int TXTE = 1;
  ltx->ctrl = (TXTE);
  while ((ldma->stat & 0x40) != 0x40)
    ;
  TFIE = 0;
  RST = 1;
  TXRST = 1;
  IE = 0;
  EN = 0;
  ldma->ctrl = (TFIE << 4) | (RST << 3) | (TXRST << 2) | (IE << 1) | (EN);
  RST = 0;
  TXRST = 0;
  EN = 0;
  ldma->ctrl = (TFIE << 4) | (RST << 3) | (TXRST << 2) | (IE << 1) | (EN);
  LIMIT = 32 * 2;
  LENGTH = rsdepth * (223 + 16 * reed8);
  ldma->len = ((LIMIT - 1) << 16) | (LENGTH - 1);
  SF = 1;
  SYMBOLRATE = 1;
  SCF = 0;
  SUBRATE = 1;
  ltx->phy = (SF << 31) | (SYMBOLRATE << 16) | (SCF << 15) | (SUBRATE);
  CIF = 0;
  CSEL = 0;
  AASM = 0;
  RS = reed;
  RSDEPTH = rsdepth - 1;
  RS8 = reed8;
  PSR = pseudo;
  NRZ = mark;
  CE = conv;
  CERATE = 0;
  SP = split;
  SC = sub;
  ltx->code = (CIF << 19) | (CSEL << 17) | (AASM << 16) | (RS << 15) |
              (RSDEPTH << 12) | (RS8 << 11) | (PSR << 7) | (NRZ << 6) |
              (CE << 5) | (CERATE << 2) | (SP << 1) | (SC);
  SYNC = 0x352EF853;
  ltx->aasm = SYNC;
  FSHLENGTH = 0;
  IZ = 0;
  FECF = 1;
  FHEC = 0;
  VER = 0x0;
  ltx->all = (FSHLENGTH << 17) | (IZ << 16) | (FECF << 15) | (FHEC << 14) |
             (VER << 12);
  MC = 1;
  FSH = 0;
  OCF = 1;
  OW = 1;
  ltx->master = (MC << 3) | (FSH << 2) | (OCF << 1) | (OW);
  IDLE = 1;
  IDLE_OCF = 1;
  EVC = 0;
  IDLE_FSH = 0;
  VCC = 0;
  IDLE_MC = 0;
  VCID = 0x7;
  SCID = 0x123;
  ltx->idle = (IDLE << 21) | (IDLE_OCF << 20) | (EVC << 19) | (IDLE_FSH << 18) |
              (VCC << 17) | (IDLE_MC << 16) | (VCID << 10) | (SCID);
  CLCW = 0xFEEDBACC;
  ltx->ocf = CLCW;
  report_subtest(0x1);
  TXTE = 1;
  ltx->ctrl = (TXTE);
  while ((ldma->stat & 0x40) != 0x40)
    ;
  volatile long int descmemory[descsize / 4];
  long int descmemorybase;
  descmemorybase = (long int)&descmemory[0];
  descmemorybase = descmemorybase & 0xFFFFFC00;
  descmemorybase = descmemorybase + 0x400;
  volatile long int framememory[buffersize * buffers / 4];
  long int framememorybase;
  framememorybase = (long int)&framememory[0];
  framememorybase = framememorybase & 0xFFFFFC00;
  framememorybase = framememorybase + 0x400;
  int BASE = descmemorybase >> 10;
  int INDEX = 0;
  ldma->descr = (BASE << 10) | (INDEX << 3);
  report_subtest(0x2);
  int UE = 0;
  int TS = 0;
  int VCE = 0;
  int MCB = 0;
  int FSHB = 0;
  int OCFB = 0;
  int FHECB = 0;
  int IZB = 0;
  int FECFB = 0;
  int DESC_IE = 0;
  int WR = 0;
  int DESC_EN = 1;
  int DESCRIPTOR = (UE << 15) | (TS << 14) | (VCE << 9) | (MCB << 8) |
                   (FSHB << 7) | (OCFB << 6) | (FHECB << 5) | (IZB << 4) |
                   (FECFB << 3) | (DESC_IE << 2) | (WR << 1) | (DESC_EN);
  volatile int *memorytx;
  memorytx = (int *)descmemorybase;
  int i;
  for (i = 0; i < 4; i++) {
    if (i == 3) {
      WR = 1;
      DESCRIPTOR = (UE << 15) | (TS << 14) | (VCE << 9) | (MCB << 8) |
                   (FSHB << 7) | (OCFB << 6) | (FHECB << 5) | (IZB << 4) |
                   (FECFB << 3) | (DESC_IE << 2) | (WR << 1) | (DESC_EN);
      *memorytx = DESCRIPTOR;
    } else
      *memorytx = DESCRIPTOR;
    memorytx++;
    *memorytx = framememorybase + i * buffersize;
    memorytx++;
  };
  int VCFrameCntr = 0;
  int MCFrameCntr = 0;
  long int SequenceCount = 0;
  memorytx = (int *)framememorybase;
  TMTF(SCID, 6, OCF, MCFrameCntr, VCFrameCntr, 0, 0, 0, 3, 0, 0xBAADCAAD, 1,
       SequenceCount, rsdepth * (223 + 16 * reed8), (char *)memorytx);
  MCFrameCntr++;
  VCFrameCntr++;
  SequenceCount++;
  memorytx = (int *)(framememorybase + buffersize);
  TMTF(SCID, 6, OCF, MCFrameCntr, VCFrameCntr, 0, 0, 0, 3, 0, 0xBAADCAAD, 1,
       SequenceCount, rsdepth * (223 + 16 * reed8), (char *)memorytx);
  MCFrameCntr++;
  VCFrameCntr++;
  SequenceCount++;
  memorytx = (int *)(framememorybase + buffersize * 2);
  TMTF(SCID, 6, OCF, MCFrameCntr, VCFrameCntr, 0, 0, 0, 3, 0, 0xBAADCAAD, 1,
       SequenceCount, rsdepth * (223 + 16 * reed8), (char *)memorytx);
  MCFrameCntr++;
  VCFrameCntr++;
  SequenceCount++;
  memorytx = (int *)(framememorybase + buffersize * 3);
  TMTF(SCID, 6, OCF, MCFrameCntr, VCFrameCntr, 0, 0, 0, 3, 0, 0xBAADCAAD, 1,
       SequenceCount, rsdepth * (223 + 16 * reed8), (char *)memorytx);
  MCFrameCntr++;
  VCFrameCntr++;
  SequenceCount++;
  report_subtest(0x3);
  EN = 1;
  ldma->ctrl = (TFIE << 4) | (RST << 3) | (TXRST << 2) | (IE << 1) | (EN);
  while ((ldma->ctrl & 0x1) != 0x0)
    ;
  report_subtest(0x4);
  while ((ldma->stat & 0x20) != 0x20)
    ;
  report_subtest(0x5);
  int TFO = 0;
  int TFS = 1;
  int TFF = 1;
  int TA = 1;
  int TI = 1;
  int TERROR = 1;
  ldma->stat =
      (TFO << 5) | (TFS << 4) | (TFF << 3) | (TA << 2) | (TI << 1) | (TERROR);
  while ((ldma->stat & 0x10) != 0x10)
    ;
  report_subtest(0x6);
  TFO = 0;
  TFS = 1;
  TFF = 1;
  TA = 1;
  TI = 1;
  TERROR = 1;
  ldma->stat =
      (TFO << 5) | (TFS << 4) | (TFF << 3) | (TA << 2) | (TI << 1) | (TERROR);
  while ((ldma->stat & 0x10) != 0x10)
    ;
  report_subtest(subtst);
  report_subtest(0x7);
}


x86 assembly (clang, -O0):
<grtm_test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1a0,%rsp
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
mov    $0x1030000,%edi
mov    $0x0,%al
call   1030 <report_device@plt>
movslq -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%eax
add    $0x80,%eax
cltq
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
shl    $0xf,%eax
mov    -0x1c(%rbp),%ecx
shl    $0xe,%ecx
or     %ecx,%eax
mov    0x10(%rbp),%ecx
shl    $0xd,%ecx
or     %ecx,%eax
mov    0x18(%rbp),%ecx
shl    $0xc,%ecx
or     %ecx,%eax
mov    0x28(%rbp),%ecx
shl    $0xb,%ecx
or     %ecx,%eax
mov    0x20(%rbp),%ecx
shl    $0xa,%ecx
or     %ecx,%eax
mov    0x30(%rbp),%ecx
shl    $0x9,%ecx
or     %ecx,%eax
mov    0x38(%rbp),%ecx
shl    $0x8,%ecx
or     %ecx,%eax
cltq
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rdi
mov    $0x0,%al
call   1040 <report_subtest@plt>
mov    -0x28(%rbp),%rax
mov    0x28(%rax),%rax
and    $0xff,%rax
cmp    $0x3,%rax
jae    1209 <grtm_test+0xc9>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
movl   $0x0,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
movl   $0x1,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x4,%eax
mov    -0x40(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x44(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x48(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x4c(%rbp),%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x4,%eax
mov    -0x40(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x44(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x48(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x4c(%rbp),%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x40,-0x50(%rbp)
mov    -0x18(%rbp),%eax
mov    0x10(%rbp),%ecx
shl    $0x4,%ecx
add    $0xdf,%ecx
imul   %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x50(%rbp),%eax
sub    $0x1,%eax
shl    $0x10,%eax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
or     %ecx,%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,0x10(%rax)
movl   $0x1,-0x58(%rbp)
movl   $0x1,-0x5c(%rbp)
movl   $0x0,-0x60(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x58(%rbp),%eax
shl    $0x1f,%eax
mov    -0x5c(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    -0x60(%rbp),%ecx
shl    $0xf,%ecx
or     %ecx,%eax
or     -0x64(%rbp),%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x20(%rax)
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x6c(%rbp)
movl   $0x0,-0x70(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x78(%rbp)
mov    0x10(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    0x18(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    0x28(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    0x20(%rbp),%eax
mov    %eax,-0x88(%rbp)
movl   $0x0,-0x8c(%rbp)
mov    0x30(%rbp),%eax
mov    %eax,-0x90(%rbp)
mov    0x38(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x68(%rbp),%eax
shl    $0x13,%eax
mov    -0x6c(%rbp),%ecx
shl    $0x11,%ecx
or     %ecx,%eax
mov    -0x70(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    -0x74(%rbp),%ecx
shl    $0xf,%ecx
or     %ecx,%eax
mov    -0x78(%rbp),%ecx
shl    $0xc,%ecx
or     %ecx,%eax
mov    -0x7c(%rbp),%ecx
shl    $0xb,%ecx
or     %ecx,%eax
mov    -0x80(%rbp),%ecx
shl    $0x7,%ecx
or     %ecx,%eax
mov    -0x84(%rbp),%ecx
shl    $0x6,%ecx
or     %ecx,%eax
mov    -0x88(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
mov    -0x8c(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x90(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x94(%rbp),%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x28(%rax)
movq   $0x352ef853,-0xa0(%rbp)
53 f8 2e 35
mov    -0xa0(%rbp),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x30(%rax)
movl   $0x0,-0xa4(%rbp)
movl   $0x0,-0xa8(%rbp)
movl   $0x1,-0xac(%rbp)
movl   $0x0,-0xb0(%rbp)
movl   $0x0,-0xb4(%rbp)
mov    -0xa4(%rbp),%eax
shl    $0x11,%eax
mov    -0xa8(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    -0xac(%rbp),%ecx
shl    $0xf,%ecx
or     %ecx,%eax
mov    -0xb0(%rbp),%ecx
shl    $0xe,%ecx
or     %ecx,%eax
mov    -0xb4(%rbp),%ecx
shl    $0xc,%ecx
or     %ecx,%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x40(%rax)
movl   $0x1,-0xb8(%rbp)
movl   $0x0,-0xbc(%rbp)
movl   $0x1,-0xc0(%rbp)
movl   $0x1,-0xc4(%rbp)
mov    -0xb8(%rbp),%eax
shl    $0x3,%eax
mov    -0xbc(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0xc0(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0xc4(%rbp),%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x48(%rax)
movl   $0x1,-0xc8(%rbp)
movl   $0x1,-0xcc(%rbp)
movl   $0x0,-0xd0(%rbp)
movl   $0x0,-0xd4(%rbp)
movl   $0x0,-0xd8(%rbp)
movl   $0x0,-0xdc(%rbp)
movl   $0x7,-0xe0(%rbp)
movl   $0x123,-0xe4(%rbp)
mov    -0xc8(%rbp),%eax
shl    $0x15,%eax
mov    -0xcc(%rbp),%ecx
shl    $0x14,%ecx
or     %ecx,%eax
mov    -0xd0(%rbp),%ecx
shl    $0x13,%ecx
or     %ecx,%eax
mov    -0xd4(%rbp),%ecx
shl    $0x12,%ecx
or     %ecx,%eax
mov    -0xd8(%rbp),%ecx
shl    $0x11,%ecx
or     %ecx,%eax
mov    -0xdc(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    -0xe0(%rbp),%ecx
shl    $0xa,%ecx
or     %ecx,%eax
or     -0xe4(%rbp),%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x50(%rax)
mov    $0xfeedbacc,%eax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0xa0(%rax)
movl   $0x1,-0xf4(%rbp)
movslq -0xf4(%rbp),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%rax
and    $0x40,%rax
cmp    $0x40,%rax
je     15c1 <grtm_test+0x481>
jmp    15a6 <grtm_test+0x466>
movl   $0x0,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
movl   $0x1,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x4,%eax
mov    -0x40(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x44(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x48(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x4c(%rbp),%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x4,%eax
mov    -0x40(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x44(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x48(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x4c(%rbp),%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x40,-0x50(%rbp)
mov    -0x18(%rbp),%eax
mov    0x10(%rbp),%ecx
shl    $0x4,%ecx
add    $0xdf,%ecx
imul   %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x50(%rbp),%eax
sub    $0x1,%eax
shl    $0x10,%eax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
or     %ecx,%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,0x10(%rax)
movl   $0x1,-0x58(%rbp)
movl   $0x1,-0x5c(%rbp)
movl   $0x0,-0x60(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x58(%rbp),%eax
shl    $0x1f,%eax
mov    -0x5c(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    -0x60(%rbp),%ecx
shl    $0xf,%ecx
or     %ecx,%eax
or     -0x64(%rbp),%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x20(%rax)
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x6c(%rbp)
movl   $0x0,-0x70(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x78(%rbp)
mov    0x10(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    0x18(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    0x28(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    0x20(%rbp),%eax
mov    %eax,-0x88(%rbp)
movl   $0x0,-0x8c(%rbp)
mov    0x30(%rbp),%eax
mov    %eax,-0x90(%rbp)
mov    0x38(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x68(%rbp),%eax
shl    $0x13,%eax
mov    -0x6c(%rbp),%ecx
shl    $0x11,%ecx
or     %ecx,%eax
mov    -0x70(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    -0x74(%rbp),%ecx
shl    $0xf,%ecx
or     %ecx,%eax
mov    -0x78(%rbp),%ecx
shl    $0xc,%ecx
or     %ecx,%eax
mov    -0x7c(%rbp),%ecx
shl    $0xb,%ecx
or     %ecx,%eax
mov    -0x80(%rbp),%ecx
shl    $0x7,%ecx
or     %ecx,%eax
mov    -0x84(%rbp),%ecx
shl    $0x6,%ecx
or     %ecx,%eax
mov    -0x88(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
mov    -0x8c(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x90(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x94(%rbp),%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x28(%rax)
movq   $0x352ef853,-0xa0(%rbp)
53 f8 2e 35
mov    -0xa0(%rbp),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x30(%rax)
movl   $0x0,-0xa4(%rbp)
movl   $0x0,-0xa8(%rbp)
movl   $0x1,-0xac(%rbp)
movl   $0x0,-0xb0(%rbp)
movl   $0x0,-0xb4(%rbp)
mov    -0xa4(%rbp),%eax
shl    $0x11,%eax
mov    -0xa8(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    -0xac(%rbp),%ecx
shl    $0xf,%ecx
or     %ecx,%eax
mov    -0xb0(%rbp),%ecx
shl    $0xe,%ecx
or     %ecx,%eax
mov    -0xb4(%rbp),%ecx
shl    $0xc,%ecx
or     %ecx,%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x40(%rax)
movl   $0x1,-0xb8(%rbp)
movl   $0x0,-0xbc(%rbp)
movl   $0x1,-0xc0(%rbp)
movl   $0x1,-0xc4(%rbp)
mov    -0xb8(%rbp),%eax
shl    $0x3,%eax
mov    -0xbc(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0xc0(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0xc4(%rbp),%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x48(%rax)
movl   $0x1,-0xc8(%rbp)
movl   $0x1,-0xcc(%rbp)
movl   $0x0,-0xd0(%rbp)
movl   $0x0,-0xd4(%rbp)
movl   $0x0,-0xd8(%rbp)
movl   $0x0,-0xdc(%rbp)
movl   $0x7,-0xe0(%rbp)
movl   $0x123,-0xe4(%rbp)
mov    -0xc8(%rbp),%eax
shl    $0x15,%eax
mov    -0xcc(%rbp),%ecx
shl    $0x14,%ecx
or     %ecx,%eax
mov    -0xd0(%rbp),%ecx
shl    $0x13,%ecx
or     %ecx,%eax
mov    -0xd4(%rbp),%ecx
shl    $0x12,%ecx
or     %ecx,%eax
mov    -0xd8(%rbp),%ecx
shl    $0x11,%ecx
or     %ecx,%eax
mov    -0xdc(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
mov    -0xe0(%rbp),%ecx
shl    $0xa,%ecx
or     %ecx,%eax
or     -0xe4(%rbp),%eax
movslq %eax,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x50(%rax)
mov    $0xfeedbacc,%eax
mov    %rax,-0xf0(%rbp)
mov    -0xf0(%rbp),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0xa0(%rax)
mov    $0x1,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
movl   $0x1,-0xf4(%rbp)
movslq -0xf4(%rbp),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%rax
and    $0x40,%rax
cmp    $0x40,%rax
je     1985 <grtm_test+0x845>
jmp    196a <grtm_test+0x82a>
mov    -0xc(%rbp),%eax
mov    %eax,%ecx
add    $0x3,%ecx
test   %eax,%eax
cmovs  %ecx,%eax
sar    $0x2,%eax
mov    %eax,%ecx
mov    %rsp,%rax
mov    %rax,-0x100(%rbp)
lea    0xf(,%rcx,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rax
sub    %rdx,%rax
mov    %rax,%rsp
mov    %rcx,-0x108(%rbp)
mov    %rax,-0x110(%rbp)
mov    -0x110(%rbp),%rax
and    $0xfffffc00,%eax
mov    %rax,-0x110(%rbp)
mov    -0x110(%rbp),%rax
add    $0x400,%rax
mov    %rax,-0x110(%rbp)
mov    -0x10(%rbp),%eax
mov    -0x14(%rbp),%ecx
imul   %ecx,%eax
mov    %eax,%ecx
add    $0x3,%ecx
test   %eax,%eax
cmovs  %ecx,%eax
sar    $0x2,%eax
mov    %eax,%ecx
lea    0xf(,%rcx,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rax
sub    %rdx,%rax
mov    %rax,%rsp
mov    %rcx,-0x118(%rbp)
mov    %rax,-0x120(%rbp)
movabs $0xfffffc00,%rax
and    -0x120(%rbp),%rax
mov    %rax,-0x120(%rbp)
mov    -0x120(%rbp),%rax
add    $0x400,%rax
mov    %rax,-0x120(%rbp)
mov    -0x110(%rbp),%rax
sar    $0xa,%rax
mov    %eax,-0x124(%rbp)
movl   $0x0,-0x128(%rbp)
mov    -0x124(%rbp),%eax
shl    $0xa,%eax
mov    -0x128(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,0x18(%rax)
mov    $0x2,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
movl   $0x0,-0x12c(%rbp)
movl   $0x0,-0x130(%rbp)
movl   $0x0,-0x134(%rbp)
movl   $0x0,-0x138(%rbp)
movl   $0x0,-0x13c(%rbp)
movl   $0x0,-0x140(%rbp)
movl   $0x0,-0x144(%rbp)
movl   $0x0,-0x148(%rbp)
movl   $0x0,-0x14c(%rbp)
movl   $0x0,-0x150(%rbp)
movl   $0x0,-0x154(%rbp)
movl   $0x1,-0x158(%rbp)
mov    -0x12c(%rbp),%eax
shl    $0xf,%eax
mov    -0x130(%rbp),%ecx
shl    $0xe,%ecx
or     %ecx,%eax
mov    -0x134(%rbp),%ecx
shl    $0x9,%ecx
or     %ecx,%eax
mov    -0x138(%rbp),%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    -0x13c(%rbp),%ecx
shl    $0x7,%ecx
or     %ecx,%eax
mov    -0x140(%rbp),%ecx
shl    $0x6,%ecx
or     %ecx,%eax
mov    -0x144(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
mov    -0x148(%rbp),%ecx
shl    $0x4,%ecx
or     %ecx,%eax
mov    -0x14c(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x150(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x154(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x158(%rbp),%eax
mov    %eax,-0x15c(%rbp)
mov    -0x110(%rbp),%rax
mov    %rax,-0x168(%rbp)
movl   $0x0,-0x16c(%rbp)
cmpl   $0x4,-0x16c(%rbp)
jge    1ccf <grtm_test+0xb8f>
cmpl   $0x3,-0x16c(%rbp)
jne    1c66 <grtm_test+0xb26>
movl   $0x1,-0x154(%rbp)
mov    -0x12c(%rbp),%eax
shl    $0xf,%eax
mov    -0x130(%rbp),%ecx
shl    $0xe,%ecx
or     %ecx,%eax
mov    -0x134(%rbp),%ecx
shl    $0x9,%ecx
or     %ecx,%eax
mov    -0x138(%rbp),%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    -0x13c(%rbp),%ecx
shl    $0x7,%ecx
or     %ecx,%eax
mov    -0x140(%rbp),%ecx
shl    $0x6,%ecx
or     %ecx,%eax
mov    -0x144(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
mov    -0x148(%rbp),%ecx
shl    $0x4,%ecx
or     %ecx,%eax
mov    -0x14c(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x150(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x154(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x158(%rbp),%eax
mov    %eax,-0x15c(%rbp)
mov    -0x15c(%rbp),%ecx
mov    -0x168(%rbp),%rax
mov    %ecx,(%rax)
jmp    1c75 <grtm_test+0xb35>
mov    -0x15c(%rbp),%ecx
mov    -0x168(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x168(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x168(%rbp)
mov    -0x120(%rbp),%rax
mov    -0x16c(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %eax,%ecx
mov    -0x168(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x168(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x168(%rbp)
mov    -0x16c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x16c(%rbp)
jmp    1bab <grtm_test+0xa6b>
movl   $0x0,-0x170(%rbp)
movl   $0x0,-0x174(%rbp)
movq   $0x0,-0x180(%rbp)
mov    -0x120(%rbp),%rax
mov    %rax,-0x168(%rbp)
mov    -0xe4(%rbp),%edi
mov    -0xc0(%rbp),%edx
mov    -0x174(%rbp),%ecx
mov    -0x170(%rbp),%r8d
mov    -0x180(%rbp),%r11
mov    -0x18(%rbp),%r10d
mov    0x10(%rbp),%eax
shl    $0x4,%eax
add    $0xdf,%eax
imul   %eax,%r10d
mov    -0x168(%rbp),%rax
mov    $0x6,%esi
xor    %r9d,%r9d
sub    $0x50,%rsp
movl   $0x0,(%rsp)
movl   $0x0,0x8(%rsp)
movl   $0x3,0x10(%rsp)
movl   $0x0,0x18(%rsp)
movl   $0xbaadcaad,0x20(%rsp)
ba
movl   $0x1,0x28(%rsp)
mov    %r11,0x30(%rsp)
mov    %r10d,0x38(%rsp)
mov    %rax,0x40(%rsp)
mov    $0x0,%al
call   1060 <TMTF@plt>
add    $0x50,%rsp
mov    -0x174(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x174(%rbp)
mov    -0x170(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x170(%rbp)
mov    -0x180(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x180(%rbp)
mov    -0x120(%rbp),%rax
movslq -0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x168(%rbp)
mov    -0xe4(%rbp),%edi
mov    -0xc0(%rbp),%edx
mov    -0x174(%rbp),%ecx
mov    -0x170(%rbp),%r8d
mov    -0x180(%rbp),%r11
mov    -0x18(%rbp),%r10d
mov    0x10(%rbp),%eax
shl    $0x4,%eax
add    $0xdf,%eax
imul   %eax,%r10d
mov    -0x168(%rbp),%rax
mov    $0x6,%esi
xor    %r9d,%r9d
sub    $0x50,%rsp
movl   $0x0,(%rsp)
movl   $0x0,0x8(%rsp)
movl   $0x3,0x10(%rsp)
movl   $0x0,0x18(%rsp)
movl   $0xbaadcaad,0x20(%rsp)
ba
movl   $0x1,0x28(%rsp)
mov    %r11,0x30(%rsp)
mov    %r10d,0x38(%rsp)
mov    %rax,0x40(%rsp)
mov    $0x0,%al
call   1060 <TMTF@plt>
add    $0x50,%rsp
mov    -0x174(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x174(%rbp)
mov    -0x170(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x170(%rbp)
mov    -0x180(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x180(%rbp)
mov    -0x120(%rbp),%rax
mov    -0x10(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x168(%rbp)
mov    -0xe4(%rbp),%edi
mov    -0xc0(%rbp),%edx
mov    -0x174(%rbp),%ecx
mov    -0x170(%rbp),%r8d
mov    -0x180(%rbp),%r11
mov    -0x18(%rbp),%r10d
mov    0x10(%rbp),%eax
shl    $0x4,%eax
add    $0xdf,%eax
imul   %eax,%r10d
mov    -0x168(%rbp),%rax
mov    $0x6,%esi
xor    %r9d,%r9d
sub    $0x50,%rsp
movl   $0x0,(%rsp)
movl   $0x0,0x8(%rsp)
movl   $0x3,0x10(%rsp)
movl   $0x0,0x18(%rsp)
movl   $0xbaadcaad,0x20(%rsp)
ba
movl   $0x1,0x28(%rsp)
mov    %r11,0x30(%rsp)
mov    %r10d,0x38(%rsp)
mov    %rax,0x40(%rsp)
mov    $0x0,%al
call   1060 <TMTF@plt>
add    $0x50,%rsp
mov    -0x174(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x174(%rbp)
mov    -0x170(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x170(%rbp)
mov    -0x180(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x180(%rbp)
mov    -0x120(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x168(%rbp)
mov    -0xe4(%rbp),%edi
mov    -0xc0(%rbp),%edx
mov    -0x174(%rbp),%ecx
mov    -0x170(%rbp),%r8d
mov    -0x180(%rbp),%r11
mov    -0x18(%rbp),%r10d
mov    0x10(%rbp),%eax
shl    $0x4,%eax
add    $0xdf,%eax
imul   %eax,%r10d
mov    -0x168(%rbp),%rax
mov    $0x6,%esi
xor    %r9d,%r9d
sub    $0x50,%rsp
movl   $0x0,(%rsp)
movl   $0x0,0x8(%rsp)
movl   $0x3,0x10(%rsp)
movl   $0x0,0x18(%rsp)
movl   $0xbaadcaad,0x20(%rsp)
ba
movl   $0x1,0x28(%rsp)
mov    %r11,0x30(%rsp)
mov    %r10d,0x38(%rsp)
mov    %rax,0x40(%rsp)
mov    $0x0,%al
call   1060 <TMTF@plt>
add    $0x50,%rsp
mov    -0x174(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x174(%rbp)
mov    -0x170(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x170(%rbp)
mov    -0x180(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x180(%rbp)
mov    $0x3,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
movl   $0x1,-0x4c(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x4,%eax
mov    -0x40(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x44(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x48(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x4c(%rbp),%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
mov    (%rax),%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     2097 <grtm_test+0xf57>
jmp    207d <grtm_test+0xf3d>
mov    $0x4,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%rax
and    $0x20,%rax
cmp    $0x20,%rax
je     20be <grtm_test+0xf7e>
jmp    20a3 <grtm_test+0xf63>
mov    $0x5,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
movl   $0x0,-0x184(%rbp)
movl   $0x1,-0x188(%rbp)
movl   $0x1,-0x18c(%rbp)
movl   $0x1,-0x190(%rbp)
movl   $0x1,-0x194(%rbp)
movl   $0x1,-0x198(%rbp)
mov    -0x184(%rbp),%eax
shl    $0x5,%eax
mov    -0x188(%rbp),%ecx
shl    $0x4,%ecx
or     %ecx,%eax
mov    -0x18c(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x190(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x194(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x198(%rbp),%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,0x8(%rax)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%rax
and    $0x10,%rax
cmp    $0x10,%rax
je     2167 <grtm_test+0x1027>
jmp    214c <grtm_test+0x100c>
mov    $0x6,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
movl   $0x0,-0x184(%rbp)
movl   $0x1,-0x188(%rbp)
movl   $0x1,-0x18c(%rbp)
movl   $0x1,-0x190(%rbp)
movl   $0x1,-0x194(%rbp)
movl   $0x1,-0x198(%rbp)
mov    -0x184(%rbp),%eax
shl    $0x5,%eax
mov    -0x188(%rbp),%ecx
shl    $0x4,%ecx
or     %ecx,%eax
mov    -0x18c(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x190(%rbp),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x194(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x198(%rbp),%eax
movslq %eax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,0x8(%rax)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%rax
and    $0x10,%rax
cmp    $0x10,%rax
je     2210 <grtm_test+0x10d0>
jmp    21f5 <grtm_test+0x10b5>
mov    -0x38(%rbp),%rdi
mov    $0x0,%al
call   1040 <report_subtest@plt>
mov    $0x7,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
mov    -0x100(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<grtm_test>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r9d,-0x30(%rbp)
mov    %r8d,%ebx
mov    %rcx,-0x38(%rbp)
mov    %rdx,-0x58(%rbp)
mov    %rsi,-0x50(%rbp)
mov    %edi,-0x48(%rbp)
mov    0x30(%rbp),%r14d
mov    0x20(%rbp),%r13d
mov    0x10(%rbp),%r15d
mov    $0x1030000,%edi
xor    %eax,%eax
call   1030 <report_device@plt>
mov    %rbx,-0x40(%rbp)
lea    -0x1(%rbx),%r12d
mov    %r12d,%eax
shl    $0xf,%eax
mov    -0x30(%rbp),%ecx
shl    $0xe,%ecx
or     %eax,%ecx
mov    %r15d,%eax
shl    $0xd,%eax
or     %ecx,%eax
mov    0x18(%rbp),%ecx
shl    $0xc,%ecx
mov    %r13d,%edx
shl    $0xa,%edx
or     %ecx,%edx
mov    0x28(%rbp),%ecx
shl    $0xb,%ecx
or     %eax,%edx
mov    %r14d,%eax
shl    $0x9,%eax
or     %ecx,%eax
mov    0x38(%rbp),%ecx
shl    $0x8,%ecx
or     %eax,%ecx
or     %edx,%ecx
movslq -0x48(%rbp),%rbx
movslq %ecx,%rdi
mov    %rdi,-0x48(%rbp)
xor    %eax,%eax
call   1040 <report_subtest@plt>
mov    0x28(%rbx),%rax
movzbl %al,%eax
cmp    $0x2,%eax
ja     11ef <grtm_test+0xaf>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    $0xfeedbacc,%eax
movq   $0xc,(%rbx)
movq   $0x0,(%rbx)
mov    %r15d,%ecx
shl    $0x4,%ecx
add    $0xdf,%ecx
imul   -0x40(%rbp),%ecx
mov    %rcx,-0x40(%rbp)
add    $0xffffffff,%ecx
or     $0x3f0000,%ecx
movslq %ecx,%rcx
mov    %rcx,0x10(%rbx)
movq   $0xffffffff80010001,0xa0(%rbx)
mov    -0x30(%rbp),%edx
shl    $0xf,%edx
shl    $0xc,%r12d
or     %edx,%r12d
shl    $0xb,%r15d
or     %r12d,%r15d
mov    0x18(%rbp),%esi
shl    $0x7,%esi
mov    0x28(%rbp),%edx
shl    $0x6,%edx
shl    $0x5,%r13d
or     %esi,%r13d
or     %r15d,%r13d
add    %r14d,%r14d
or     %edx,%r14d
or     %r13d,%r14d
or     0x38(%rbp),%r14d
movslq %r14d,%rdx
mov    %rdx,0xa8(%rbx)
movq   $0x352ef853,0xb0(%rbx)
53 f8 2e 35
movq   $0x8000,0xc0(%rbx)
movq   $0xb,0xc8(%rbx)
movq   $0x301d23,0xd0(%rbx)
mov    %rax,0x120(%rbx)
movq   $0x1,0x80(%rbx)
testq  $0x40,0x8(%rbx)
je     12b0 <grtm_test+0x170>
movq   $0xc,(%rbx)
movq   $0x0,(%rbx)
mov    %rcx,0x10(%rbx)
movq   $0xffffffff80010001,0xa0(%rbx)
mov    %rdx,0xa8(%rbx)
movq   $0x352ef853,0xb0(%rbx)
53 f8 2e 35
movq   $0x8000,0xc0(%rbx)
movq   $0xb,0xc8(%rbx)
movq   $0x301d23,0xd0(%rbx)
mov    %rax,0x120(%rbx)
mov    $0x1,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
movq   $0x1,0x80(%rbx)
nopl   0x0(%rax,%rax,1)
testq  $0x40,0x8(%rbx)
je     1330 <grtm_test+0x1f0>
mov    -0x50(%rbp),%rcx
lea    0x3(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
sar    $0x2,%eax
lea    0xf(,%rax,8),%rax
and    $0xfffffffffffffff0,%rax
mov    %rsp,%r12
sub    %rax,%r12
mov    %r12,%rsp
and    $0xfffffc00,%r12d
mov    -0x58(%rbp),%r15
mov    -0x38(%rbp),%rcx
imul   %r15d,%ecx
lea    0x3(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
lea    0x400(%r12),%rcx
sar    $0x2,%eax
lea    0xf(,%rax,8),%rax
and    $0xfffffffffffffff0,%rax
mov    %rsp,%r14
sub    %rax,%r14
mov    %r14,%rsp
and    $0xfffffc00,%r14d
lea    0x400(%r14),%r13
movslq %ecx,%rax
mov    %rax,0x18(%rbx)
mov    $0x2,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
movl   $0x1,0x400(%r12)
mov    %r13d,0x404(%r12)
movl   $0x1,0x408(%r12)
lea    (%r15,%r13,1),%eax
mov    %eax,0x40c(%r12)
movl   $0x1,0x410(%r12)
lea    (%r15,%r15,1),%eax
mov    %eax,-0x38(%rbp)
lea    0x0(%r13,%r15,2),%eax
mov    %eax,0x414(%r12)
movl   $0x3,0x418(%r12)
lea    (%r15,%r15,2),%eax
mov    %rax,-0x30(%rbp)
add    %r13d,%eax
mov    %eax,0x41c(%r12)
sub    $0x8,%rsp
mov    $0x123,%edi
mov    $0x6,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
xor    %r8d,%r8d
xor    %r9d,%r9d
xor    %eax,%eax
push   %r13
mov    -0x40(%rbp),%r12
push   %r12
push   $0x0
push   $0x1
push   $0xffffffffbaadcaad
push   $0x0
push   $0x3
push   $0x0
push   $0x0
call   1060 <TMTF@plt>
add    $0x50,%rsp
movslq %r15d,%rax
lea    (%r14,%rax,1),%r10
add    $0x400,%r10
sub    $0x8,%rsp
mov    $0x123,%edi
mov    $0x6,%esi
mov    $0x1,%edx
mov    $0x1,%ecx
mov    $0x1,%r8d
xor    %r9d,%r9d
xor    %eax,%eax
push   %r10
push   %r12
push   $0x1
push   $0x1
push   $0xffffffffbaadcaad
push   $0x0
push   $0x3
push   $0x0
push   $0x0
call   1060 <TMTF@plt>
add    $0x50,%rsp
movslq -0x38(%rbp),%rax
lea    (%r14,%rax,1),%r10
add    $0x400,%r10
sub    $0x8,%rsp
mov    $0x123,%edi
mov    $0x6,%esi
mov    $0x1,%edx
mov    $0x2,%ecx
mov    $0x2,%r8d
xor    %r9d,%r9d
xor    %eax,%eax
push   %r10
push   %r12
push   $0x2
push   $0x1
push   $0xffffffffbaadcaad
push   $0x0
push   $0x3
push   $0x0
push   $0x0
call   1060 <TMTF@plt>
add    $0x50,%rsp
movslq -0x30(%rbp),%rax
lea    (%r14,%rax,1),%r10
add    $0x400,%r10
sub    $0x8,%rsp
mov    $0x123,%edi
mov    $0x6,%esi
mov    $0x1,%edx
mov    $0x3,%ecx
mov    $0x3,%r8d
xor    %r9d,%r9d
xor    %eax,%eax
push   %r10
push   %r12
push   $0x3
push   $0x1
push   $0xffffffffbaadcaad
push   $0x0
push   $0x3
push   $0x0
push   $0x0
call   1060 <TMTF@plt>
add    $0x50,%rsp
mov    $0x3,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
movq   $0x1,(%rbx)
cs nopw 0x0(%rax,%rax,1)
mov    (%rbx),%rax
test   $0x1,%al
jne    1570 <grtm_test+0x430>
mov    $0x4,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
testq  $0x20,0x8(%rbx)
je     1590 <grtm_test+0x450>
mov    $0x5,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
movq   $0x1f,0x8(%rbx)
xchg   %ax,%ax
testq  $0x10,0x8(%rbx)
je     15b0 <grtm_test+0x470>
mov    $0x6,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
movq   $0x1f,0x8(%rbx)
xchg   %ax,%ax
testq  $0x10,0x8(%rbx)
je     15d0 <grtm_test+0x490>
mov    -0x48(%rbp),%rdi
xor    %eax,%eax
call   1040 <report_subtest@plt>
mov    $0x7,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.grtm_dma = type { i64, i64, i64, i64, i64, i64 }
%struct.grtm_tx = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 }
define i32 @grtm_test(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11) {
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca %struct.grtm_dma*
%27 = alloca %struct.grtm_tx*
%28 = alloca i64
%29 = alloca i32
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca i32
%42 = alloca i32
%43 = alloca i32
%44 = alloca i32
%45 = alloca i32
%46 = alloca i32
%47 = alloca i32
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
%51 = alloca i32
%52 = alloca i64
%53 = alloca i32
%54 = alloca i32
%55 = alloca i32
%56 = alloca i32
%57 = alloca i32
%58 = alloca i32
%59 = alloca i32
%60 = alloca i32
%61 = alloca i32
%62 = alloca i32
%63 = alloca i32
%64 = alloca i32
%65 = alloca i32
%66 = alloca i32
%67 = alloca i32
%68 = alloca i32
%69 = alloca i32
%70 = alloca i64
%71 = alloca i32
%72 = alloca i8*
%73 = alloca i64
%74 = alloca i64
%75 = alloca i64
%76 = alloca i64
%77 = alloca i32
%78 = alloca i32
%79 = alloca i32
%80 = alloca i32
%81 = alloca i32
%82 = alloca i32
%83 = alloca i32
%84 = alloca i32
%85 = alloca i32
%86 = alloca i32
%87 = alloca i32
%88 = alloca i32
%89 = alloca i32
%90 = alloca i32
%91 = alloca i32
%92 = alloca i32*
%93 = alloca i32
%94 = alloca i32
%95 = alloca i32
%96 = alloca i64
%97 = alloca i32
%98 = alloca i32
%99 = alloca i32
%100 = alloca i32
%101 = alloca i32
%102 = alloca i32
store i32 %0, i32* %14
store i32 %1, i32* %15
store i32 %2, i32* %16
store i32 %3, i32* %17
store i32 %4, i32* %18
store i32 %5, i32* %19
store i32 %6, i32* %20
store i32 %7, i32* %21
store i32 %8, i32* %22
store i32 %9, i32* %23
store i32 %10, i32* %24
store i32 %11, i32* %25
%103 = call i32 (i32, ...) bitcast (i32 (...)* @report_device to i32 (i32, ...)*)(i32 16973824)
%104 = load i32, i32* %14
%105 = sext i32 %104 to i64
%106 = inttoptr i64 %105 to %struct.grtm_dma*
store %struct.grtm_dma* %106, %struct.grtm_dma** %26
%107 = load i32, i32* %14
%108 = add nsw i32 %107, 128
%109 = sext i32 %108 to i64
%110 = inttoptr i64 %109 to %struct.grtm_tx*
store %struct.grtm_tx* %110, %struct.grtm_tx** %27
%111 = load i32, i32* %18
%112 = sub nsw i32 %111, 1
%113 = shl i32 %112, 15
%114 = load i32, i32* %19
%115 = shl i32 %114, 14
%116 = or i32 %113, %115
%117 = load i32, i32* %20
%118 = shl i32 %117, 13
%119 = or i32 %116, %118
%120 = load i32, i32* %21
%121 = shl i32 %120, 12
%122 = or i32 %119, %121
%123 = load i32, i32* %23
%124 = shl i32 %123, 11
%125 = or i32 %122, %124
%126 = load i32, i32* %22
%127 = shl i32 %126, 10
%128 = or i32 %125, %127
%129 = load i32, i32* %24
%130 = shl i32 %129, 9
%131 = or i32 %128, %130
%132 = load i32, i32* %25
%133 = shl i32 %132, 8
%134 = or i32 %131, %133
%135 = sext i32 %134 to i64
store i64 %135, i64* %28
%136 = load i64, i64* %28
%137 = call i32 (i64, ...) bitcast (i32 (...)* @report_subtest to i32 (i64, ...)*)(i64 %136)
%138 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%139 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %138, i32 0, i32 5
%140 = load volatile i64, i64* %139
%141 = and i64 %140, 255
%142 = icmp ult i64 %141, 3
br i1 %142, label %143, label %145
143: ; preds = %12
%144 = call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %145
145: ; preds = %143, %12
store i32 0, i32* %29
store i32 1, i32* %30
store i32 1, i32* %31
store i32 0, i32* %32
store i32 0, i32* %33
%146 = load i32, i32* %29
%147 = shl i32 %146, 4
%148 = load i32, i32* %30
%149 = shl i32 %148, 3
%150 = or i32 %147, %149
%151 = load i32, i32* %31
%152 = shl i32 %151, 2
%153 = or i32 %150, %152
%154 = load i32, i32* %32
%155 = shl i32 %154, 1
%156 = or i32 %153, %155
%157 = load i32, i32* %33
%158 = or i32 %156, %157
%159 = sext i32 %158 to i64
%160 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%161 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %160, i32 0, i32 0
store volatile i64 %159, i64* %161
store i32 0, i32* %30
store i32 0, i32* %31
store i32 0, i32* %33
%162 = load i32, i32* %29
%163 = shl i32 %162, 4
%164 = load i32, i32* %30
%165 = shl i32 %164, 3
%166 = or i32 %163, %165
%167 = load i32, i32* %31
%168 = shl i32 %167, 2
%169 = or i32 %166, %168
%170 = load i32, i32* %32
%171 = shl i32 %170, 1
%172 = or i32 %169, %171
%173 = load i32, i32* %33
%174 = or i32 %172, %173
%175 = sext i32 %174 to i64
%176 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%177 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %176, i32 0, i32 0
store volatile i64 %175, i64* %177
store i32 64, i32* %34
%178 = load i32, i32* %18
%179 = load i32, i32* %20
%180 = mul nsw i32 16, %179
%181 = add nsw i32 223, %180
%182 = mul nsw i32 %178, %181
store i32 %182, i32* %35
%183 = load i32, i32* %34
%184 = sub nsw i32 %183, 1
%185 = shl i32 %184, 16
%186 = load i32, i32* %35
%187 = sub nsw i32 %186, 1
%188 = or i32 %185, %187
%189 = sext i32 %188 to i64
%190 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%191 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %190, i32 0, i32 2
store volatile i64 %189, i64* %191
store i32 1, i32* %36
store i32 1, i32* %37
store i32 0, i32* %38
store i32 1, i32* %39
%192 = load i32, i32* %36
%193 = shl i32 %192, 31
%194 = load i32, i32* %37
%195 = shl i32 %194, 16
%196 = or i32 %193, %195
%197 = load i32, i32* %38
%198 = shl i32 %197, 15
%199 = or i32 %196, %198
%200 = load i32, i32* %39
%201 = or i32 %199, %200
%202 = sext i32 %201 to i64
%203 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%204 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %203, i32 0, i32 4
store volatile i64 %202, i64* %204
store i32 0, i32* %40
store i32 0, i32* %41
store i32 0, i32* %42
%205 = load i32, i32* %19
store i32 %205, i32* %43
%206 = load i32, i32* %18
%207 = sub nsw i32 %206, 1
store i32 %207, i32* %44
%208 = load i32, i32* %20
store i32 %208, i32* %45
%209 = load i32, i32* %21
store i32 %209, i32* %46
%210 = load i32, i32* %23
store i32 %210, i32* %47
%211 = load i32, i32* %22
store i32 %211, i32* %48
store i32 0, i32* %49
%212 = load i32, i32* %24
store i32 %212, i32* %50
%213 = load i32, i32* %25
store i32 %213, i32* %51
%214 = load i32, i32* %40
%215 = shl i32 %214, 19
%216 = load i32, i32* %41
%217 = shl i32 %216, 17
%218 = or i32 %215, %217
%219 = load i32, i32* %42
%220 = shl i32 %219, 16
%221 = or i32 %218, %220
%222 = load i32, i32* %43
%223 = shl i32 %222, 15
%224 = or i32 %221, %223
%225 = load i32, i32* %44
%226 = shl i32 %225, 12
%227 = or i32 %224, %226
%228 = load i32, i32* %45
%229 = shl i32 %228, 11
%230 = or i32 %227, %229
%231 = load i32, i32* %46
%232 = shl i32 %231, 7
%233 = or i32 %230, %232
%234 = load i32, i32* %47
%235 = shl i32 %234, 6
%236 = or i32 %233, %235
%237 = load i32, i32* %48
%238 = shl i32 %237, 5
%239 = or i32 %236, %238
%240 = load i32, i32* %49
%241 = shl i32 %240, 2
%242 = or i32 %239, %241
%243 = load i32, i32* %50
%244 = shl i32 %243, 1
%245 = or i32 %242, %244
%246 = load i32, i32* %51
%247 = or i32 %245, %246
%248 = sext i32 %247 to i64
%249 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%250 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %249, i32 0, i32 5
store volatile i64 %248, i64* %250
store i64 892270675, i64* %52
%251 = load i64, i64* %52
%252 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%253 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %252, i32 0, i32 6
store volatile i64 %251, i64* %253
store i32 0, i32* %53
store i32 0, i32* %54
store i32 1, i32* %55
store i32 0, i32* %56
store i32 0, i32* %57
%254 = load i32, i32* %53
%255 = shl i32 %254, 17
%256 = load i32, i32* %54
%257 = shl i32 %256, 16
%258 = or i32 %255, %257
%259 = load i32, i32* %55
%260 = shl i32 %259, 15
%261 = or i32 %258, %260
%262 = load i32, i32* %56
%263 = shl i32 %262, 14
%264 = or i32 %261, %263
%265 = load i32, i32* %57
%266 = shl i32 %265, 12
%267 = or i32 %264, %266
%268 = sext i32 %267 to i64
%269 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%270 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %269, i32 0, i32 8
store volatile i64 %268, i64* %270
store i32 1, i32* %58
store i32 0, i32* %59
store i32 1, i32* %60
store i32 1, i32* %61
%271 = load i32, i32* %58
%272 = shl i32 %271, 3
%273 = load i32, i32* %59
%274 = shl i32 %273, 2
%275 = or i32 %272, %274
%276 = load i32, i32* %60
%277 = shl i32 %276, 1
%278 = or i32 %275, %277
%279 = load i32, i32* %61
%280 = or i32 %278, %279
%281 = sext i32 %280 to i64
%282 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%283 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %282, i32 0, i32 9
store volatile i64 %281, i64* %283
store i32 1, i32* %62
store i32 1, i32* %63
store i32 0, i32* %64
store i32 0, i32* %65
store i32 0, i32* %66
store i32 0, i32* %67
store i32 7, i32* %68
store i32 291, i32* %69
%284 = load i32, i32* %62
%285 = shl i32 %284, 21
%286 = load i32, i32* %63
%287 = shl i32 %286, 20
%288 = or i32 %285, %287
%289 = load i32, i32* %64
%290 = shl i32 %289, 19
%291 = or i32 %288, %290
%292 = load i32, i32* %65
%293 = shl i32 %292, 18
%294 = or i32 %291, %293
%295 = load i32, i32* %66
%296 = shl i32 %295, 17
%297 = or i32 %294, %296
%298 = load i32, i32* %67
%299 = shl i32 %298, 16
%300 = or i32 %297, %299
%301 = load i32, i32* %68
%302 = shl i32 %301, 10
%303 = or i32 %300, %302
%304 = load i32, i32* %69
%305 = or i32 %303, %304
%306 = sext i32 %305 to i64
%307 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%308 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %307, i32 0, i32 10
store volatile i64 %306, i64* %308
store i64 4276992716, i64* %70
%309 = load i64, i64* %70
%310 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%311 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %310, i32 0, i32 20
store volatile i64 %309, i64* %311
store i32 1, i32* %71
%312 = load i32, i32* %71
%313 = sext i32 %312 to i64
%314 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%315 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %314, i32 0, i32 0
store volatile i64 %313, i64* %315
br label %316
316: ; preds = %322, %145
%317 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%318 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %317, i32 0, i32 1
%319 = load volatile i64, i64* %318
%320 = and i64 %319, 64
%321 = icmp ne i64 %320, 64
br i1 %321, label %322, label %323
322: ; preds = %316
br label %316
323: ; preds = %316
store i32 0, i32* %29
store i32 1, i32* %30
store i32 1, i32* %31
store i32 0, i32* %32
store i32 0, i32* %33
%324 = load i32, i32* %29
%325 = shl i32 %324, 4
%326 = load i32, i32* %30
%327 = shl i32 %326, 3
%328 = or i32 %325, %327
%329 = load i32, i32* %31
%330 = shl i32 %329, 2
%331 = or i32 %328, %330
%332 = load i32, i32* %32
%333 = shl i32 %332, 1
%334 = or i32 %331, %333
%335 = load i32, i32* %33
%336 = or i32 %334, %335
%337 = sext i32 %336 to i64
%338 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%339 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %338, i32 0, i32 0
store volatile i64 %337, i64* %339
store i32 0, i32* %30
store i32 0, i32* %31
store i32 0, i32* %33
%340 = load i32, i32* %29
%341 = shl i32 %340, 4
%342 = load i32, i32* %30
%343 = shl i32 %342, 3
%344 = or i32 %341, %343
%345 = load i32, i32* %31
%346 = shl i32 %345, 2
%347 = or i32 %344, %346
%348 = load i32, i32* %32
%349 = shl i32 %348, 1
%350 = or i32 %347, %349
%351 = load i32, i32* %33
%352 = or i32 %350, %351
%353 = sext i32 %352 to i64
%354 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%355 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %354, i32 0, i32 0
store volatile i64 %353, i64* %355
store i32 64, i32* %34
%356 = load i32, i32* %18
%357 = load i32, i32* %20
%358 = mul nsw i32 16, %357
%359 = add nsw i32 223, %358
%360 = mul nsw i32 %356, %359
store i32 %360, i32* %35
%361 = load i32, i32* %34
%362 = sub nsw i32 %361, 1
%363 = shl i32 %362, 16
%364 = load i32, i32* %35
%365 = sub nsw i32 %364, 1
%366 = or i32 %363, %365
%367 = sext i32 %366 to i64
%368 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%369 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %368, i32 0, i32 2
store volatile i64 %367, i64* %369
store i32 1, i32* %36
store i32 1, i32* %37
store i32 0, i32* %38
store i32 1, i32* %39
%370 = load i32, i32* %36
%371 = shl i32 %370, 31
%372 = load i32, i32* %37
%373 = shl i32 %372, 16
%374 = or i32 %371, %373
%375 = load i32, i32* %38
%376 = shl i32 %375, 15
%377 = or i32 %374, %376
%378 = load i32, i32* %39
%379 = or i32 %377, %378
%380 = sext i32 %379 to i64
%381 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%382 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %381, i32 0, i32 4
store volatile i64 %380, i64* %382
store i32 0, i32* %40
store i32 0, i32* %41
store i32 0, i32* %42
%383 = load i32, i32* %19
store i32 %383, i32* %43
%384 = load i32, i32* %18
%385 = sub nsw i32 %384, 1
store i32 %385, i32* %44
%386 = load i32, i32* %20
store i32 %386, i32* %45
%387 = load i32, i32* %21
store i32 %387, i32* %46
%388 = load i32, i32* %23
store i32 %388, i32* %47
%389 = load i32, i32* %22
store i32 %389, i32* %48
store i32 0, i32* %49
%390 = load i32, i32* %24
store i32 %390, i32* %50
%391 = load i32, i32* %25
store i32 %391, i32* %51
%392 = load i32, i32* %40
%393 = shl i32 %392, 19
%394 = load i32, i32* %41
%395 = shl i32 %394, 17
%396 = or i32 %393, %395
%397 = load i32, i32* %42
%398 = shl i32 %397, 16
%399 = or i32 %396, %398
%400 = load i32, i32* %43
%401 = shl i32 %400, 15
%402 = or i32 %399, %401
%403 = load i32, i32* %44
%404 = shl i32 %403, 12
%405 = or i32 %402, %404
%406 = load i32, i32* %45
%407 = shl i32 %406, 11
%408 = or i32 %405, %407
%409 = load i32, i32* %46
%410 = shl i32 %409, 7
%411 = or i32 %408, %410
%412 = load i32, i32* %47
%413 = shl i32 %412, 6
%414 = or i32 %411, %413
%415 = load i32, i32* %48
%416 = shl i32 %415, 5
%417 = or i32 %414, %416
%418 = load i32, i32* %49
%419 = shl i32 %418, 2
%420 = or i32 %417, %419
%421 = load i32, i32* %50
%422 = shl i32 %421, 1
%423 = or i32 %420, %422
%424 = load i32, i32* %51
%425 = or i32 %423, %424
%426 = sext i32 %425 to i64
%427 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%428 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %427, i32 0, i32 5
store volatile i64 %426, i64* %428
store i64 892270675, i64* %52
%429 = load i64, i64* %52
%430 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%431 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %430, i32 0, i32 6
store volatile i64 %429, i64* %431
store i32 0, i32* %53
store i32 0, i32* %54
store i32 1, i32* %55
store i32 0, i32* %56
store i32 0, i32* %57
%432 = load i32, i32* %53
%433 = shl i32 %432, 17
%434 = load i32, i32* %54
%435 = shl i32 %434, 16
%436 = or i32 %433, %435
%437 = load i32, i32* %55
%438 = shl i32 %437, 15
%439 = or i32 %436, %438
%440 = load i32, i32* %56
%441 = shl i32 %440, 14
%442 = or i32 %439, %441
%443 = load i32, i32* %57
%444 = shl i32 %443, 12
%445 = or i32 %442, %444
%446 = sext i32 %445 to i64
%447 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%448 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %447, i32 0, i32 8
store volatile i64 %446, i64* %448
store i32 1, i32* %58
store i32 0, i32* %59
store i32 1, i32* %60
store i32 1, i32* %61
%449 = load i32, i32* %58
%450 = shl i32 %449, 3
%451 = load i32, i32* %59
%452 = shl i32 %451, 2
%453 = or i32 %450, %452
%454 = load i32, i32* %60
%455 = shl i32 %454, 1
%456 = or i32 %453, %455
%457 = load i32, i32* %61
%458 = or i32 %456, %457
%459 = sext i32 %458 to i64
%460 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%461 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %460, i32 0, i32 9
store volatile i64 %459, i64* %461
store i32 1, i32* %62
store i32 1, i32* %63
store i32 0, i32* %64
store i32 0, i32* %65
store i32 0, i32* %66
store i32 0, i32* %67
store i32 7, i32* %68
store i32 291, i32* %69
%462 = load i32, i32* %62
%463 = shl i32 %462, 21
%464 = load i32, i32* %63
%465 = shl i32 %464, 20
%466 = or i32 %463, %465
%467 = load i32, i32* %64
%468 = shl i32 %467, 19
%469 = or i32 %466, %468
%470 = load i32, i32* %65
%471 = shl i32 %470, 18
%472 = or i32 %469, %471
%473 = load i32, i32* %66
%474 = shl i32 %473, 17
%475 = or i32 %472, %474
%476 = load i32, i32* %67
%477 = shl i32 %476, 16
%478 = or i32 %475, %477
%479 = load i32, i32* %68
%480 = shl i32 %479, 10
%481 = or i32 %478, %480
%482 = load i32, i32* %69
%483 = or i32 %481, %482
%484 = sext i32 %483 to i64
%485 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%486 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %485, i32 0, i32 10
store volatile i64 %484, i64* %486
store i64 4276992716, i64* %70
%487 = load i64, i64* %70
%488 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%489 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %488, i32 0, i32 20
store volatile i64 %487, i64* %489
%490 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 1)
store i32 1, i32* %71
%491 = load i32, i32* %71
%492 = sext i32 %491 to i64
%493 = load %struct.grtm_tx*, %struct.grtm_tx** %27
%494 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %493, i32 0, i32 0
store volatile i64 %492, i64* %494
br label %495
495: ; preds = %501, %323
%496 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%497 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %496, i32 0, i32 1
%498 = load volatile i64, i64* %497
%499 = and i64 %498, 64
%500 = icmp ne i64 %499, 64
br i1 %500, label %501, label %502
501: ; preds = %495
br label %495
502: ; preds = %495
%503 = load i32, i32* %15
%504 = sdiv i32 %503, 4
%505 = zext i32 %504 to i64
%506 = call i8* @llvm.stacksave()
store i8* %506, i8** %72
%507 = alloca i64, i64 %505
store i64 %505, i64* %73
%508 = getelementptr inbounds i64, i64* %507, i64 0
%509 = ptrtoint i64* %508 to i64
store i64 %509, i64* %74
%510 = load i64, i64* %74
%511 = and i64 %510, 4294966272
store i64 %511, i64* %74
%512 = load i64, i64* %74
%513 = add nsw i64 %512, 1024
store i64 %513, i64* %74
%514 = load i32, i32* %16
%515 = load i32, i32* %17
%516 = mul nsw i32 %514, %515
%517 = sdiv i32 %516, 4
%518 = zext i32 %517 to i64
%519 = alloca i64, i64 %518
store i64 %518, i64* %75
%520 = getelementptr inbounds i64, i64* %519, i64 0
%521 = ptrtoint i64* %520 to i64
store i64 %521, i64* %76
%522 = load i64, i64* %76
%523 = and i64 %522, 4294966272
store i64 %523, i64* %76
%524 = load i64, i64* %76
%525 = add nsw i64 %524, 1024
store i64 %525, i64* %76
%526 = load i64, i64* %74
%527 = ashr i64 %526, 10
%528 = trunc i64 %527 to i32
store i32 %528, i32* %77
store i32 0, i32* %78
%529 = load i32, i32* %77
%530 = shl i32 %529, 10
%531 = load i32, i32* %78
%532 = shl i32 %531, 3
%533 = or i32 %530, %532
%534 = sext i32 %533 to i64
%535 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%536 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %535, i32 0, i32 3
store volatile i64 %534, i64* %536
%537 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 2)
store i32 0, i32* %79
store i32 0, i32* %80
store i32 0, i32* %81
store i32 0, i32* %82
store i32 0, i32* %83
store i32 0, i32* %84
store i32 0, i32* %85
store i32 0, i32* %86
store i32 0, i32* %87
store i32 0, i32* %88
store i32 0, i32* %89
store i32 1, i32* %90
%538 = load i32, i32* %79
%539 = shl i32 %538, 15
%540 = load i32, i32* %80
%541 = shl i32 %540, 14
%542 = or i32 %539, %541
%543 = load i32, i32* %81
%544 = shl i32 %543, 9
%545 = or i32 %542, %544
%546 = load i32, i32* %82
%547 = shl i32 %546, 8
%548 = or i32 %545, %547
%549 = load i32, i32* %83
%550 = shl i32 %549, 7
%551 = or i32 %548, %550
%552 = load i32, i32* %84
%553 = shl i32 %552, 6
%554 = or i32 %551, %553
%555 = load i32, i32* %85
%556 = shl i32 %555, 5
%557 = or i32 %554, %556
%558 = load i32, i32* %86
%559 = shl i32 %558, 4
%560 = or i32 %557, %559
%561 = load i32, i32* %87
%562 = shl i32 %561, 3
%563 = or i32 %560, %562
%564 = load i32, i32* %88
%565 = shl i32 %564, 2
%566 = or i32 %563, %565
%567 = load i32, i32* %89
%568 = shl i32 %567, 1
%569 = or i32 %566, %568
%570 = load i32, i32* %90
%571 = or i32 %569, %570
store i32 %571, i32* %91
%572 = load i64, i64* %74
%573 = inttoptr i64 %572 to i32*
store i32* %573, i32** %92
store i32 0, i32* %93
br label %574
574: ; preds = %633, %502
%575 = load i32, i32* %93
%576 = icmp slt i32 %575, 4
br i1 %576, label %577, label %636
577: ; preds = %574
%578 = load i32, i32* %93
%579 = icmp eq i32 %578, 3
br i1 %579, label %580, label %617
580: ; preds = %577
store i32 1, i32* %89
%581 = load i32, i32* %79
%582 = shl i32 %581, 15
%583 = load i32, i32* %80
%584 = shl i32 %583, 14
%585 = or i32 %582, %584
%586 = load i32, i32* %81
%587 = shl i32 %586, 9
%588 = or i32 %585, %587
%589 = load i32, i32* %82
%590 = shl i32 %589, 8
%591 = or i32 %588, %590
%592 = load i32, i32* %83
%593 = shl i32 %592, 7
%594 = or i32 %591, %593
%595 = load i32, i32* %84
%596 = shl i32 %595, 6
%597 = or i32 %594, %596
%598 = load i32, i32* %85
%599 = shl i32 %598, 5
%600 = or i32 %597, %599
%601 = load i32, i32* %86
%602 = shl i32 %601, 4
%603 = or i32 %600, %602
%604 = load i32, i32* %87
%605 = shl i32 %604, 3
%606 = or i32 %603, %605
%607 = load i32, i32* %88
%608 = shl i32 %607, 2
%609 = or i32 %606, %608
%610 = load i32, i32* %89
%611 = shl i32 %610, 1
%612 = or i32 %609, %611
%613 = load i32, i32* %90
%614 = or i32 %612, %613
store i32 %614, i32* %91
%615 = load i32, i32* %91
%616 = load i32*, i32** %92
store volatile i32 %615, i32* %616
br label %620
617: ; preds = %577
%618 = load i32, i32* %91
%619 = load i32*, i32** %92
store volatile i32 %618, i32* %619
br label %620
620: ; preds = %617, %580
%621 = load i32*, i32** %92
%622 = getelementptr inbounds i32, i32* %621, i32 1
store i32* %622, i32** %92
%623 = load i64, i64* %76
%624 = load i32, i32* %93
%625 = load i32, i32* %16
%626 = mul nsw i32 %624, %625
%627 = sext i32 %626 to i64
%628 = add nsw i64 %623, %627
%629 = trunc i64 %628 to i32
%630 = load i32*, i32** %92
store volatile i32 %629, i32* %630
%631 = load i32*, i32** %92
%632 = getelementptr inbounds i32, i32* %631, i32 1
store i32* %632, i32** %92
br label %633
633: ; preds = %620
%634 = load i32, i32* %93
%635 = add nsw i32 %634, 1
store i32 %635, i32* %93
br label %574
636: ; preds = %574
store i32 0, i32* %94
store i32 0, i32* %95
store i64 0, i64* %96
%637 = load i64, i64* %76
%638 = inttoptr i64 %637 to i32*
store i32* %638, i32** %92
%639 = load i32, i32* %69
%640 = load i32, i32* %60
%641 = load i32, i32* %95
%642 = load i32, i32* %94
%643 = load i64, i64* %96
%644 = load i32, i32* %18
%645 = load i32, i32* %20
%646 = mul nsw i32 16, %645
%647 = add nsw i32 223, %646
%648 = mul nsw i32 %644, %647
%649 = load i32*, i32** %92
%650 = bitcast i32* %649 to i8*
%651 = call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...) bitcast (i32 (...)* @TMTF to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...)*)(i32 %639, i32 6, i32 %640, i32 %641, i32 %642, i32 0, i32 0, i32 0, i32 3, i32 0, i32 -1163015507, i32 1, i64 %643, i32 %648, i8* %650)
%652 = load i32, i32* %95
%653 = add nsw i32 %652, 1
store i32 %653, i32* %95
%654 = load i32, i32* %94
%655 = add nsw i32 %654, 1
store i32 %655, i32* %94
%656 = load i64, i64* %96
%657 = add nsw i64 %656, 1
store i64 %657, i64* %96
%658 = load i64, i64* %76
%659 = load i32, i32* %16
%660 = sext i32 %659 to i64
%661 = add nsw i64 %658, %660
%662 = inttoptr i64 %661 to i32*
store i32* %662, i32** %92
%663 = load i32, i32* %69
%664 = load i32, i32* %60
%665 = load i32, i32* %95
%666 = load i32, i32* %94
%667 = load i64, i64* %96
%668 = load i32, i32* %18
%669 = load i32, i32* %20
%670 = mul nsw i32 16, %669
%671 = add nsw i32 223, %670
%672 = mul nsw i32 %668, %671
%673 = load i32*, i32** %92
%674 = bitcast i32* %673 to i8*
%675 = call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...) bitcast (i32 (...)* @TMTF to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...)*)(i32 %663, i32 6, i32 %664, i32 %665, i32 %666, i32 0, i32 0, i32 0, i32 3, i32 0, i32 -1163015507, i32 1, i64 %667, i32 %672, i8* %674)
%676 = load i32, i32* %95
%677 = add nsw i32 %676, 1
store i32 %677, i32* %95
%678 = load i32, i32* %94
%679 = add nsw i32 %678, 1
store i32 %679, i32* %94
%680 = load i64, i64* %96
%681 = add nsw i64 %680, 1
store i64 %681, i64* %96
%682 = load i64, i64* %76
%683 = load i32, i32* %16
%684 = mul nsw i32 %683, 2
%685 = sext i32 %684 to i64
%686 = add nsw i64 %682, %685
%687 = inttoptr i64 %686 to i32*
store i32* %687, i32** %92
%688 = load i32, i32* %69
%689 = load i32, i32* %60
%690 = load i32, i32* %95
%691 = load i32, i32* %94
%692 = load i64, i64* %96
%693 = load i32, i32* %18
%694 = load i32, i32* %20
%695 = mul nsw i32 16, %694
%696 = add nsw i32 223, %695
%697 = mul nsw i32 %693, %696
%698 = load i32*, i32** %92
%699 = bitcast i32* %698 to i8*
%700 = call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...) bitcast (i32 (...)* @TMTF to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...)*)(i32 %688, i32 6, i32 %689, i32 %690, i32 %691, i32 0, i32 0, i32 0, i32 3, i32 0, i32 -1163015507, i32 1, i64 %692, i32 %697, i8* %699)
%701 = load i32, i32* %95
%702 = add nsw i32 %701, 1
store i32 %702, i32* %95
%703 = load i32, i32* %94
%704 = add nsw i32 %703, 1
store i32 %704, i32* %94
%705 = load i64, i64* %96
%706 = add nsw i64 %705, 1
store i64 %706, i64* %96
%707 = load i64, i64* %76
%708 = load i32, i32* %16
%709 = mul nsw i32 %708, 3
%710 = sext i32 %709 to i64
%711 = add nsw i64 %707, %710
%712 = inttoptr i64 %711 to i32*
store i32* %712, i32** %92
%713 = load i32, i32* %69
%714 = load i32, i32* %60
%715 = load i32, i32* %95
%716 = load i32, i32* %94
%717 = load i64, i64* %96
%718 = load i32, i32* %18
%719 = load i32, i32* %20
%720 = mul nsw i32 16, %719
%721 = add nsw i32 223, %720
%722 = mul nsw i32 %718, %721
%723 = load i32*, i32** %92
%724 = bitcast i32* %723 to i8*
%725 = call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...) bitcast (i32 (...)* @TMTF to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...)*)(i32 %713, i32 6, i32 %714, i32 %715, i32 %716, i32 0, i32 0, i32 0, i32 3, i32 0, i32 -1163015507, i32 1, i64 %717, i32 %722, i8* %724)
%726 = load i32, i32* %95
%727 = add nsw i32 %726, 1
store i32 %727, i32* %95
%728 = load i32, i32* %94
%729 = add nsw i32 %728, 1
store i32 %729, i32* %94
%730 = load i64, i64* %96
%731 = add nsw i64 %730, 1
store i64 %731, i64* %96
%732 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 3)
store i32 1, i32* %33
%733 = load i32, i32* %29
%734 = shl i32 %733, 4
%735 = load i32, i32* %30
%736 = shl i32 %735, 3
%737 = or i32 %734, %736
%738 = load i32, i32* %31
%739 = shl i32 %738, 2
%740 = or i32 %737, %739
%741 = load i32, i32* %32
%742 = shl i32 %741, 1
%743 = or i32 %740, %742
%744 = load i32, i32* %33
%745 = or i32 %743, %744
%746 = sext i32 %745 to i64
%747 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%748 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %747, i32 0, i32 0
store volatile i64 %746, i64* %748
br label %749
749: ; preds = %755, %636
%750 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%751 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %750, i32 0, i32 0
%752 = load volatile i64, i64* %751
%753 = and i64 %752, 1
%754 = icmp ne i64 %753, 0
br i1 %754, label %755, label %756
755: ; preds = %749
br label %749
756: ; preds = %749
%757 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 4)
br label %758
758: ; preds = %764, %756
%759 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%760 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %759, i32 0, i32 1
%761 = load volatile i64, i64* %760
%762 = and i64 %761, 32
%763 = icmp ne i64 %762, 32
br i1 %763, label %764, label %765
764: ; preds = %758
br label %758
765: ; preds = %758
%766 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 5)
store i32 0, i32* %97
store i32 1, i32* %98
store i32 1, i32* %99
store i32 1, i32* %100
store i32 1, i32* %101
store i32 1, i32* %102
%767 = load i32, i32* %97
%768 = shl i32 %767, 5
%769 = load i32, i32* %98
%770 = shl i32 %769, 4
%771 = or i32 %768, %770
%772 = load i32, i32* %99
%773 = shl i32 %772, 3
%774 = or i32 %771, %773
%775 = load i32, i32* %100
%776 = shl i32 %775, 2
%777 = or i32 %774, %776
%778 = load i32, i32* %101
%779 = shl i32 %778, 1
%780 = or i32 %777, %779
%781 = load i32, i32* %102
%782 = or i32 %780, %781
%783 = sext i32 %782 to i64
%784 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%785 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %784, i32 0, i32 1
store volatile i64 %783, i64* %785
br label %786
786: ; preds = %792, %765
%787 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%788 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %787, i32 0, i32 1
%789 = load volatile i64, i64* %788
%790 = and i64 %789, 16
%791 = icmp ne i64 %790, 16
br i1 %791, label %792, label %793
792: ; preds = %786
br label %786
793: ; preds = %786
%794 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 6)
store i32 0, i32* %97
store i32 1, i32* %98
store i32 1, i32* %99
store i32 1, i32* %100
store i32 1, i32* %101
store i32 1, i32* %102
%795 = load i32, i32* %97
%796 = shl i32 %795, 5
%797 = load i32, i32* %98
%798 = shl i32 %797, 4
%799 = or i32 %796, %798
%800 = load i32, i32* %99
%801 = shl i32 %800, 3
%802 = or i32 %799, %801
%803 = load i32, i32* %100
%804 = shl i32 %803, 2
%805 = or i32 %802, %804
%806 = load i32, i32* %101
%807 = shl i32 %806, 1
%808 = or i32 %805, %807
%809 = load i32, i32* %102
%810 = or i32 %808, %809
%811 = sext i32 %810 to i64
%812 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%813 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %812, i32 0, i32 1
store volatile i64 %811, i64* %813
br label %814
814: ; preds = %820, %793
%815 = load %struct.grtm_dma*, %struct.grtm_dma** %26
%816 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %815, i32 0, i32 1
%817 = load volatile i64, i64* %816
%818 = and i64 %817, 16
%819 = icmp ne i64 %818, 16
br i1 %819, label %820, label %821
820: ; preds = %814
br label %814
821: ; preds = %814
%822 = load i64, i64* %28
%823 = call i32 (i64, ...) bitcast (i32 (...)* @report_subtest to i32 (i64, ...)*)(i64 %822)
%824 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 7)
%825 = load i8*, i8** %72
%826 = load i32, i32* %13
ret i32 %826
}

LLVM IR (-O2):
%struct.grtm_dma = type { i64, i64, i64, i64, i64, i64 }
%struct.grtm_tx = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 }
define i32 @grtm_test(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11) {
%13 = tail call i32 (i32, ...) bitcast (i32 (...)* @report_device to i32 (i32, ...)*)(i32 16973824)
%14 = sext i32 %0 to i64
%15 = inttoptr i64 %14 to %struct.grtm_dma*
%16 = add nsw i32 %0, 128
%17 = sext i32 %16 to i64
%18 = inttoptr i64 %17 to %struct.grtm_tx*
%19 = add nsw i32 %4, -1
%20 = shl i32 %19, 15
%21 = shl i32 %5, 14
%22 = or i32 %20, %21
%23 = shl i32 %6, 13
%24 = or i32 %22, %23
%25 = shl i32 %7, 12
%26 = or i32 %24, %25
%27 = shl i32 %9, 11
%28 = shl i32 %8, 10
%29 = shl i32 %10, 9
%30 = shl i32 %11, 8
%31 = or i32 %26, %28
%32 = or i32 %31, %27
%33 = or i32 %32, %29
%34 = or i32 %33, %30
%35 = sext i32 %34 to i64
%36 = tail call i32 (i64, ...) bitcast (i32 (...)* @report_subtest to i32 (i64, ...)*)(i64 %35)
%37 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %15, i64 0, i32 5
%38 = load volatile i64, i64* %37
%39 = and i64 %38, 255
%40 = icmp ult i64 %39, 3
br i1 %40, label %41, label %43
41: ; preds = %12
%42 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %43
43: ; preds = %41, %12
%44 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %15, i64 0, i32 0
store volatile i64 12, i64* %44
store volatile i64 0, i64* %44
%45 = shl nsw i32 %6, 4
%46 = add nsw i32 %45, 223
%47 = mul nsw i32 %46, %4
%48 = add nsw i32 %47, -1
%49 = or i32 %48, 4128768
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %15, i64 0, i32 2
store volatile i64 %50, i64* %51
%52 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %18, i64 0, i32 4
store volatile i64 -2147418111, i64* %52
%53 = shl i32 %5, 15
%54 = shl i32 %19, 12
%55 = or i32 %53, %54
%56 = shl i32 %6, 11
%57 = or i32 %55, %56
%58 = shl i32 %7, 7
%59 = or i32 %57, %58
%60 = shl i32 %9, 6
%61 = shl i32 %8, 5
%62 = shl i32 %10, 1
%63 = or i32 %59, %61
%64 = or i32 %63, %60
%65 = or i32 %64, %62
%66 = or i32 %65, %11
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %18, i64 0, i32 5
store volatile i64 %67, i64* %68
%69 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %18, i64 0, i32 6
store volatile i64 892270675, i64* %69
%70 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %18, i64 0, i32 8
store volatile i64 32768, i64* %70
%71 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %18, i64 0, i32 9
store volatile i64 11, i64* %71
%72 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %18, i64 0, i32 10
store volatile i64 3153187, i64* %72
%73 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %18, i64 0, i32 20
store volatile i64 4276992716, i64* %73
%74 = getelementptr inbounds %struct.grtm_tx, %struct.grtm_tx* %18, i64 0, i32 0
store volatile i64 1, i64* %74
%75 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %15, i64 0, i32 1
br label %76
76: ; preds = %76, %43
%77 = load volatile i64, i64* %75
%78 = and i64 %77, 64
%79 = icmp eq i64 %78, 0
br i1 %79, label %76, label %80
80: ; preds = %76
store volatile i64 12, i64* %44
store volatile i64 0, i64* %44
store volatile i64 %50, i64* %51
store volatile i64 -2147418111, i64* %52
store volatile i64 %67, i64* %68
store volatile i64 892270675, i64* %69
store volatile i64 32768, i64* %70
store volatile i64 11, i64* %71
store volatile i64 3153187, i64* %72
store volatile i64 4276992716, i64* %73
%81 = tail call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 1)
store volatile i64 1, i64* %74
br label %82
82: ; preds = %82, %80
%83 = load volatile i64, i64* %75
%84 = and i64 %83, 64
%85 = icmp eq i64 %84, 0
br i1 %85, label %82, label %86
86: ; preds = %82
%87 = sdiv i32 %1, 4
%88 = zext i32 %87 to i64
%89 = alloca i64, i64 %88
%90 = ptrtoint i64* %89 to i64
%91 = and i64 %90, 4294966272
%92 = add nuw nsw i64 %91, 1024
%93 = mul nsw i32 %3, %2
%94 = sdiv i32 %93, 4
%95 = zext i32 %94 to i64
%96 = alloca i64, i64 %95
%97 = ptrtoint i64* %96 to i64
%98 = and i64 %97, 4294966272
%99 = add nuw nsw i64 %98, 1024
%100 = shl i64 %92, 32
%101 = ashr exact i64 %100, 32
%102 = getelementptr inbounds %struct.grtm_dma, %struct.grtm_dma* %15, i64 0, i32 3
store volatile i64 %101, i64* %102
%103 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 2)
%104 = inttoptr i64 %92 to i32*
%105 = trunc i64 %99 to i32
store volatile i32 1, i32* %104
%106 = getelementptr inbounds i32, i32* %104, i64 1
store volatile i32 %105, i32* %106
%107 = getelementptr inbounds i32, i32* %104, i64 2
store volatile i32 1, i32* %107
%108 = getelementptr inbounds i32, i32* %104, i64 3
%109 = add i32 %105, %2
store volatile i32 %109, i32* %108
%110 = getelementptr inbounds i32, i32* %104, i64 4
store volatile i32 1, i32* %110
%111 = getelementptr inbounds i32, i32* %104, i64 5
%112 = shl nsw i32 %2, 1
%113 = add i32 %112, %105
store volatile i32 %113, i32* %111
%114 = getelementptr inbounds i32, i32* %104, i64 6
store volatile i32 3, i32* %114
%115 = getelementptr inbounds i32, i32* %104, i64 7
%116 = mul nsw i32 %2, 3
%117 = add i32 %116, %105
store volatile i32 %117, i32* %115
%118 = inttoptr i64 %99 to i8*
%119 = call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...) bitcast (i32 (...)* @TMTF to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...)*)(i32 291, i32 6, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 -1163015507, i32 1, i64 0, i32 %47, i8* %118)
%120 = sext i32 %2 to i64
%121 = add nsw i64 %99, %120
%122 = inttoptr i64 %121 to i8*
%123 = call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...) bitcast (i32 (...)* @TMTF to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...)*)(i32 291, i32 6, i32 1, i32 1, i32 1, i32 0, i32 0, i32 0, i32 3, i32 0, i32 -1163015507, i32 1, i64 1, i32 %47, i8* %122)
%124 = shl nsw i32 %2, 1
%125 = sext i32 %124 to i64
%126 = add nsw i64 %99, %125
%127 = inttoptr i64 %126 to i8*
%128 = call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...) bitcast (i32 (...)* @TMTF to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...)*)(i32 291, i32 6, i32 1, i32 2, i32 2, i32 0, i32 0, i32 0, i32 3, i32 0, i32 -1163015507, i32 1, i64 2, i32 %47, i8* %127)
%129 = sext i32 %116 to i64
%130 = add nsw i64 %99, %129
%131 = inttoptr i64 %130 to i8*
%132 = call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...) bitcast (i32 (...)* @TMTF to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i8*, ...)*)(i32 291, i32 6, i32 1, i32 3, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 -1163015507, i32 1, i64 3, i32 %47, i8* %131)
%133 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 3)
store volatile i64 1, i64* %44
br label %134
134: ; preds = %134, %86
%135 = load volatile i64, i64* %44
%136 = and i64 %135, 1
%137 = icmp eq i64 %136, 0
br i1 %137, label %138, label %134
138: ; preds = %134
%139 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 4)
br label %140
140: ; preds = %140, %138
%141 = load volatile i64, i64* %75
%142 = and i64 %141, 32
%143 = icmp eq i64 %142, 0
br i1 %143, label %140, label %144
144: ; preds = %140
%145 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 5)
store volatile i64 31, i64* %75
br label %146
146: ; preds = %146, %144
%147 = load volatile i64, i64* %75
%148 = and i64 %147, 16
%149 = icmp eq i64 %148, 0
br i1 %149, label %146, label %150
150: ; preds = %146
%151 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 6)
store volatile i64 31, i64* %75
br label %152
152: ; preds = %152, %150
%153 = load volatile i64, i64* %75
%154 = and i64 %153, 16
%155 = icmp eq i64 %154, 0
br i1 %155, label %152, label %156
156: ; preds = %152
%157 = call i32 (i64, ...) bitcast (i32 (...)* @report_subtest to i32 (i64, ...)*)(i64 %35)
%158 = call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 7)
ret i32 undef
}