user: What is the c source code of the assembly code below:

```asm
<itoa>:
  endbr64
  movslq %edx,%rdx
  push   %rbx
  mov    %edi,%eax
  mov    %rsi,%r8
  mov    %rdx,%r10
  lea    -0x1(%rdx),%ecx
  add    %rsi,%rdx
  test   %edi,%edi
  js     L171
  movb   $0x0,(%rdx)
  mov    $0x0,%r11d
  movslq %ecx,%rdi
  je     L199
L196:
  movslq %ecx,%rdi
  mov    $0xcccccccd,%ebx
  add    %r8,%rdi
  nopl   0x0(%rax,%rax,1)
L27:
  mov    %eax,%edx
  mov    %ecx,%r9d
  sub    $0x1,%rdi
  sub    $0x1,%ecx
  imul   %rbx,%rdx
  shr    $0x23,%rdx
  lea    (%rdx,%rdx,4),%esi
  add    %esi,%esi
  sub    %esi,%eax
  add    $0x30,%eax
  mov    %al,0x1(%rdi)
  mov    %edx,%eax
  test   %edx,%edx
  jne    L27
  cmp    $0x1,%r11d
  je     L108
  sub    %ecx,%r10d
  lea    -0x1(%r10),%edx
L202:
  test   %r10d,%r10d
  je     L158
  movslq %ecx,%rdi
  mov    %edx,%r11d
  lea    0x2(%rdi),%rsi
  neg    %rsi
  cmp    $0xe,%rsi
  jbe    L199
  cmp    $0x6,%edx
  jbe    L199
  lea    0x1(%rdx),%r9d
  cmp    $0xe,%edx
  jbe    L191
  mov    %r9d,%esi
  lea    0x1(%r8,%rdi,1),%r10
  xor    %eax,%eax
  shr    $0x4,%esi
  shl    $0x4,%rsi
  nop
L36:
  movdqu (%r10,%rax,1),%xmm0
  movups %xmm0,(%r8,%rax,1)
  add    $0x10,%rax
  cmp    %rsi,%rax
  jne    L36
  mov    %r9d,%esi
  and    $0xfffffff0,%esi
  mov    %esi,%eax
  sub    %esi,%edx
  cmp    %r9d,%esi
  je     L158
  sub    %esi,%r11d
  lea    0x1(%r11),%r9d
  cmp    $0x6,%r11d
  jbe    L110
L194:
  add    %r8,%rdi
  mov    0x1(%rsi,%rdi,1),%rdi
  mov    %rdi,(%r8,%rsi,1)
  mov    %r9d,%esi
  and    $0xfffffff8,%esi
  add    %esi,%eax
  sub    %esi,%edx
  cmp    %esi,%r9d
  je     L158
L110:
  lea    (%rcx,%rax,1),%edi
  lea    0x1(%rax),%esi
  movslq %edi,%rdi
  movzbl 0x1(%r8,%rdi,1),%r9d
  movslq %eax,%rdi
  mov    %r9b,(%r8,%rdi,1)
  test   %edx,%edx
  je     L158
  lea    (%rsi,%rcx,1),%r9d
  movslq %esi,%rsi
  lea    0x2(%rax),%edi
  movslq %r9d,%r9
  movzbl 0x1(%r8,%r9,1),%r9d
  mov    %r9b,(%r8,%rsi,1)
  cmp    $0x1,%edx
  je     L158
  lea    (%rdi,%rcx,1),%r9d
  movslq %edi,%rdi
  lea    0x3(%rax),%esi
  movslq %r9d,%r9
  movzbl 0x1(%r8,%r9,1),%r9d
  mov    %r9b,(%r8,%rdi,1)
  cmp    $0x2,%edx
  je     L158
  lea    (%rcx,%rsi,1),%r9d
  movslq %esi,%rsi
  lea    0x4(%rax),%edi
  movslq %r9d,%r9
  movzbl 0x1(%r8,%r9,1),%r9d
  mov    %r9b,(%r8,%rsi,1)
  cmp    $0x3,%edx
  je     L158
  lea    (%rcx,%rdi,1),%r9d
  movslq %edi,%rdi
  lea    0x5(%rax),%esi
  movslq %r9d,%r9
  movzbl 0x1(%r8,%r9,1),%r9d
  mov    %r9b,(%r8,%rdi,1)
  cmp    $0x4,%edx
  je     L158
  lea    (%rcx,%rsi,1),%edi
  movslq %esi,%rsi
  add    $0x6,%eax
  movslq %edi,%rdi
  movzbl 0x1(%r8,%rdi,1),%edi
  mov    %dil,(%r8,%rsi,1)
  cmp    $0x5,%edx
  je     L158
  add    %eax,%ecx
  cltq
  movslq %ecx,%rcx
  movzbl 0x1(%r8,%rcx,1),%edx
  mov    %dl,(%r8,%rax,1)
L158:
  pop    %rbx
  ret
  nopl   0x0(%rax,%rax,1)
L171:
  movb   $0x0,(%rdx)
  neg    %eax
  mov    $0x1,%r11d
  jmp    L196
  nopl   0x0(%rax,%rax,1)
L108:
  sub    $0x2,%r9d
  movslq %ecx,%rcx
  sub    %r9d,%r10d
  movb   $0x2d,(%r8,%rcx,1)
  mov    %r9d,%ecx
  lea    -0x1(%r10),%edx
  jmp    L202
  nopl   0x0(%rax,%rax,1)
L199:
  lea    0x1(%r8,%r11,1),%rdx
  nopl   (%rax)
L217:
  movzbl 0x1(%r8,%rdi,1),%eax
  add    $0x1,%r8
  mov    %al,-0x1(%r8)
  cmp    %rdx,%r8
  jne    L217
  pop    %rbx
  ret
L191:
  xor    %esi,%esi
  jmp    L194
```

assistant: ```c
void itoa(int i, char *str, int c) {
  int d = c;
  int flag = 0;
  if (i < 0) {
    flag = 1;
    i *= -1;
  }
  str[c--] = '\0';
  while (i != 0) {
    str[c--] = i % 10 + '0';
    i /= 10;
  }
  if (flag == 1) {
    str[c--] = '-';
  }
  d -= c;
  while (d--) {
    str[i++] = str[i + c + 1];
  }
}
```