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

```asm
<sobel_h>:
  endbr64
  push   %r15
  mov    %rcx,%r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %rcx,%rdi
  sub    $0x48,%rsp
  mov    (%rdx),%edx
  mov    (%rsi),%esi
  mov    %rcx,(%rsp)
  call   <clearFrame@plt>
  mov    0x0(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,0x1c(%rsp)
  cmp    $0x1,%eax
  jle    L79
  mov    (%r12),%esi
  mov    %esi,0x14(%rsp)
  cmp    $0x2,%esi
  jle    L79
  movslq %esi,%rax
  lea    -0x2(%rsi),%edi
  movq   D11(%rip),%xmm1
  movl   $0x1,0x10(%rsp)
  shl    $0x3,%rax
  mov    %edi,%r8d
  mov    %edi,0x34(%rsp)
  mov    %rbx,%r10
  add    %rax,%r15
  mov    %rax,0x20(%rsp)
  lea    (%rsi,%rsi,1),%eax
  and    $0xfffffffe,%r8d
  mov    %eax,0x30(%rsp)
  cltq
  lea    0x2(%r8),%r9d
  movapd %xmm1,%xmm3
  lea    (%rbx,%rax,8),%r11
  mov    %edi,%eax
  mov    %r15,0x8(%rsp)
  movapd D4(%rip),%xmm2
  shr    %eax
  or     $0x1,%edi
  sub    $0x1,%eax
  add    $0x1,%rax
  shl    $0x4,%rax
  mov    %rax,0x28(%rsp)
  lea    -0x3(%rsi),%eax
  lea    0x8(,%rax,8),%rax
  mov    %rax,0x38(%rsp)
  nopl   0x0(%rax,%rax,1)
L0:
  mov    0x30(%rsp),%eax
  mov    %esi,%edx
  sub    0x14(%rsp),%edx
  mov    %esi,%ecx
  lea    0x8(%r11),%r12
  addl   $0x1,0x10(%rsp)
  lea    0x8(%r10),%r13
  lea    (%rax,%rdx,1),%esi
  mov    0x8(%rsp),%rax
  lea    0x8(%rax),%rbp
  mov    %rbp,%rax
  sub    %r12,%rax
  cmp    $0x10,%rax
  mov    %rbp,%rax
  seta   %r14b
  sub    %r13,%rax
  cmp    $0x10,%rax
  seta   %al
  test   %al,%r14b
  je     L73
  xor    %eax,%eax
  lea    0x10(%r10),%r15
  lea    0x10(%r11),%r14
  cmpl   $0x3,0x14(%rsp)
  je     L73
  mov    %edx,0x18(%rsp)
  mov    0x28(%rsp),%rdx
  nopw   0x0(%rax,%rax,1)
L80:
  movupd 0x0(%r13,%rax,1),%xmm4
  movupd (%r10,%rax,1),%xmm0
  movupd (%r15,%rax,1),%xmm6
  movupd (%r11,%rax,1),%xmm7
  addpd  %xmm4,%xmm4
  xorpd  %xmm2,%xmm0
  subpd  %xmm4,%xmm0
  movupd (%r12,%rax,1),%xmm4
  addpd  %xmm4,%xmm4
  subpd  %xmm6,%xmm0
  movupd (%r14,%rax,1),%xmm6
  addpd  %xmm7,%xmm0
  addpd  %xmm4,%xmm0
  addpd  %xmm6,%xmm0
  movups %xmm0,0x0(%rbp,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L80
  mov    0x18(%rsp),%edx
  cmp    %r8d,0x34(%rsp)
  je     L45
  lea    (%rdx,%r8,1),%eax
  add    %edi,%ecx
  cltq
  movslq %ecx,%rcx
  movsd  (%rbx,%rax,8),%xmm0
  lea    (%rdx,%rdi,1),%eax
  add    %r9d,%edx
  cltq
  movslq %edx,%rdx
  movsd  (%rbx,%rax,8),%xmm4
  lea    (%rsi,%r8,1),%eax
  xorpd  %xmm1,%xmm0
  cltq
  addsd  %xmm4,%xmm4
  subsd  %xmm4,%xmm0
  subsd  (%rbx,%rdx,8),%xmm0
  addsd  (%rbx,%rax,8),%xmm0
  lea    (%rsi,%rdi,1),%eax
  cltq
  movsd  (%rbx,%rax,8),%xmm4
  lea    (%r9,%rsi,1),%eax
  cltq
  addsd  %xmm4,%xmm4
  addsd  %xmm4,%xmm0
  addsd  (%rbx,%rax,8),%xmm0
  mov    (%rsp),%rax
  movsd  %xmm0,(%rax,%rcx,8)
L45:
  mov    0x20(%rsp),%rax
  mov    0x10(%rsp),%ecx
  add    %rax,0x8(%rsp)
  add    %rax,%r10
  add    %rax,%r11
  cmp    %ecx,0x1c(%rsp)
  jne    L0
L79:
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L73:
  mov    0x38(%rsp),%rax
  mov    0x8(%rsp),%rcx
  mov    %r11,%rdx
  lea    (%rax,%r10,1),%rbp
  mov    %r10,%rax
  nopl   0x0(%rax)
L89:
  movsd  (%rax),%xmm0
  add    $0x8,%rax
  movsd  (%rax),%xmm4
  add    $0x8,%rdx
  add    $0x8,%rcx
  addsd  %xmm4,%xmm4
  xorpd  %xmm3,%xmm0
  subsd  %xmm4,%xmm0
  movsd  (%rdx),%xmm4
  subsd  0x8(%rax),%xmm0
  addsd  -0x8(%rdx),%xmm0
  addsd  %xmm4,%xmm4
  addsd  %xmm4,%xmm0
  addsd  0x8(%rdx),%xmm0
  movsd  %xmm0,(%rcx)
  cmp    %rbp,%rax
  jne    L89
  jmp    L45
```

tool_calls: name: disassemble_data
arguments: label: D11
type_infered: byte[8]
name: disassemble_data
arguments: label: D4
type_infered: byte[16]

tool: {"D11": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

tool: {"D4": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

assistant: ```c
void sobel_h(double *img, int *w, int *h, double *eimg) {
  int i, j;
  clearFrame(eimg, *w, *h);
  for (i = 1; i < *w - 1; i++) {
    for (j = 1; j < *h - 1; j++) {
      eimg[*h * i + j] = -img[*h * (i - 1) + (j - 1)] - 2.0 * img[*h * (i - 1) + j] - img[*h * (i - 1) + (j + 1)] + img[*h * (i + 1) + (j - 1)] + 2.0 * img[*h * (i + 1) + j] + img[*h * (i + 1) + (j + 1)];
    }
  }
}
```