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

```asm
<IVenDiagonal>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,%eax
  mov    %al,-0x1c(%rbp)
  movl   $0x0,-0x8(%rbp)
  jmp    L156
L143:
  movl   $0x0,-0x4(%rbp)
  jmp    L54
L129:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x18(%rbp),%rax
  lea    (%rcx,%rax,1),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x1c(%rbp)
  jne    L62
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x18(%rbp),%rax
  lea    (%rcx,%rax,1),%rdx
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x1c(%rbp)
  jne    L62
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  lea    0xe(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x1c(%rbp)
  jne    L62
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  lea    0x15(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  add    $0x3,%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x1c(%rbp)
  jne    L62
  mov    $0x1,%eax
  jmp    L26
L62:
  addl   $0x1,-0x4(%rbp)
L54:
  cmpl   $0x3,-0x4(%rbp)
  jle    L129
  addl   $0x1,-0x8(%rbp)
L156:
  cmpl   $0x2,-0x8(%rbp)
  jle    L143
  movl   $0x3,-0x8(%rbp)
  jmp    L51
L17:
  movl   $0x0,-0x4(%rbp)
  jmp    L163
L22:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x18(%rbp),%rax
  lea    (%rcx,%rax,1),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x1c(%rbp)
  jne    L29
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  lea    -0x7(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x1c(%rbp)
  jne    L29
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  lea    -0xe(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x1c(%rbp)
  jne    L29
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  lea    -0x15(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  add    $0x3,%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x1c(%rbp)
  jne    L29
  mov    $0x1,%eax
  jmp    L26
L29:
  addl   $0x1,-0x4(%rbp)
L163:
  cmpl   $0x3,-0x4(%rbp)
  jle    L22
  addl   $0x1,-0x8(%rbp)
L51:
  cmpl   $0x5,-0x8(%rbp)
  jle    L17
  mov    $0x0,%eax
L26:
  pop    %rbp
  ret
```

assistant: ```c
int IVenDiagonal(char tauler[6][7], char jugador) {
  int i, j;
  for (i = 0; i < 6 - 3; i++)
    for (j = 0; j < 7 - 3; j++)
      if (tauler[i][j] == jugador && tauler[i + 1][j + 1] == jugador && tauler[i + 2][j + 2] == jugador && tauler[i + 3][j + 3] == jugador)
        return 1;
  for (i = 3; i < 6; i++)
    for (j = 0; j < 7 - 3; j++)
      if (tauler[i][j] == jugador && tauler[i - 1][j + 1] == jugador && tauler[i - 2][j + 2] == jugador && tauler[i - 3][j + 3] == jugador)
        return 1;
  return 0;
}
```