user: 这段汇编代码用C语言表示是什么样的:

```asm
<main>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x98,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  mov    $0x20,%eax
L289:
  sub    $0x1,%eax
  jne    L289
  mov    $0x20,%eax
L243:
  sub    $0x1,%eax
  jne    L243
  mov    $0x20,%eax
L670:
  sub    $0x1,%eax
  jne    L670
  mov    $0x20,%eax
L1143:
  sub    $0x1,%eax
  jne    L1143
  mov    $0x20,%eax
L436:
  sub    $0x1,%eax
  jne    L436
  mov    $0x20,%eax
L315:
  sub    $0x1,%eax
  jne    L315
  mov    $0x20,%eax
L614:
  sub    $0x1,%eax
  jne    L614
  mov    $0x20,%edx
  mov    $0x1,%eax
L280:
  mov    %rax,%rcx
  add    %rax,%rax
  sub    $0x1,%edx
  jne    L280
  mov    $0x80000000,%eax
  cmp    %rax,%rcx
  jne    L1031
L1237:
  mov    $0x20,%edx
  mov    $0x1,%eax
L142:
  mov    %rax,%rcx
  add    %rax,%rax
  sub    $0x1,%edx
  jne    L142
  mov    $0x80000000,%eax
  cmp    %rax,%rcx
  jne    L1189
L667:
  mov    $0x20,%edx
  mov    $0x1,%eax
L347:
  mov    %rax,%rcx
  add    %rax,%rax
  sub    $0x1,%edx
  jne    L347
  mov    $0x80000000,%eax
  cmp    %rax,%rcx
  jne    L4
L423:
  mov    $0x20,%eax
L597:
  sub    $0x1,%eax
  jne    L597
  mov    $0x20,%eax
L1209:
  sub    $0x1,%eax
  jne    L1209
  mov    $0x20,%eax
  mov    $0x20,%edx
  mov    $0x1,%ecx
L1129:
  mov    %ecx,%edi
  sub    %edx,%edi
  mov    %edi,%edx
  sub    $0x1,%eax
  jne    L1129
  cmp    $0x20,%edi
  jne    L746
L174:
  mov    $0x20,%edx
  movabs $0x100000000,%rax
L1263:
  mov    %rax,%rcx
  shr    $0x3f,%rcx
  add    %rcx,%rax
  sar    %rax
  sub    $0x1,%edx
  jne    L1263
  cmp    $0x1,%rax
  jne    L28
L478:
  mov    $0x20,%edx
  movabs $0x100000000,%rax
L1089:
  mov    %rax,%rcx
  shr    $0x3f,%rcx
  add    %rcx,%rax
  sar    %rax
  sub    $0x1,%edx
  jne    L1089
  cmp    $0x1,%rax
  jne    L927
L864:
  mov    $0x20,%esi
  mov    $0x2,%ecx
  movabs $0x100000000,%rdi
L1152:
  mov    %rdi,%rax
  cqto
  idiv   %rcx
  mov    %rax,%rcx
  sub    $0x1,%esi
  jne    L1152
  cmp    $0x2,%rax
  jne    L503
L155:
  mov    $0x0,%ecx
  mov    $0xffffffff,%eax
  mov    $0x1,%esi
L276:
  mov    %esi,%edx
  shl    %cl,%edx
  and    %edx,%eax
  add    $0x1,%ecx
  cmp    $0x20,%ecx
  jne    L276
  test   %eax,%eax
  jne    L1046
L840:
  mov    $0x0,%ecx
  mov    $0xffffffff,%eax
  mov    $0x1,%esi
L340:
  mov    %esi,%edx
  shl    %cl,%edx
  and    %edx,%eax
  add    $0x1,%ecx
  cmp    $0x20,%ecx
  jne    L340
  test   %eax,%eax
  jne    L546
L793:
  mov    $0x0,%ecx
  mov    $0xffffffff,%eax
  mov    $0x1,%esi
L678:
  mov    %esi,%edx
  shl    %cl,%edx
  and    %edx,%eax
  add    $0x1,%ecx
  cmp    $0x20,%ecx
  jne    L678
  test   %eax,%eax
  jne    L1003
L1066:
  mov    $0x0,%eax
  mov    $0xffffffff,%edx
L1099:
  mov    %edx,%ecx
  btc    %eax,%edx
  add    $0x1,%eax
  cmp    $0x20,%eax
  jne    L1099
  cmp    $0x80000000,%ecx
  jne    L320
L210:
  mov    $0x0,%eax
  mov    $0xffffffff,%edx
L979:
  mov    %edx,%ecx
  btc    %eax,%edx
  add    $0x1,%eax
  cmp    $0x20,%eax
  jne    L979
  cmp    $0x80000000,%ecx
  jne    L439
L1317:
  mov    $0x0,%eax
  mov    $0xffffffff,%edx
L827:
  mov    %edx,%ecx
  btc    %eax,%edx
  add    $0x1,%eax
  cmp    $0x20,%eax
  jne    L827
  cmp    $0x80000000,%ecx
  jne    L693
L705:
  mov    $0x0,%ecx
  mov    $0x0,%eax
  mov    $0x1,%esi
L1156:
  mov    %esi,%edx
  shl    %cl,%edx
  or     %edx,%eax
  add    $0x1,%ecx
  cmp    $0x20,%ecx
  jne    L1156
  cmp    $0xffffffff,%eax
  jne    L1138
L476:
  mov    $0x0,%ecx
  mov    $0x0,%eax
  mov    $0x1,%esi
L294:
  mov    %esi,%edx
  shl    %cl,%edx
  or     %edx,%eax
  add    $0x1,%ecx
  cmp    $0x20,%ecx
  jne    L294
  cmp    $0xffffffff,%eax
  jne    L308
L1301:
  mov    $0x0,%ecx
  mov    $0x0,%eax
  mov    $0x1,%esi
L206:
  mov    %esi,%edx
  shl    %cl,%edx
  or     %edx,%eax
  add    $0x1,%ecx
  cmp    $0x20,%ecx
  jne    L206
  cmp    $0xffffffff,%eax
  jne    L445
L225:
  mov    $0x20,%eax
  mov    $0x1,%edx
L584:
  add    %rdx,%rdx
  sub    $0x1,%eax
  jne    L584
  movabs $0x100000000,%rax
  cmp    %rax,%rdx
  jne    L160
L892:
  mov    $0x20,%eax
  mov    $0x1,%edx
L661:
  add    %rdx,%rdx
  sub    $0x1,%eax
  jne    L661
  movabs $0x100000000,%rax
  cmp    %rax,%rdx
  jne    L612
L1195:
  mov    $0x20,%eax
  movabs $0x100000000,%rdx
L895:
  sar    %rdx
  sub    $0x1,%eax
  jne    L895
  cmp    $0x1,%rdx
  jne    L1341
L23:
  mov    $0x20,%eax
  movabs $0x100000000,%rdx
L1223:
  sar    %rdx
  sub    $0x1,%eax
  jne    L1223
  cmp    $0x1,%rdx
  jne    L592
L1080:
  mov    %rsp,%rbp
  lea    0x80(%rsp),%rbx
  mov    %rbp,%rax
  pxor   %xmm0,%xmm0
  movss  D332(%rip),%xmm2
L1346:
  movaps %xmm0,%xmm1
  addss  %xmm2,%xmm0
  movss  %xmm1,(%rax)
  add    $0x4,%rax
  cmp    %rax,%rbx
  jne    L1346
  ucomiss D296(%rip),%xmm0
  jp     L1185
  jne    L1185
L1288:
  mov    %rbp,%rax
  movss  D296(%rip),%xmm0
  movss  D332(%rip),%xmm2
L428:
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm0
  movss  %xmm1,(%rax)
  add    $0x4,%rax
  cmp    %rax,%rbx
  jne    L428
  ucomiss D299(%rip),%xmm0
  jp     L944
  jne    L944
L273:
  mov    %rbp,%rax
  pxor   %xmm0,%xmm0
  movss  D332(%rip),%xmm1
L1353:
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rax,%rbx
  jne    L1353
  ucomiss D296(%rip),%xmm0
  jp     L1328
  jne    L1328
L741:
  mov    %rbp,%rax
  movss  D296(%rip),%xmm0
  movss  D332(%rip),%xmm1
L888:
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rax,%rbx
  jne    L888
  ucomiss D299(%rip),%xmm0
  jp     L679
  jne    L679
L177:
  mov    %rbp,%rax
  pxor   %xmm0,%xmm0
  movss  D332(%rip),%xmm1
L293:
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rax,%rbx
  jne    L293
  ucomiss D296(%rip),%xmm0
  jp     L1322
  jne    L1322
L368:
  mov    %rbp,%rax
  pxor   %xmm0,%xmm0
  movss  D332(%rip),%xmm1
L130:
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L130
  ucomiss D296(%rip),%xmm0
  jp     L458
  jne    L458
L1084:
  mov    %rbp,%rax
  pxor   %xmm0,%xmm0
  movss  D332(%rip),%xmm1
L689:
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L689
  ucomiss D296(%rip),%xmm0
  jp     L762
  jne    L762
L690:
  mov    %rbp,%rax
  movss  D332(%rip),%xmm0
L391:
  addss  %xmm0,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L391
  ucomiss D106(%rip),%xmm0
  jp     L1006
  jne    L1006
L242:
  mov    %rbp,%rax
  movss  D332(%rip),%xmm0
L1058:
  addss  %xmm0,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L1058
  ucomiss D106(%rip),%xmm0
  jp     L367
  jne    L367
L1282:
  mov    %rbp,%rax
  movss  D332(%rip),%xmm0
L738:
  addss  %xmm0,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L738
  ucomiss D106(%rip),%xmm0
  jp     L1053
  jne    L1053
L417:
  mov    %rbp,%rax
  movss  D296(%rip),%xmm0
  movss  D332(%rip),%xmm1
L605:
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L605
  ucomiss D299(%rip),%xmm0
  jp     L843
  jne    L843
L1112:
  mov    %rbp,%rax
  movss  D296(%rip),%xmm0
  movss  D332(%rip),%xmm1
L1011:
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L1011
  ucomiss D299(%rip),%xmm0
  jp     L797
  jne    L797
L921:
  mov    %rbp,%rax
  movss  D332(%rip),%xmm0
  movss  D296(%rip),%xmm1
L788:
  movaps %xmm1,%xmm3
  subss  %xmm0,%xmm3
  movaps %xmm3,%xmm0
  movss  %xmm3,(%rax)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L788
  mov    $0x0,%ebx
  jmp    L665
L1031:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1237
L1189:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L667
L4:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L423
L746:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L174
L28:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L478
L927:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L864
L503:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L155
L1046:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L840
L546:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L793
L1003:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1066
L320:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L210
L439:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1317
L693:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L705
L1138:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L476
L308:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1301
L445:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L225
L160:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L892
L612:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1195
L1341:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L23
L592:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1080
L1185:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1288
L944:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L273
L1328:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L741
L679:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L177
L1322:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L368
L458:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1084
L762:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L690
L1006:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L242
L367:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1282
L1053:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L417
L843:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L1112
L797:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L921
L357:
  movss  D332(%rip),%xmm4
  ucomiss 0x0(%rbp),%xmm4
  jp     L875
  jne    L875
L45:
  add    $0x1,%ebx
  add    $0x4,%rbp
  cmp    $0x20,%ebx
  je     L1141
L665:
  test   $0x1,%bl
  jne    L357
  movss  0x0(%rbp),%xmm0
  ucomiss D14(%rip),%xmm0
  jp     L570
  je     L45
L570:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L45
L875:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L45
L1141:
  mov    $0x20,%eax
  movss  D106(%rip),%xmm0
  movss  D189(%rip),%xmm1
L172:
  mulss  %xmm1,%xmm0
  sub    $0x1,%eax
  jne    L172
  ucomiss D332(%rip),%xmm0
  jp     L13
  jne    L13
L611:
  mov    $0x20,%eax
  movss  D106(%rip),%xmm0
  movss  D189(%rip),%xmm1
L536:
  mulss  %xmm1,%xmm0
  sub    $0x1,%eax
  jne    L536
  ucomiss D332(%rip),%xmm0
  jp     L534
  jne    L534
L326:
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L91
  mov    $0x0,%eax
  add    $0x98,%rsp
  pop    %rbx
  pop    %rbp
  ret
L13:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L611
L534:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L326
L91:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D332
type: f32
name: disassemble_data
arguments: label: D296
type: f32
name: disassemble_data
arguments: label: D299
type: f32
name: disassemble_data
arguments: label: D106
type: byte[4]
name: disassemble_data
arguments: label: D14
type: f32
name: disassemble_data
arguments: label: D189
type: byte[4]

tool: D332: 1

tool: D296: 32

tool: D299: 0

tool: {"D106": [0x00,0x00,0x80,0x4f]}

tool: D14: 31

tool: {"D189": [0x00,0x00,0x00,0x3f]}

assistant: ```c
int main(int argc, char **argv) {
  int iexp, igot;
  long long lexp, lgot;
  int N = 32;
  int idata[N];
  long long ldata[N];
  float fexp, fgot;
  float fdata[N];
  int i;
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      idata[i] = igot++;
    }
  }
  if (iexp != igot)
    abort();
  igot = 32;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      idata[i] = igot--;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      idata[i] = ++igot;
    }
  }
  if (iexp != igot)
    abort();
  igot = 32;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      idata[i] = --igot;
    }
  }
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot += expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot = igot + expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot = expr + igot;
    }
  }
  if (iexp != igot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot *= expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot = lgot * expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot = expr * lgot;
    }
  }
  if (lexp != lgot)
    abort();
  igot = 32;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot -= expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 32;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot = igot - expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 32;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot = expr - igot;
    }
  }
  if (iexp != igot)
    abort();
  lgot = 1LL << 32;
  lexp = 1LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot /= expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL << 32;
  lexp = 1LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot = lgot / expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 2LL;
  lexp = 2LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 1LL << N;
#pragma acc atomic capture
      ldata[i] = lgot = expr / lgot;
    }
  }
  if (lexp != lgot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot &= expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = igot & expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = expr & igot;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot ^= expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = igot ^ expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = expr ^ igot;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = ~0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot |= expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = ~0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = igot | expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = ~0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = expr | igot;
    }
  }
  if (iexp != igot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      ldata[i] = lgot <<= expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = lgot = lgot << expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL;
  lexp = 2LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel
    {
      long long expr = 1LL;
#pragma acc atomic capture
      ldata[0] = lgot = expr << lgot;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL << N;
  lexp = 1LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 1LL;
#pragma acc atomic capture
      ldata[i] = lgot >>= expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL << N;
  lexp = 1LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      ldata[i] = lgot = lgot >> expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL << 63;
  lexp = 1LL << 32;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel
    {
      long long expr = 1LL << 32;
#pragma acc atomic capture
      ldata[0] = lgot = expr >> lgot;
    }
  }
  if (lexp != lgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      fdata[i] = fgot++;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 32.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      fdata[i] = fgot--;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      fdata[i] = ++fgot;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 32.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      fdata[i] = --fgot;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot += expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot = fgot + expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot = expr + fgot;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 1.0;
  fexp = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 2.0;
#pragma acc atomic capture
      fdata[i] = fgot *= expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 1.0;
  fexp = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      fdata[i] = fgot = fgot * expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 1.0;
  fexp = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 2.0;
#pragma acc atomic capture
      fdata[i] = fgot = expr * fgot;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 32.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot -= expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 32.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot = fgot - expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 1.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 32.0;
#pragma acc atomic capture
      fdata[i] = fgot = expr - fgot;
    }
  }
  for (i = 0; i < N; i++)
    if (i % 2 == 0) {
      if (fdata[i] != 31.0)
        abort();
    } else {
      if (fdata[i] != 1.0)
        abort();
    }
  fexp = 1.0;
  fgot = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 2.0;
#pragma acc atomic capture
      fdata[i] = fgot /= expr;
    }
  }
  if (fexp != fgot)
    abort();
  fexp = 1.0;
  fgot = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 2.0;
#pragma acc atomic capture
      fdata[i] = fgot = fgot / expr;
    }
  }
  if (fexp != fgot)
    abort();
  fexp = 1.0;
  fgot = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel
    {
      float expr = 8192.0 * 8192.0 * 64.0;
#pragma acc atomic capture
      fdata[0] = fgot = expr / fgot;
    }
  }
  if (fexp != fgot)
    abort();
  return 0;
}
```