user: Converte this assembly snippet into its equivalent C code:

```asm
<gameOfLife>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %esi,-0x7c(%rbp)
  mov    %edx,-0x80(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0xffffffff,-0x50(%rbp)
  movl   $0xffffffff,-0x4c(%rbp)
  movl   $0xffffffff,-0x48(%rbp)
  movl   $0x0,-0x44(%rbp)
  movl   $0x0,-0x40(%rbp)
  movl   $0x1,-0x3c(%rbp)
  movl   $0x1,-0x38(%rbp)
  movl   $0x1,-0x34(%rbp)
  movl   $0xffffffff,-0x30(%rbp)
  movl   $0x0,-0x2c(%rbp)
  movl   $0x1,-0x28(%rbp)
  movl   $0xffffffff,-0x24(%rbp)
  movl   $0x1,-0x20(%rbp)
  movl   $0xffffffff,-0x1c(%rbp)
  movl   $0x0,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  cmpl   $0x0,-0x7c(%rbp)
  je     L29
  cmpl   $0x0,-0x80(%rbp)
  je     L29
  movl   $0x0,-0x68(%rbp)
  jmp    L156
L151:
  movl   $0x0,-0x64(%rbp)
  jmp    L208
L153:
  movl   $0x0,-0x5c(%rbp)
  movl   $0x0,-0x60(%rbp)
  jmp    L55
L253:
  mov    -0x60(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,4),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x60(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,4),%edx
  mov    -0x64(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x54(%rbp)
  cmpl   $0x0,-0x58(%rbp)
  js     L117
  mov    -0x58(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jge    L117
  cmpl   $0x0,-0x54(%rbp)
  js     L117
  mov    -0x54(%rbp),%eax
  cmp    -0x80(%rbp),%eax
  jge    L117
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x54(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  je     L126
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x54(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x2,%eax
  jne    L117
L126:
  addl   $0x1,-0x5c(%rbp)
L117:
  addl   $0x1,-0x60(%rbp)
L55:
  cmpl   $0x7,-0x60(%rbp)
  jle    L253
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L205
  cmpl   $0x1,-0x5c(%rbp)
  jle    L120
  cmpl   $0x3,-0x5c(%rbp)
  jle    L205
L120:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movl   $0x2,(%rax)
  jmp    L224
L205:
  cmpl   $0x3,-0x5c(%rbp)
  jne    L224
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L224
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movl   $0x3,(%rax)
L224:
  addl   $0x1,-0x64(%rbp)
L208:
  mov    -0x64(%rbp),%eax
  cmp    -0x80(%rbp),%eax
  jl     L153
  addl   $0x1,-0x68(%rbp)
L156:
  mov    -0x68(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L151
  movl   $0x0,-0x68(%rbp)
  jmp    L109
L249:
  movl   $0x0,-0x64(%rbp)
  jmp    L28
L106:
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x64(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x68(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x78(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rdx),%rcx
  mov    -0x64(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  and    $0x1,%eax
  sub    %ecx,%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x64(%rbp)
L28:
  mov    -0x64(%rbp),%eax
  cmp    -0x80(%rbp),%eax
  jl     L106
  addl   $0x1,-0x68(%rbp)
L109:
  mov    -0x68(%rbp),%eax
  cmp    -0x7c(%rbp),%eax
  jl     L249
  jmp    L228
L29:
  nop
L228:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L170
  call   <__stack_chk_fail@plt>
L170:
  leave
  ret
```

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;
  }
}
```