user: Translate the below assembly code into C programming language:

```asm
<round_text>:
  endbr64
  push   %r13
  push   %r12
  lea    0x5a00(%rdi),%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    $0xf,%ebx
  nopl   0x0(%rax)
L148:
  mov    %rbp,%rsi
  xor    %r11d,%r11d
  xor    %r10d,%r10d
  nopl   0x0(%rax)
L39:
  xor    %eax,%eax
  jmp    L278
  nopw   0x0(%rax,%rax,1)
L239:
  mov    0x18(%rdi,%rcx,1),%r13d
  mov    %r13d,%edx
  neg    %edx
  sbb    %edx,%edx
  and    $0x3,%edx
  test   %eax,%eax
  jle    L172
  cmpl   $0x0,0x14(%rdi,%rcx,1)
  je     L193
  mov    -0x4(%rdi,%rcx,1),%r9d
  test   %r9d,%r9d
  jne    L172
  or     $0x1,%edx
L172:
  cmp    $0x4,%r8d
  jg     L94
  mov    0x18(%rdi,%rcx,1),%r13d
  lea    0x18(%rcx),%r8
L131:
  mov    0x4(%rdi,%r8,1),%ecx
  test   %ecx,%ecx
  je     L89
  mov    -0x14(%rdi,%r8,1),%r13d
  test   %r13d,%r13d
  jne    L94
  mov    %edx,%ecx
  and    $0x1,%ecx
  cmovne %ebx,%ecx
  nopl   0x0(%rax)
L86:
  mov    $0xf,%edx
L209:
  mov    %ecx,(%rsi,%rax,8)
  mov    %edx,0x4(%rsi,%rax,8)
  add    $0x1,%rax
  cmp    $0x6,%rax
  je     L68
L278:
  cmp    $0x9,%r10d
  je     L71
  lea    (%r11,%rax,1),%edx
  mov    %eax,%r8d
  mov    (%rdi,%rdx,4),%r9d
  lea    0x0(,%rdx,4),%rcx
  test   %r9d,%r9d
  jne    L239
  test   %eax,%eax
  jle    L271
  mov    0x18(%rdi,%rcx,1),%r13d
  xor    %edx,%edx
L193:
  test   %r13d,%r13d
  je     L274
  mov    -0x4(%rdi,%rcx,1),%r13d
  test   %r13d,%r13d
  je     L274
  mov    0x14(%rdi,%rcx,1),%r13d
  test   %r13d,%r13d
  jne    L274
  or     $0x1,%edx
  nopl   0x0(%rax,%rax,1)
L274:
  cmp    $0x4,%r8d
  jg     L94
  mov    0x18(%rdi,%rcx,1),%r13d
  lea    0x18(%rcx),%r8
  test   %r9d,%r9d
  jne    L131
L89:
  mov    %edx,%ecx
  and    $0x1,%ecx
  test   %r13d,%r13d
  je     L91
  mov    -0x14(%rdi,%r8,1),%r9d
  test   %r9d,%r9d
  je     L91
  mov    0x4(%rdi,%r8,1),%r8d
  test   %r8d,%r8d
  jne    L91
  test   %ecx,%ecx
  je     L86
  mov    $0xf,%ecx
  jmp    L86
L94:
  mov    %edx,%ecx
  and    $0x1,%ecx
L91:
  and    $0x2,%edx
  test   %ecx,%ecx
  cmovne %ebx,%ecx
  test   %edx,%edx
  jne    L86
  jmp    L209
  nopw   0x0(%rax,%rax,1)
L71:
  xor    %ecx,%ecx
  xor    %edx,%edx
  jmp    L209
  nopl   0x0(%rax)
L68:
  add    $0x1,%r10d
  add    $0x30,%rsi
  add    $0x6,%r11d
  cmp    $0xa,%r10d
  jne    L39
  add    $0xf0,%rdi
  add    $0x1e0,%rbp
  cmp    %rdi,%r12
  jne    L148
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L271:
  xor    %edx,%edx
  cmp    $0x4,%eax
  jg     L94
  mov    0x18(%rdi,%rcx,1),%r13d
  lea    0x18(%rcx),%r8
  xor    %edx,%edx
  jmp    L89
```

assistant: ```c
void round_text(uint8_t *p, uint8_t *p2) {
  for (int c = 0; c < 96; c++) {
    for (int y = 0; y < 10; y++) {
      for (int d = 0; d < 6; d++) {
        int stat = 0;
        if (y < 9 && p[(y * 6) + d] && p[(y * 6) + d + 6])
          stat |= 3;
        if (y < 9 && d > 0 && p[(y * 6) + d] && p[(y * 6) + d + 5] && !p[(y * 6) + d - 1])
          stat |= 1;
        if (y < 9 && d > 0 && p[(y * 6) + d + 6] && p[(y * 6) + d - 1] && !p[(y * 6) + d + 5])
          stat |= 1;
        if (y < 9 && d < 5 && p[(y * 6) + d] && p[(y * 6) + d + 7] && !p[(y * 6) + d + 1])
          stat |= 2;
        if (y < 9 && d < 5 && p[(y * 6) + d + 6] && p[(y * 6) + d + 1] && !p[(y * 6) + d + 7])
          stat |= 2;
        p2[0] = (stat & 1) ? 15 : 0;
        p2[1] = (stat & 2) ? 15 : 0;
        p2 += 2;
      }
    }
    p += 60;
  }
}
```