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

```asm
<gameOfLife>:
  endbr64
  push   %r15
  test   %esi,%esi
  push   %r14
  sete   %al
  test   %edx,%edx
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,-0x10(%rsp)
  mov    %edx,%edi
  sete   %dl
  or     %dl,%al
  jne    L234
  mov    %esi,%r13d
  test   %esi,%esi
  jle    L234
  test   %edi,%edi
  jle    L234
  mov    -0x10(%rsp),%r12
  mov    $0xffffffff,%r14d
  xor    %ebx,%ebx
  nopw   0x0(%rax,%rax,1)
L311:
  mov    %r14d,%eax
  add    $0x1,%ebx
  mov    (%r12),%r9
  mov    $0xffffffff,%esi
  not    %eax
  mov    $0x4,%r8d
  shr    $0x1f,%eax
  cmp    %r14d,%r13d
  setg   %bpl
  xor    %edx,%edx
  xor    %ecx,%ecx
  and    %eax,%ebp
  nopw   0x0(%rax,%rax,1)
L35:
  add    $0x1,%ecx
  test   %bpl,%bpl
  jne    L195
  mov    %esi,%eax
  not    %eax
  shr    $0x1f,%eax
  cmp    %esi,%edi
  setg   %r11b
  and    %al,%r11b
  mov    $0x0,%eax
  jne    L165
  jmp    L25
  nopl   0x0(%rax)
L195:
  mov    -0x8(%r12),%r15
  mov    %esi,%r11d
  cmp    %esi,%edi
  jle    L180
  xor    $0xffffffff,%r11d
  jns    L38
  mov    -0x4(%r15,%rdx,1),%eax
  sub    $0x1,%eax
  cmp    $0x1,%eax
  setbe  %al
  movzbl %al,%eax
L146:
  mov    (%r15,%rdx,1),%r10d
  sub    $0x1,%r10d
  cmp    $0x2,%r10d
  adc    $0x0,%eax
  cmp    %edi,%ecx
  jge    L121
  mov    (%r15,%r8,1),%r10d
  sub    $0x1,%r10d
  cmp    $0x2,%r10d
  adc    $0x0,%eax
  shr    $0x1f,%r11d
  cmp    %edi,%esi
  mov    %r11d,%r10d
  setl   %r11b
  and    %r10b,%r11b
  je     L172
L165:
  mov    -0x4(%r9,%rdx,1),%r15d
  mov    $0x1,%r11d
  lea    -0x1(%r15),%r10d
  cmp    $0x2,%r10d
  adc    $0x0,%eax
L25:
  xor    %r15d,%r15d
  cmp    %edi,%ecx
  jge    L109
L172:
  mov    0x4(%r9,%rdx,1),%r10d
  mov    $0x1,%r15d
  sub    $0x1,%r10d
  cmp    $0x2,%r10d
  adc    $0x0,%eax
L109:
  cmp    %r13d,%ebx
  jge    L310
  test   %r11b,%r11b
  mov    0x8(%r12),%r11
  je     L91
  mov    -0x4(%r11,%rdx,1),%r10d
  sub    $0x1,%r10d
  cmp    $0x2,%r10d
  adc    $0x0,%eax
L91:
  mov    (%r11,%rdx,1),%r10d
  sub    $0x1,%r10d
  cmp    $0x2,%r10d
  adc    $0x0,%eax
  test   %r15b,%r15b
  je     L310
  mov    (%r11,%r8,1),%r10d
  sub    $0x1,%r10d
  cmp    $0x2,%r10d
  adc    $0x0,%eax
L310:
  mov    (%r9,%rdx,1),%r10d
  test   %r10d,%r10d
  je     L160
  sub    $0x2,%eax
  cmp    $0x1,%eax
  jbe    L319
  movl   $0x2,(%r9,%rdx,1)
L319:
  add    $0x4,%r8
  add    $0x4,%rdx
  add    $0x1,%esi
  cmp    %edi,%ecx
  jne    L35
  add    $0x1,%r14d
  add    $0x8,%r12
  cmp    %r13d,%ebx
  jne    L311
  mov    -0x10(%rsp),%rsi
  lea    -0x1(%rbx),%eax
  mov    %edi,%r8d
  lea    -0x1(%rdi),%r10d
  movdqa D6(%rip),%xmm2
  and    $0xfffffffc,%r8d
  lea    0x8(%rsi,%rax,8),%r11
  mov    %edi,%eax
  shr    $0x2,%eax
  lea    -0x1(%rax),%r9d
  add    $0x1,%r9
  shl    $0x4,%r9
  nopw   0x0(%rax,%rax,1)
L301:
  mov    (%rsi),%rcx
  mov    %rcx,%rax
  lea    (%r9,%rcx,1),%rdx
  cmp    $0x2,%r10d
  jbe    L48
  nopl   0x0(%rax)
L102:
  movdqu (%rax),%xmm0
  add    $0x10,%rax
  movdqa %xmm0,%xmm1
  psrld  $0x1f,%xmm1
  paddd  %xmm1,%xmm0
  pand   %xmm2,%xmm0
  psubd  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rax,%rdx
  jne    L102
  mov    %r8d,%ebx
  cmp    %edi,%r8d
  je     L207
L83:
  movslq %ebx,%rdx
  shl    $0x2,%rdx
  lea    (%rcx,%rdx,1),%rbp
  mov    0x0(%rbp),%eax
  mov    %eax,%r12d
  shr    $0x1f,%r12d
  add    %r12d,%eax
  and    $0x1,%eax
  sub    %r12d,%eax
  mov    %eax,0x0(%rbp)
  lea    0x1(%rbx),%eax
  cmp    %eax,%edi
  jle    L207
  lea    0x4(%rcx,%rdx,1),%rbp
  add    $0x2,%ebx
  mov    0x0(%rbp),%eax
  mov    %eax,%r12d
  shr    $0x1f,%r12d
  add    %r12d,%eax
  and    $0x1,%eax
  sub    %r12d,%eax
  mov    %eax,0x0(%rbp)
  cmp    %ebx,%edi
  jle    L207
  lea    0x8(%rcx,%rdx,1),%rdx
  mov    (%rdx),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  and    $0x1,%eax
  sub    %ecx,%eax
  mov    %eax,(%rdx)
L207:
  add    $0x8,%rsi
  cmp    %r11,%rsi
  jne    L301
L234:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L160:
  cmp    $0x3,%eax
  jne    L319
  movl   $0x3,(%r9,%rdx,1)
  jmp    L319
  xchg   %ax,%ax
L180:
  not    %r11d
L38:
  xor    %eax,%eax
  jmp    L146
  nopw   0x0(%rax,%rax,1)
L121:
  test   %r11d,%r11d
  jns    L63
  cmp    %esi,%edi
  jg     L165
L63:
  cmp    %edi,%ecx
  setl   %r15b
  cmp    %r13d,%ebx
  jge    L310
  mov    0x8(%r12),%r11
  jmp    L91
L48:
  xor    %ebx,%ebx
  jmp    L83
```

tool_calls: name: parse_data
arguments: data_tag: D6
type: byte[16]

tool: {"D6": [0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

assistant: ```c
void gameOfLife(int **board, int boardRowSize, int boardColSize) {
  int r, c, i, x, y, count;
  int r_range[] = {-1, -1, -1, 0, 0, 1, 1, 1};
  int c_range[] = {-1, 0, 1, -1, 1, -1, 0, 1};
  if (!(boardRowSize && boardColSize))
    return;
  for (r = 0; r < boardRowSize; ++r) {
    for (c = 0; c < boardColSize; ++c) {
      count = 0;
      for (i = 0; i < 8; ++i) {
        x = r + r_range[i];
        y = c + c_range[i];
        if (x >= 0 && x < boardRowSize && y >= 0 && y < boardColSize && (board[x][y] == 1 || board[x][y] == 2))
          ++count;
      }
      if (board[r][c] && (count < 2 || count > 3))
        board[r][c] = 2;
      else if (count == 3 && !board[r][c])
        board[r][c] = 3;
    }
  }
  for (r = 0; r < boardRowSize; ++r) {
    for (c = 0; c < boardColSize; ++c)
      board[r][c] %= 2;
  }
}
```