user: What would the C source look like for the assembly code provided here:

```asm
<g_loop>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%rsp
  movsd  %xmm0,-0x28(%rbp)
  mov    %rdi,-0x30(%rbp)
  mov    %rsi,-0x38(%rbp)
  movl   $0x0,-0x1c(%rbp)
  movl   $0x0,-0x18(%rbp)
  movl   $0x0,-0x14(%rbp)
  jmp    L9
L56:
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <mp@plt>
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x67,%al
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <ft_tolower@plt>
  test   %rax,%rax
  je     L40
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L40
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  sub    -0x18(%rbp),%eax
  mov    $0xa,%esi
  mov    %eax,%edi
  call   <ft_pb@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  -0x28(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jne    L36
  addl   $0x1,-0x14(%rbp)
  jmp    L57
L29:
  mov    $0x30,%edi
  call   <ft_putchar@plt>
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
L36:
  mov    -0x14(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x14(%rbp)
  test   %eax,%eax
  jg     L29
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  sub    -0x18(%rbp),%eax
  mov    $0xa,%esi
  mov    %eax,%edi
  call   <ft_pb@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  -0x28(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  add    $0x30,%eax
  mov    %eax,%edi
  call   <ft_putchar@plt>
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  jmp    L57
L40:
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  sub    -0x18(%rbp),%eax
  mov    $0xa,%esi
  mov    %eax,%edi
  call   <ft_pb@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  -0x28(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  add    $0x30,%eax
  mov    %eax,%edi
  call   <ft_putchar@plt>
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
L57:
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  sub    -0x18(%rbp),%eax
  mov    $0xa,%esi
  mov    %eax,%edi
  call   <ft_pb@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  -0x28(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%ebx
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  sub    -0x18(%rbp),%eax
  mov    $0xa,%esi
  mov    %eax,%edi
  call   <ft_pb@plt>
  imul   %ebx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  -0x28(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L9:
  addl   $0x1,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x18(%rbp)
  jle    L56
  mov    -0x1c(%rbp),%eax
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
int g_loop(double f, int fl[8], char *s) {
  int ret;
  int k;
  int count;
  ret = 0;
  k = 0;
  count = 0;
  while (++k <= fl[1]) {
    if (ft_tolower((*(s + mp(s))) == 'g') && !fl[2]) {
      if ((int)(f / ft_pb((fl[1] - k), 10)) == 0)
        count++;
      else {
        while (count-- > 0)
          ret += ft_putchar('0');
        ret += ft_putchar((int)(f / ft_pb((fl[1] - k), 10)) + '0');
      }
    } else
      ret += ft_putchar((int)(f / ft_pb((fl[1] - k), 10)) + '0');
    f -= (int)(f / ft_pb((fl[1] - k), 10)) * ft_pb((fl[1] - k), 10);
  }
  return (ret);
}
```