user: Demonstrate the C code that generates the assembly output below:

```asm
<main>:
  endbr64
  push   %rbx
  lea    -0x20000(%rsp),%r11
L80:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L80
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x20018(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%rdi
  nopw   0x0(%rax,%rax,1)
L86:
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,(%rdi,%rax,4)
  add    $0x1,%rax
  cmp    $0x8000,%rax
  jne    L86
  lea    0x1010(%rsp),%rcx
  pxor   %xmm1,%xmm1
  lea    0xc(%rsp),%rdx
  lea    0x2000c(%rsp),%r9
  mov    %rcx,%rsi
  movaps %xmm1,%xmm2
L30:
  lea    0x4(%rdx),%rax
  nopl   0x0(%rax)
L60:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  addss  %xmm0,%xmm2
  maxss  %xmm1,%xmm0
  movaps %xmm0,%xmm1
  cmp    %rsi,%rax
  jne    L60
  lea    0x1000(%rdx),%r8
  mov    %r8,%rax
  nopw   0x0(%rax,%rax,1)
L26:
  movss  (%rax),%xmm0
  sub    $0x4,%rax
  addss  %xmm0,%xmm2
  maxss  %xmm1,%xmm0
  movaps %xmm0,%xmm1
  cmp    %rdx,%rax
  jne    L26
  add    $0x1000,%rsi
  cmp    %r8,%r9
  je     L0
  mov    %r8,%rdx
  jmp    L30
L0:
  pxor   %xmm0,%xmm0
  add    $0x21000,%rdi
  movaps %xmm0,%xmm3
L38:
  lea    -0x1000(%rcx),%rax
  lea    -0x4(%rcx),%rdx
  nopw   0x0(%rax,%rax,1)
L45:
  movss  (%rax),%xmm5
  movss  (%rdx),%xmm4
  add    $0x4,%rax
  sub    $0x4,%rdx
  addss  %xmm5,%xmm3
  maxss  %xmm0,%xmm5
  addss  %xmm4,%xmm3
  maxss  %xmm5,%xmm4
  movaps %xmm4,%xmm0
  cmp    %rax,%rcx
  jne    L45
  add    $0x1000,%rcx
  cmp    %rcx,%rdi
  jne    L38
  xor    %edi,%edi
  ucomiss %xmm2,%xmm3
  mov    $0x0,%ebx
  movss  %xmm1,0x8(%rsp)
  movss  %xmm4,0xc(%rsp)
  setnp  %dil
  cmovne %ebx,%edi
  call   <assert@plt>
  movss  0x8(%rsp),%xmm1
  movss  0xc(%rsp),%xmm0
  xor    %edi,%edi
  ucomiss %xmm0,%xmm1
  setnp  %dil
  cmovne %ebx,%edi
  call   <assert@plt>
  mov    0x20018(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  add    $0x20020,%rsp
  xor    %eax,%eax
  pop    %rbx
  ret
L9:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int main(int argc, char *argv[]) {
  int i, j;
  float arr[32768];
  float res = 0, mres = 0, hres = 0, hmres = 0;
  for (i = 0; i < 32768; i++)
    arr[i] = i;
#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) reduction(+ : res) reduction(max : mres) copy(res, mres)
  {
#pragma acc loop gang
    for (j = 0; j < 32; j++) {
#pragma acc loop worker vector reduction(+ : res) reduction(max : mres)
      for (i = 0; i < 1024; i++) {
        res += arr[j * 1024 + i];
        if (arr[j * 1024 + i] > mres)
          mres = arr[j * 1024 + i];
      }
#pragma acc loop worker vector reduction(+ : res) reduction(max : mres)
      for (i = 0; i < 1024; i++) {
        res += arr[j * 1024 + (1023 - i)];
        if (arr[j * 1024 + (1023 - i)] > mres)
          mres = arr[j * 1024 + (1023 - i)];
      }
    }
  }
  for (j = 0; j < 32; j++)
    for (i = 0; i < 1024; i++) {
      hres += arr[j * 1024 + i];
      hres += arr[j * 1024 + (1023 - i)];
      if (arr[j * 1024 + i] > hmres)
        hmres = arr[j * 1024 + i];
      if (arr[j * 1024 + (1023 - i)] > hmres)
        hmres = arr[j * 1024 + (1023 - i)];
    }
  assert(res == hres);
  assert(mres == hmres);
  return 0;
}
```