user: Please show me the C implementation that matches the assembly code listed below:

```asm
<edit_array>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %rdi,0x38(%rsp)
  mov    %rsi,0x18(%rsp)
  test   %rsi,%rsi
  je     L46
  mov    %rdx,%rax
  mov    %rdx,%r15
  sub    $0x1,%rax
  js     L0
  pxor   %xmm7,%xmm7
  mov    %rdi,%r9
  cvtsi2ss %rax,%xmm7
  movss  %xmm7,0x20(%rsp)
L33:
  mov    0x18(%rsp),%rdi
  mov    %r15,%rsi
  mov    %r15,%r12
  mov    %rdi,%rbp
  mov    %rdi,%r13
  shl    $0x2,%rbp
  setne  %r14b
  cmp    $0x5,%rax
  seta   %al
  and    $0xfffffffffffffffc,%rsi
  shr    $0x2,%r12
  and    %eax,%r14d
  mov    %rdi,%rax
  lea    0x1(%rsi),%rcx
  mov    %rsi,0x28(%rsp)
  lea    0x0(,%rdi,8),%rdi
  mov    %rcx,0x48(%rsp)
  shl    $0x4,%r13
  mov    %rdi,0x30(%rsp)
  mov    %rax,%rdi
  imul   %rsi,%rdi
  add    $0x2,%rsi
  mov    %r14b,0x27(%rsp)
  xor    %r14d,%r14d
  mov    %rsi,0x58(%rsp)
  mov    %rdi,0x40(%rsp)
  add    %rax,%rdi
  add    %rdi,%rax
  mov    %rdi,0x50(%rsp)
  mov    %r15,%rdi
  mov    %rax,0x60(%rsp)
  mov    %r15,%rax
  mov    %r14,%r15
  mov    %r12,%r14
  and    $0x1,%eax
  mov    %r9,%r12
  mov    %rax,0x68(%rsp)
  nopl   0x0(%rax,%rax,1)
L77:
  mov    %r12,%rax
  pxor   %xmm2,%xmm2
  xor    %ebx,%ebx
  test   %rdi,%rdi
  je     L89
  nopw   0x0(%rax,%rax,1)
L20:
  mov    %rbx,%rcx
  add    $0x1,%rbx
  addss  (%rax),%xmm2
  add    %rbp,%rax
  cmp    %rbx,%rdi
  jne    L20
  test   %rdi,%rdi
  js     L72
  pxor   %xmm1,%xmm1
  cvtsi2ss %rdi,%xmm1
L141:
  divss  %xmm1,%xmm2
  mov    %r12,%rdx
  pxor   %xmm1,%xmm1
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L159:
  movaps %xmm2,%xmm0
  subss  (%rdx),%xmm0
  mov    %rax,%rsi
  add    %rbp,%rdx
  add    $0x1,%rax
  mulss  %xmm0,%xmm0
  addss  %xmm0,%xmm1
  cmp    %rcx,%rsi
  jne    L159
  divss  0x20(%rsp),%xmm1
  movaps %xmm1,%xmm0
  mov    %rdi,0x10(%rsp)
  mov    %rcx,0x8(%rsp)
  movss  %xmm2,(%rsp)
  call   <sqrt@plt>
  xor    %edx,%edx
  cmpb   $0x0,0x27(%rsp)
  mov    %r12,%rax
  movss  (%rsp),%xmm2
  mov    0x8(%rsp),%rcx
  movaps %xmm0,%xmm4
  mov    0x10(%rsp),%rdi
  je     L145
  mov    0x30(%rsp),%rax
  movaps %xmm2,%xmm6
  movaps %xmm4,%xmm5
  xor    %ecx,%ecx
  shufps $0x0,%xmm6,%xmm6
  shufps $0x0,%xmm5,%xmm5
  lea    (%rax,%r12,1),%rdx
  mov    %r12,%rax
  nopl   0x0(%rax)
L56:
  movss  (%rdx,%rbp,1),%xmm0
  movss  (%rdx),%xmm1
  add    $0x1,%rcx
  movss  (%rax,%rbp,1),%xmm3
  unpcklps %xmm0,%xmm1
  movss  (%rax),%xmm0
  unpcklps %xmm3,%xmm0
  movlhps %xmm1,%xmm0
  subps  %xmm6,%xmm0
  divps  %xmm5,%xmm0
  movaps %xmm0,%xmm1
  movss  %xmm0,(%rax)
  shufps $0x55,%xmm0,%xmm1
  movss  %xmm1,(%rax,%rbp,1)
  movaps %xmm0,%xmm1
  add    %r13,%rax
  unpckhps %xmm0,%xmm1
  shufps $0xff,%xmm0,%xmm0
  movss  %xmm1,(%rdx)
  movss  %xmm0,(%rdx,%rbp,1)
  add    %r13,%rdx
  cmp    %rcx,%r14
  jne    L56
  cmp    0x28(%rsp),%rbx
  je     L4
  mov    0x40(%rsp),%rax
  mov    0x38(%rsp),%rsi
  add    %r15,%rax
  lea    (%rsi,%rax,4),%rax
  movss  (%rax),%xmm0
  subss  %xmm2,%xmm0
  divss  %xmm4,%xmm0
  movss  %xmm0,(%rax)
  cmp    %rbx,0x48(%rsp)
  jae    L4
  mov    0x50(%rsp),%rax
  add    %r15,%rax
  lea    (%rsi,%rax,4),%rax
  movss  (%rax),%xmm0
  subss  %xmm2,%xmm0
  divss  %xmm4,%xmm0
  movss  %xmm0,(%rax)
  cmp    0x58(%rsp),%rbx
  jbe    L4
  mov    0x60(%rsp),%rax
  add    %r15,%rax
  lea    (%rsi,%rax,4),%rax
  movss  (%rax),%xmm0
  subss  %xmm2,%xmm0
  divss  %xmm4,%xmm0
  movss  %xmm0,(%rax)
L4:
  add    $0x1,%r15
  add    $0x4,%r12
  cmp    %r15,0x18(%rsp)
  jne    L77
L46:
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L145:
  movss  (%rax),%xmm0
  mov    %rdx,%rsi
  add    $0x1,%rdx
  subss  %xmm2,%xmm0
  divss  %xmm4,%xmm0
  movss  %xmm0,(%rax)
  add    %rbp,%rax
  cmp    %rsi,%rcx
  jne    L145
  jmp    L4
  nopl   0x0(%rax)
L72:
  mov    %rdi,%rax
  pxor   %xmm1,%xmm1
  shr    %rax
  or     0x68(%rsp),%rax
  cvtsi2ss %rax,%xmm1
  addss  %xmm1,%xmm1
  jmp    L141
  nopl   (%rax)
L89:
  mov    %rdi,(%rsp)
  pxor   %xmm0,%xmm0
  divss  0x20(%rsp),%xmm0
  call   <sqrt@plt>
  mov    (%rsp),%rdi
  jmp    L4
L0:
  mov    %rax,%rdx
  mov    %rax,%rcx
  pxor   %xmm0,%xmm0
  mov    %rdi,%r9
  shr    %rdx
  and    $0x1,%ecx
  or     %rcx,%rdx
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
  movss  %xmm0,0x20(%rsp)
  jmp    L33
```

assistant: ```c
void edit_array(float *A, size_t width, size_t height) {
  size_t register i, j;
  float std;
  float sum, mean, var, max;
  for (j = 0; j < width; ++j) {
    sum = 0;
    mean = 0;
    var = 0, max = -1;
    for (i = 0; i < height; ++i) {
      sum = sum + A[i * width + j];
      if (A[i * width + j] > max) {
        max = A[i * width + j];
      }
    }
    mean = sum / (height);
    for (i = 0; i < height; ++i)
      var = var + (mean - A[i * width + j]) * (mean - A[i * width + j]);
    var = var / (height - 1);
    std = (sqrt(var));
    for (i = 0; i < height; ++i) {
      A[i * width + j] = (A[i * width + j] - mean) / std;
    }
  }
  return;
}
```