user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<gwv_np_4>:
  endbr64
  push   %rbx
  lea    -0x20000(%rsp),%r11
L27:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L27
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x20018(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%rdi
  nopw   0x0(%rax,%rax,1)
L40:
  mov    %eax,%edx
  pxor   %xmm0,%xmm0
  and    $0x1ff,%edx
  cvtsi2ss %edx,%xmm0
  movss  %xmm0,(%rdi,%rax,4)
  add    $0x1,%rax
  cmp    $0x8000,%rax
  jne    L40
  lea    0x1010(%rsp),%rcx
  pxor   %xmm2,%xmm2
  lea    0xc(%rsp),%rdx
  lea    0x2000c(%rsp),%r9
  mov    %rcx,%rsi
  movaps %xmm2,%xmm3
L88:
  lea    0x4(%rdx),%rax
  nopl   0x0(%rax)
L89:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  addss  %xmm0,%xmm3
  maxss  %xmm2,%xmm0
  movaps %xmm0,%xmm2
  cmp    %rsi,%rax
  jne    L89
  lea    0x1000(%rdx),%r8
  mov    %r8,%rax
  nopw   0x0(%rax,%rax,1)
L32:
  movss  (%rax),%xmm0
  sub    $0x4,%rax
  addss  %xmm0,%xmm3
  maxss  %xmm2,%xmm0
  movaps %xmm0,%xmm2
  cmp    %rdx,%rax
  jne    L32
  add    $0x1000,%rsi
  cmp    %r8,%r9
  je     L17
  mov    %r8,%rdx
  jmp    L88
L17:
  pxor   %xmm0,%xmm0
  add    $0x21000,%rdi
  movaps %xmm0,%xmm1
L13:
  lea    -0x1000(%rcx),%rax
  lea    -0x4(%rcx),%rdx
  nopw   0x0(%rax,%rax,1)
L1:
  movss  (%rax),%xmm5
  movss  (%rdx),%xmm4
  add    $0x4,%rax
  sub    $0x4,%rdx
  addss  %xmm5,%xmm1
  maxss  %xmm0,%xmm5
  addss  %xmm4,%xmm1
  maxss  %xmm5,%xmm4
  movaps %xmm4,%xmm0
  cmp    %rax,%rcx
  jne    L1
  add    $0x1000,%rcx
  cmp    %rcx,%rdi
  jne    L13
  movss  D8(%rip),%xmm6
  movss  %xmm1,(%rsp)
  mov    $0x0,%ebx
  movss  %xmm2,0x4(%rsp)
  comiss %xmm1,%xmm6
  movss  %xmm4,0x8(%rsp)
  movss  %xmm3,0xc(%rsp)
  setae  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movss  (%rsp),%xmm1
  movss  0xc(%rsp),%xmm3
  xor    %edi,%edi
  ucomiss %xmm3,%xmm1
  setnp  %dil
  cmovne %ebx,%edi
  call   <assert@plt>
  movss  0x8(%rsp),%xmm0
  movss  D8(%rip),%xmm7
  comiss %xmm0,%xmm7
  movss  %xmm0,(%rsp)
  setae  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movss  (%rsp),%xmm0
  movss  0x4(%rsp),%xmm2
  mov    0x20018(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L81
  xor    %edi,%edi
  ucomiss %xmm0,%xmm2
  setnp  %dil
  cmovne %ebx,%edi
  add    $0x20020,%rsp
  pop    %rbx
  jmp    1070 <assert@plt>
L81:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D8
type_guessed: byte[4]

tool: {"D8": [0x00,0x00,0x80,0x4b]}

assistant: ```c
void gwv_np_4() {
  int i, j;
  float arr[32768];
  float res = 0, mres = 0, hres = 0, hmres = 0;
  for (i = 0; i < 32768; i++)
    arr[i] = i % (32768 / 64);
#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
  {
#pragma acc loop gang reduction(+ : res) reduction(max : mres)
    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(hres <= 16777216);
  assert(res == hres);
  assert(hmres <= 16777216);
  assert(mres == hmres);
}
```