user: 这段汇编代码用C语言表示是什么样的：

```asm
<sfd_strltrim>:
  endbr64
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  call   <sfd_strlen@plt>
  mov    %eax,%ebx
  xor    %eax,%eax
  jmp    L161
  cs nopw 0x0(%rax,%rax,1)
L174:
  add    $0x1,%rax
  cmpb   $0x20,-0x1(%rbp,%rax,1)
  jne    L114
L161:
  mov    %eax,%r12d
  cmp    %eax,%ebx
  jg     L174
  lea    0x1(%rbx),%edi
  sub    %eax,%edi
  call   <malloc@plt>
  mov    %rax,%r8
L132:
  sub    %r12d,%ebx
  mov    %r8,%rax
  movslq %ebx,%rbx
  movb   $0x0,(%r8,%rbx,1)
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L114:
  lea    0x1(%rbx),%edi
  sub    %r12d,%edi
  call   <malloc@plt>
  movslq %r12d,%rdx
  mov    %ebx,%ecx
  mov    %rax,%r8
  lea    0x1(%rbp,%rdx,1),%rdi
  sub    %r12d,%ecx
  mov    %r8,%rsi
  lea    -0x1(%rcx),%eax
  sub    %rdi,%rsi
  cmp    $0xe,%rsi
  jbe    L85
  cmp    $0x6,%eax
  jbe    L85
  cmp    %ebx,%r12d
  mov    $0x1,%esi
  cmovge %esi,%ecx
  cmp    $0xe,%eax
  jbe    L116
  mov    %ecx,%esi
  lea    0x0(%rbp,%rdx,1),%rdi
  xor    %eax,%eax
  shr    $0x4,%esi
  shl    $0x4,%rsi
  nopl   0x0(%rax,%rax,1)
L18:
  movdqu (%rdi,%rax,1),%xmm0
  movups %xmm0,(%r8,%rax,1)
  add    $0x10,%rax
  cmp    %rsi,%rax
  jne    L18
  mov    %ecx,%eax
  and    $0xfffffff0,%eax
  lea    (%rax,%r12,1),%esi
  cmp    %eax,%ecx
  je     L132
L198:
  sub    %eax,%ecx
  lea    -0x1(%rcx),%edi
  cmp    $0x6,%edi
  jbe    L121
  mov    %eax,%edi
  lea    0x0(%rbp,%rdx,1),%rax
  mov    (%rax,%rdi,1),%rax
  mov    %rax,(%r8,%rdi,1)
  mov    %ecx,%eax
  and    $0xfffffff8,%eax
  add    %eax,%esi
  cmp    %eax,%ecx
  je     L132
L121:
  movslq %esi,%rax
  movzbl 0x0(%rbp,%rax,1),%edx
  mov    %esi,%eax
  sub    %r12d,%eax
  cltq
  mov    %dl,(%r8,%rax,1)
  lea    0x1(%rsi),%eax
  cmp    %eax,%ebx
  jle    L132
  movslq %eax,%rdx
  sub    %r12d,%eax
  movzbl 0x0(%rbp,%rdx,1),%edx
  cltq
  mov    %dl,(%r8,%rax,1)
  lea    0x2(%rsi),%eax
  cmp    %eax,%ebx
  jle    L132
  movslq %eax,%rdx
  sub    %r12d,%eax
  movzbl 0x0(%rbp,%rdx,1),%edx
  cltq
  mov    %dl,(%r8,%rax,1)
  lea    0x3(%rsi),%eax
  cmp    %eax,%ebx
  jle    L132
  movslq %eax,%rdx
  sub    %r12d,%eax
  movzbl 0x0(%rbp,%rdx,1),%edx
  cltq
  mov    %dl,(%r8,%rax,1)
  lea    0x4(%rsi),%eax
  cmp    %eax,%ebx
  jle    L132
  movslq %eax,%rdx
  sub    %r12d,%eax
  movzbl 0x0(%rbp,%rdx,1),%edx
  cltq
  mov    %dl,(%r8,%rax,1)
  lea    0x5(%rsi),%eax
  cmp    %eax,%ebx
  jle    L132
  movslq %eax,%rdx
  sub    %r12d,%eax
  add    $0x6,%esi
  movzbl 0x0(%rbp,%rdx,1),%edx
  cltq
  mov    %dl,(%r8,%rax,1)
  cmp    %esi,%ebx
  jle    L132
  movslq %esi,%rax
  sub    %r12d,%esi
  movzbl 0x0(%rbp,%rax,1),%eax
  movslq %esi,%rsi
  mov    %al,(%r8,%rsi,1)
  jmp    L132
  nopl   (%rax)
L85:
  mov    %r8,%rcx
  mov    %rdx,%rax
  sub    %rdx,%rcx
  nopl   0x0(%rax)
L8:
  movzbl 0x0(%rbp,%rax,1),%edx
  mov    %dl,(%rcx,%rax,1)
  add    $0x1,%rax
  cmp    %eax,%ebx
  jg     L8
  jmp    L132
L116:
  mov    %r12d,%esi
  xor    %eax,%eax
  jmp    L198
```

assistant: ```c
char *sfd_strltrim(const char *s) {
  int i = 0, sp = 0, l = sfd_strlen(s);
  char *buffer;
  while (i < l && s[i++] == ' ')
    sp++;
  buffer = malloc((l + 1) - sp);
  for (i = sp; i < l; i++)
    buffer[i - sp] = s[i];
  buffer[l - sp] = '\0';
  return buffer;
}
```