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

```asm
<disp7s>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    %edx,-0x30(%rbp)
  mov    %ecx,-0x34(%rbp)
  mov    %r8d,-0x38(%rbp)
  mov    %r9d,-0x3c(%rbp)
  movss  %xmm0,-0x40(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movabs $0xa4ded674b6ba24ee,%rax
  mov    %rax,-0x12(%rbp)
  movw   $0xf6fe,-0xa(%rbp)
  cmpl   $0x0,0x10(%rbp)
  js     L78
  cmpl   $0x9,0x10(%rbp)
  jg     L78
  mov    0x10(%rbp),%eax
  cltq
  movzbl -0x12(%rbp,%rax,1),%eax
  test   %al,%al
  jns    L40
  mov    -0x3c(%rbp),%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x38(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,%r10d
  mov    -0x40(%rbp),%edi
  mov    -0x3c(%rbp),%r8d
  mov    -0x34(%rbp),%ecx
  mov    -0x30(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x1
  movd   %edi,%xmm0
  mov    %r8d,%r9d
  mov    %r10d,%r8d
  mov    %rax,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
L40:
  mov    0x10(%rbp),%eax
  cltq
  movzbl -0x12(%rbp,%rax,1),%eax
  movsbl %al,%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L36
  mov    -0x3c(%rbp),%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x38(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,%r10d
  mov    -0x40(%rbp),%edi
  mov    -0x34(%rbp),%ecx
  mov    -0x30(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x3c(%rbp),%r8d
  push   %r8
  movd   %edi,%xmm0
  mov    $0x1,%r9d
  mov    %r10d,%r8d
  mov    %rax,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
L36:
  mov    0x10(%rbp),%eax
  cltq
  movzbl -0x12(%rbp,%rax,1),%eax
  movsbl %al,%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L65
  mov    -0x3c(%rbp),%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x38(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,%r10d
  mov    -0x34(%rbp),%edx
  mov    -0x3c(%rbp),%eax
  lea    (%rdx,%rax,1),%edi
  mov    -0x40(%rbp),%ecx
  mov    -0x30(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x3c(%rbp),%r8d
  push   %r8
  movd   %ecx,%xmm0
  mov    $0x1,%r9d
  mov    %r10d,%r8d
  mov    %edi,%ecx
  mov    %rax,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
L65:
  mov    0x10(%rbp),%eax
  cltq
  movzbl -0x12(%rbp,%rax,1),%eax
  movsbl %al,%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L32
  mov    -0x38(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,%r8d
  mov    -0x40(%rbp),%edi
  mov    -0x3c(%rbp),%r9d
  mov    -0x34(%rbp),%ecx
  mov    -0x30(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x1
  movd   %edi,%xmm0
  mov    %rax,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
L32:
  mov    0x10(%rbp),%eax
  cltq
  movzbl -0x12(%rbp,%rax,1),%eax
  movsbl %al,%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L35
  mov    -0x38(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,%r10d
  mov    -0x40(%rbp),%edi
  mov    -0x34(%rbp),%ecx
  mov    -0x30(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x3c(%rbp),%r8d
  push   %r8
  movd   %edi,%xmm0
  mov    $0x1,%r9d
  mov    %r10d,%r8d
  mov    %rax,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
L35:
  mov    0x10(%rbp),%eax
  cltq
  movzbl -0x12(%rbp,%rax,1),%eax
  movsbl %al,%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L31
  mov    -0x38(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,%r10d
  mov    -0x34(%rbp),%edx
  mov    -0x3c(%rbp),%eax
  lea    (%rdx,%rax,1),%edi
  mov    -0x40(%rbp),%ecx
  mov    -0x30(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x3c(%rbp),%r8d
  push   %r8
  movd   %ecx,%xmm0
  mov    $0x1,%r9d
  mov    %r10d,%r8d
  mov    %edi,%ecx
  mov    %rax,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
L31:
  mov    0x10(%rbp),%eax
  cltq
  movzbl -0x12(%rbp,%rax,1),%eax
  movsbl %al,%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L41
  mov    -0x40(%rbp),%edi
  mov    -0x3c(%rbp),%r9d
  mov    -0x38(%rbp),%r8d
  mov    -0x34(%rbp),%ecx
  mov    -0x30(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x1
  movd   %edi,%xmm0
  mov    %rax,%rdi
  call   <draw_rectangle@plt>
  add    $0x10,%rsp
  jmp    L41
L78:
  nop
L41:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L99
  call   <__stack_chk_fail@plt>
L99:
  leave
  ret
```

assistant: ```c
void disp7s(float *sl, int w, int h, int x, int y, int v, int d, float gray) {
  char seg[10] = {0xEE, 0x24, 0xBA, 0xB6, 0x74, 0xD6, 0xDE, 0xA4, 0xFE, 0xF6};
  if ((d < 0) || (d > 9))
    return;
  if ((seg[d] & 0x80) != 0)
    draw_rectangle(sl, w, h, x, y - 2 * v, v, 1, gray);
  if ((seg[d] & 0x40) != 0)
    draw_rectangle(sl, w, h, x, y - 2 * v, 1, v, gray);
  if ((seg[d] & 0x20) != 0)
    draw_rectangle(sl, w, h, x + v, y - 2 * v, 1, v, gray);
  if ((seg[d] & 0x10) != 0)
    draw_rectangle(sl, w, h, x, y - v, v, 1, gray);
  if ((seg[d] & 0x08) != 0)
    draw_rectangle(sl, w, h, x, y - v, 1, v, gray);
  if ((seg[d] & 0x04) != 0)
    draw_rectangle(sl, w, h, x + v, y - v, 1, v, gray);
  if ((seg[d] & 0x02) != 0)
    draw_rectangle(sl, w, h, x, y, v, 1, gray);
}
```