user: 请将以下的汇编代码转换成C语言代码:

```asm
<convolve_kernel>:
  endbr64
  mov    %edx,%ecx
  test   %edx,%edx
  jle    L20
  lea    -0x1(%rdx),%eax
  cmp    $0xe,%eax
  jbe    L177
  mov    %ecx,%r8d
  mov    %rdi,%rdx
  pxor   %xmm2,%xmm2
  mov    %rsi,%rax
  shr    $0x4,%r8d
  pxor   %xmm4,%xmm4
  pxor   %xmm3,%xmm3
  sub    $0x1,%r8d
  shl    $0x4,%r8
  lea    0x10(%rdi,%r8,1),%r8
L45:
  movdqu (%rdx),%xmm0
  movdqu (%rax),%xmm6
  add    $0x10,%rdx
  add    $0x40,%rax
  movdqu -0x40(%rax),%xmm7
  movdqa %xmm0,%xmm1
  punpckhbw %xmm4,%xmm0
  punpcklbw %xmm4,%xmm1
  psrlq  $0x20,%xmm7
  movdqa %xmm1,%xmm5
  punpckhwd %xmm3,%xmm1
  punpcklwd %xmm3,%xmm5
  pmuludq %xmm5,%xmm6
  psrlq  $0x20,%xmm5
  pmuludq %xmm7,%xmm5
  pshufd $0x8,%xmm6,%xmm6
  pshufd $0x8,%xmm5,%xmm5
  punpckldq %xmm5,%xmm6
  movdqu -0x30(%rax),%xmm5
  paddd  %xmm6,%xmm2
  movdqu -0x30(%rax),%xmm6
  pmuludq %xmm1,%xmm5
  psrlq  $0x20,%xmm1
  psrlq  $0x20,%xmm6
  pmuludq %xmm6,%xmm1
  movdqu -0x20(%rax),%xmm6
  psrlq  $0x20,%xmm6
  pshufd $0x8,%xmm5,%xmm5
  pshufd $0x8,%xmm1,%xmm1
  punpckldq %xmm1,%xmm5
  movdqa %xmm0,%xmm1
  punpckhwd %xmm3,%xmm0
  paddd  %xmm2,%xmm5
  movdqu -0x20(%rax),%xmm2
  punpcklwd %xmm3,%xmm1
  pmuludq %xmm1,%xmm2
  psrlq  $0x20,%xmm1
  pmuludq %xmm6,%xmm1
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm1,%xmm1
  punpckldq %xmm1,%xmm2
  paddd  %xmm5,%xmm2
  movdqu -0x10(%rax),%xmm5
  movdqa %xmm2,%xmm1
  movdqu -0x10(%rax),%xmm2
  psrlq  $0x20,%xmm5
  pmuludq %xmm0,%xmm2
  psrlq  $0x20,%xmm0
  pmuludq %xmm5,%xmm0
  pshufd $0x8,%xmm2,%xmm2
  pshufd $0x8,%xmm0,%xmm0
  punpckldq %xmm0,%xmm2
  paddd  %xmm1,%xmm2
  cmp    %r8,%rdx
  jne    L45
  movdqa %xmm2,%xmm0
  mov    %ecx,%edx
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%edx
  paddd  %xmm0,%xmm2
  movdqa %xmm2,%xmm0
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm2
  movd   %xmm2,%eax
  test   $0xf,%cl
  je     L137
L143:
  movslq %edx,%r10
  movzbl (%rdi,%r10,1),%r9d
  imul   (%rsi,%r10,4),%r9d
  lea    0x0(,%r10,4),%r8
  add    %r9d,%eax
  lea    0x1(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x4(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0x2(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x8(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0x3(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0xc(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0x4(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x10(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0x5(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x14(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0x6(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x18(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0x7(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x1c(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0x8(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x20(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0x9(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x24(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0xa(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x28(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0xb(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x2c(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0xc(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  movzbl (%rdi,%r9,1),%r9d
  imul   0x30(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  lea    0xd(%rdx),%r9d
  cmp    %r9d,%ecx
  jle    L178
  movslq %r9d,%r9
  add    $0xe,%edx
  movzbl (%rdi,%r9,1),%r9d
  imul   0x34(%rsi,%r8,1),%r9d
  add    %r9d,%eax
  cmp    %edx,%ecx
  jle    L178
  movslq %edx,%rdx
  movzbl (%rdi,%rdx,1),%edx
  imul   0x38(%rsi,%r8,1),%edx
  add    %edx,%eax
  ret
  nopl   (%rax)
L20:
  xor    %eax,%eax
L178:
  ret
L177:
  xor    %eax,%eax
  xor    %edx,%edx
  jmp    L143
L137:
  ret
```

assistant: ```c
int convolve_kernel(unsigned char *px, int *kernel, int size) {
  int i;
  int sum = 0;
  for (i = 0; i < size; i++) {
    sum += px[i] * kernel[i];
  }
  return sum;
}
```