user: 下面的汇编指令对应的C源代码是什么:

```asm
<test_reductions>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0xc8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    %rsp,%rax
  mov    %rax,%rbx
  movl   $0xa,-0x2c(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  sub    $0x1,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  mov    %rax,%r8
  mov    $0x0,%r9d
  mov    -0x2c(%rbp),%eax
  cltq
  mov    %rax,%rsi
  mov    $0x0,%edi
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%edi
  mov    $0x0,%edx
  div    %rdi
  imul   $0x10,%rax,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L186:
  cmp    %rdx,%rsp
  je     L349
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L186
L349:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L638
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L638:
  mov    %rsp,%rax
  add    $0x3,%rax
  shr    $0x2,%rax
  shl    $0x2,%rax
  mov    %rax,-0x20(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L168
L235:
  mov    -0xd0(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0xd0(%rbp)
L168:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L235
  movl   $0x0,-0xcc(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L881
L124:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  add    %eax,-0xcc(%rbp)
  addl   $0x1,-0xd0(%rbp)
L881:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L124
  movl   $0x0,-0xc8(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L947
L273:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  add    %eax,-0xc8(%rbp)
  addl   $0x1,-0xd0(%rbp)
L947:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L273
  mov    -0xcc(%rbp),%eax
  cmp    -0xc8(%rbp),%eax
  je     L454
  mov    $0x0,%eax
  call   <abort@plt>
L454:
  movl   $0x1,-0xc4(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L1058
L472:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  mov    -0xc4(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0xc4(%rbp)
  addl   $0x1,-0xd0(%rbp)
L1058:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L472
  movl   $0x1,-0xc0(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L364
L905:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  mov    -0xc0(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0xc0(%rbp)
  addl   $0x1,-0xd0(%rbp)
L364:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L905
  mov    -0xc4(%rbp),%eax
  cmp    -0xc0(%rbp),%eax
  je     L886
  mov    $0x0,%eax
  call   <abort@plt>
L886:
  movl   $0xffffffff,-0xbc(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L119
L940:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  and    %eax,-0xbc(%rbp)
  addl   $0x1,-0xd0(%rbp)
L119:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L940
  movl   $0xffffffff,-0xb8(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L199
L757:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  and    %eax,-0xb8(%rbp)
  addl   $0x1,-0xd0(%rbp)
L199:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L757
  mov    -0xbc(%rbp),%eax
  cmp    -0xb8(%rbp),%eax
  je     L301
  mov    $0x0,%eax
  call   <abort@plt>
L301:
  movl   $0x0,-0xb4(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L924
L1029:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  or     %eax,-0xb4(%rbp)
  addl   $0x1,-0xd0(%rbp)
L924:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L1029
  movl   $0x0,-0xb0(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L892
L584:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  or     %eax,-0xb0(%rbp)
  addl   $0x1,-0xd0(%rbp)
L892:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L584
  mov    -0xb4(%rbp),%eax
  cmp    -0xb0(%rbp),%eax
  je     L85
  mov    $0x0,%eax
  call   <abort@plt>
L85:
  movl   $0x0,-0xac(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L157
L755:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  xor    %eax,-0xac(%rbp)
  addl   $0x1,-0xd0(%rbp)
L157:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L755
  movl   $0x0,-0xa8(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L461
L885:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  xor    %eax,-0xa8(%rbp)
  addl   $0x1,-0xd0(%rbp)
L461:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L885
  mov    -0xac(%rbp),%eax
  cmp    -0xa8(%rbp),%eax
  je     L60
  mov    $0x0,%eax
  call   <abort@plt>
L60:
  movl   $0x0,-0xa4(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L225
L152:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  add    %eax,-0xa4(%rbp)
  addl   $0x1,-0xd0(%rbp)
L225:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L152
  movl   $0x0,-0xa0(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L538
L1057:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  add    %eax,-0xa0(%rbp)
  addl   $0x1,-0xd0(%rbp)
L538:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L1057
  mov    -0xa4(%rbp),%eax
  cmp    -0xa0(%rbp),%eax
  je     L616
  mov    $0x0,%eax
  call   <abort@plt>
L616:
  movl   $0x1,-0x9c(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L656
L786:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  mov    -0x9c(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x9c(%rbp)
  addl   $0x1,-0xd0(%rbp)
L656:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L786
  movl   $0x1,-0x98(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L908
L826:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  mov    -0x98(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x98(%rbp)
  addl   $0x1,-0xd0(%rbp)
L908:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L826
  mov    -0x9c(%rbp),%eax
  cmp    -0x98(%rbp),%eax
  je     L423
  mov    $0x0,%eax
  call   <abort@plt>
L423:
  movl   $0xffffffff,-0x94(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L444
L339:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  and    %eax,-0x94(%rbp)
  addl   $0x1,-0xd0(%rbp)
L444:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L339
  movl   $0xffffffff,-0x90(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L766
L1032:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  and    %eax,-0x90(%rbp)
  addl   $0x1,-0xd0(%rbp)
L766:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L1032
  mov    -0x94(%rbp),%eax
  cmp    -0x90(%rbp),%eax
  je     L336
  mov    $0x0,%eax
  call   <abort@plt>
L336:
  movl   $0x0,-0x8c(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L801
L776:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  or     %eax,-0x8c(%rbp)
  addl   $0x1,-0xd0(%rbp)
L801:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L776
  movl   $0x0,-0x88(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L956
L0:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  or     %eax,-0x88(%rbp)
  addl   $0x1,-0xd0(%rbp)
L956:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L0
  mov    -0x8c(%rbp),%eax
  cmp    -0x88(%rbp),%eax
  je     L319
  mov    $0x0,%eax
  call   <abort@plt>
L319:
  movl   $0x0,-0x84(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L613
L907:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  xor    %eax,-0x84(%rbp)
  addl   $0x1,-0xd0(%rbp)
L613:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L907
  movl   $0x0,-0x80(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L625
L300:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  xor    %eax,-0x80(%rbp)
  addl   $0x1,-0xd0(%rbp)
L625:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L300
  mov    -0x84(%rbp),%eax
  cmp    -0x80(%rbp),%eax
  je     L220
  mov    $0x0,%eax
  call   <abort@plt>
L220:
  movl   $0x0,-0x7c(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L958
L206:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  add    %eax,-0x7c(%rbp)
  addl   $0x1,-0xd0(%rbp)
L958:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L206
  movl   $0x0,-0x78(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L182
L846:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  add    %eax,-0x78(%rbp)
  addl   $0x1,-0xd0(%rbp)
L182:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L846
  mov    -0x7c(%rbp),%eax
  cmp    -0x78(%rbp),%eax
  je     L646
  mov    $0x0,%eax
  call   <abort@plt>
L646:
  movl   $0x1,-0x74(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L404
L25:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  mov    -0x74(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x74(%rbp)
  addl   $0x1,-0xd0(%rbp)
L404:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L25
  movl   $0x1,-0x70(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L768
L544:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  mov    -0x70(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x70(%rbp)
  addl   $0x1,-0xd0(%rbp)
L768:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L544
  mov    -0x74(%rbp),%eax
  cmp    -0x70(%rbp),%eax
  je     L522
  mov    $0x0,%eax
  call   <abort@plt>
L522:
  movl   $0xffffffff,-0x6c(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L525
L957:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  and    %eax,-0x6c(%rbp)
  addl   $0x1,-0xd0(%rbp)
L525:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L957
  movl   $0xffffffff,-0x68(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L536
L30:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  and    %eax,-0x68(%rbp)
  addl   $0x1,-0xd0(%rbp)
L536:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L30
  mov    -0x6c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  je     L381
  mov    $0x0,%eax
  call   <abort@plt>
L381:
  movl   $0x0,-0x64(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L1039
L514:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  or     %eax,-0x64(%rbp)
  addl   $0x1,-0xd0(%rbp)
L1039:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L514
  movl   $0x0,-0x60(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L141
L974:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  or     %eax,-0x60(%rbp)
  addl   $0x1,-0xd0(%rbp)
L141:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L974
  mov    -0x64(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  je     L120
  mov    $0x0,%eax
  call   <abort@plt>
L120:
  movl   $0x0,-0x5c(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L543
L990:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  xor    %eax,-0x5c(%rbp)
  addl   $0x1,-0xd0(%rbp)
L543:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L990
  movl   $0x0,-0x58(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L592
L813:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  xor    %eax,-0x58(%rbp)
  addl   $0x1,-0xd0(%rbp)
L592:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L813
  mov    -0x5c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  je     L131
  mov    $0x0,%eax
  call   <abort@plt>
L131:
  movl   $0x0,-0x54(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L386
L345:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  add    %eax,-0x54(%rbp)
  addl   $0x1,-0xd0(%rbp)
L386:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L345
  movl   $0x0,-0x50(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L963
L269:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  add    %eax,-0x50(%rbp)
  addl   $0x1,-0xd0(%rbp)
L963:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L269
  mov    -0x54(%rbp),%eax
  cmp    -0x50(%rbp),%eax
  je     L828
  mov    $0x0,%eax
  call   <abort@plt>
L828:
  movl   $0x1,-0x4c(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L789
L553:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  mov    -0x4c(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x4c(%rbp)
  addl   $0x1,-0xd0(%rbp)
L789:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L553
  movl   $0x1,-0x48(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L716
L31:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  mov    -0x48(%rbp),%edx
  imul   %edx,%eax
  mov    %eax,-0x48(%rbp)
  addl   $0x1,-0xd0(%rbp)
L716:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L31
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  je     L42
  mov    $0x0,%eax
  call   <abort@plt>
L42:
  movl   $0xffffffff,-0x44(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L932
L583:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  and    %eax,-0x44(%rbp)
  addl   $0x1,-0xd0(%rbp)
L932:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L583
  movl   $0xffffffff,-0x40(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L34
L609:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  and    %eax,-0x40(%rbp)
  addl   $0x1,-0xd0(%rbp)
L34:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L609
  mov    -0x44(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  je     L27
  mov    $0x0,%eax
  call   <abort@plt>
L27:
  movl   $0x0,-0x3c(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L851
L264:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  or     %eax,-0x3c(%rbp)
  addl   $0x1,-0xd0(%rbp)
L851:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L264
  movl   $0x0,-0x38(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L393
L720:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  or     %eax,-0x38(%rbp)
  addl   $0x1,-0xd0(%rbp)
L393:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L720
  mov    -0x3c(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  je     L700
  mov    $0x0,%eax
  call   <abort@plt>
L700:
  movl   $0x0,-0x34(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L499
L619:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  xor    %eax,-0x34(%rbp)
  addl   $0x1,-0xd0(%rbp)
L499:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L619
  movl   $0x0,-0x30(%rbp)
  movl   $0x0,-0xd0(%rbp)
  jmp    L313
L772:
  mov    -0x20(%rbp),%rax
  mov    -0xd0(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%eax
  xor    %eax,-0x30(%rbp)
  addl   $0x1,-0xd0(%rbp)
L313:
  mov    -0xd0(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L772
  mov    -0x34(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  je     L145
  mov    $0x0,%eax
  call   <abort@plt>
L145:
  mov    %rbx,%rsp
  nop
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L991
  call   <__stack_chk_fail@plt>
L991:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void test_reductions(void) {
  const int n = 10;
  int i;
  int array[n];
  for (i = 0; i < n; i++)
    array[i] = i + 1;
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(+ : res)
    for (i = 0; i < n; i++)
      res = res + (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres + (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (1);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(* : res)
    for (i = 0; i < n; i++)
      res = res * (array[i]);
    vres = (1);
    for (i = 0; i < n; i++)
      vres = vres * (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (-1);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(& : res)
    for (i = 0; i < n; i++)
      res = res & (array[i]);
    vres = (-1);
    for (i = 0; i < n; i++)
      vres = vres & (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(| : res)
    for (i = 0; i < n; i++)
      res = res | (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres | (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(^ : res)
    for (i = 0; i < n; i++)
      res = res ^ (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres ^ (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(+ : res)
    for (i = 0; i < n; i++)
      res = res + (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres + (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (1);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(* : res)
    for (i = 0; i < n; i++)
      res = res * (array[i]);
    vres = (1);
    for (i = 0; i < n; i++)
      vres = vres * (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (-1);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(& : res)
    for (i = 0; i < n; i++)
      res = res & (array[i]);
    vres = (-1);
    for (i = 0; i < n; i++)
      vres = vres & (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(| : res)
    for (i = 0; i < n; i++)
      res = res | (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres | (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(^ : res)
    for (i = 0; i < n; i++)
      res = res ^ (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres ^ (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(+ : res)
    for (i = 0; i < n; i++)
      res = res + (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres + (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (1);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(* : res)
    for (i = 0; i < n; i++)
      res = res * (array[i]);
    vres = (1);
    for (i = 0; i < n; i++)
      vres = vres * (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (-1);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(& : res)
    for (i = 0; i < n; i++)
      res = res & (array[i]);
    vres = (-1);
    for (i = 0; i < n; i++)
      vres = vres & (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(| : res)
    for (i = 0; i < n; i++)
      res = res | (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres | (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(^ : res)
    for (i = 0; i < n; i++)
      res = res ^ (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres ^ (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(+ : res)
    for (i = 0; i < n; i++)
      res = res + (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres + (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (1);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(* : res)
    for (i = 0; i < n; i++)
      res = res * (array[i]);
    vres = (1);
    for (i = 0; i < n; i++)
      vres = vres * (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (-1);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(& : res)
    for (i = 0; i < n; i++)
      res = res & (array[i]);
    vres = (-1);
    for (i = 0; i < n; i++)
      vres = vres & (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(| : res)
    for (i = 0; i < n; i++)
      res = res | (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres | (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(^ : res)
    for (i = 0; i < n; i++)
      res = res ^ (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres ^ (array[i]);
    if (res != vres)
      abort();
  };
}
```