user: 请从给定的汇编指令推导出C源代码：

```asm
<contDig>:
  endbr64
  push   %r15
  pxor   %xmm0,%xmm0
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  movq   $0x0,0x20(%rsi)
  mov    %edi,0x18(%rsp)
  movups %xmm0,(%rsi)
  movups %xmm0,0x10(%rsi)
  test   %edi,%edi
  jne    L160
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L160:
  mov    %rsi,%rbx
  call   <log10@plt>
  mov    %rax,0x10(%rsp)
  mov    %eax,0x1c(%rsp)
  test   %eax,%eax
  jle    L21
  cmp    $0x1,%eax
  je     L99
  movq   D9(%rip),%xmm0
  mov    %eax,%edx
  xor    %eax,%eax
  shr    %edx
L180:
  movdqa %xmm0,%xmm1
  add    $0x1,%eax
  pslld  $0x2,%xmm1
  paddd  %xmm1,%xmm0
  pslld  $0x1,%xmm0
  cmp    %edx,%eax
  jne    L180
  movd   %xmm0,%esi
  pshufd $0xe5,%xmm0,%xmm4
  movd   %xmm4,%eax
  imul   %eax,%esi
  testb  $0x1,0x10(%rsp)
  je     L49
L48:
  lea    (%rsi,%rsi,4),%esi
  add    %esi,%esi
L49:
  mov    0x18(%rsp),%eax
  mov    0x10(%rsp),%r13d
  movdqa D5(%rip),%xmm4
  movdqa D21(%rip),%xmm3
  jmp    L129
L189:
  lea    (%rcx,%rbp,1),%r9d
L155:
  cmp    $0x4,%eax
  movups %xmm0,0x14(%rbx)
  cmove  %ebp,%r9d
  movd   %r9d,%xmm6
  punpckldq %xmm6,%xmm2
  movd   %r15d,%xmm6
  punpckldq %xmm6,%xmm1
  punpcklqdq %xmm2,%xmm1
  movups %xmm1,0x4(%rbx)
  cmp    $0x9,%eax
  jle    L188
  lea    (%rcx,%r11,1),%r8d
L19:
  cmp    $0x9,%eax
  movslq %eax,%rdx
  mov    0xc(%rsp),%eax
  cmove  %r11d,%r8d
  lea    0x1(%rax),%ecx
  mov    %r8d,0x24(%rbx)
  add    %ecx,(%rbx,%rdx,4)
  sub    $0x1,%r13d
  jb     L93
L129:
  movd   %esi,%xmm7
  mov    %esi,%esi
  cltd
  mov    $0xcccccccd,%edi
  mov    %rsi,%rcx
  imul   %rdi,%rsi
  pshufd $0x0,%xmm7,%xmm6
  mov    0x8(%rbx),%r14d
  idiv   %ecx
  movdqu 0x14(%rbx),%xmm5
  mov    0x24(%rbx),%r8d
  mov    0x10(%rbx),%r9d
  mov    0xc(%rbx),%r12d
  shr    $0x23,%rsi
  mov    %esi,%edi
  imul   %r13d,%edi
  imul   %eax,%edi
  movd   %eax,%xmm7
  mov    %edx,0xc(%rsp)
  pshufd $0x0,%xmm7,%xmm0
  movdqa %xmm0,%xmm2
  mov    %edi,%edx
  pcmpgtd %xmm4,%xmm2
  add    0x4(%rbx),%edi
  movd   %edx,%xmm7
  lea    (%rdx,%r8,1),%r11d
  lea    (%rdx,%r9,1),%ebp
  pshufd $0x0,%xmm7,%xmm1
  lea    (%rdx,%r12,1),%r10d
  lea    (%rdi,%rcx,1),%r15d
  add    %r14d,%edx
  paddd  %xmm5,%xmm1
  pand   %xmm2,%xmm5
  cmp    $0x1,%eax
  pandn  %xmm1,%xmm2
  paddd  %xmm1,%xmm6
  cmovle %edi,%r15d
  por    %xmm2,%xmm5
  movdqa %xmm0,%xmm2
  pcmpgtd %xmm3,%xmm2
  pcmpeqd %xmm3,%xmm0
  pand   %xmm2,%xmm6
  pandn  %xmm5,%xmm2
  pand   %xmm0,%xmm1
  por    %xmm6,%xmm2
  pandn  %xmm2,%xmm0
  por    %xmm1,%xmm0
  movd   %r15d,%xmm1
  lea    (%rcx,%rdx,1),%r15d
  cmp    $0x2,%eax
  jg     L20
  cmovl  %edx,%r14d
  mov    %r14d,%r15d
L20:
  cmp    $0x2,%eax
  cmove  %edx,%r15d
  lea    (%rcx,%r10,1),%edx
  cmp    $0x3,%eax
  jg     L117
  mov    %r12d,%edx
  cmovl  %r10d,%edx
L117:
  cmp    $0x3,%eax
  cmovne %edx,%r10d
  movd   %r10d,%xmm2
  cmp    $0x4,%eax
  jg     L189
  cmovl  %ebp,%r9d
  jmp    L155
  nopl   0x0(%rax,%rax,1)
L93:
  movdqu 0x14(%rbx),%xmm0
  movdqu 0x4(%rbx),%xmm7
  paddd  %xmm7,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x8,%xmm1
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%eax
  add    0x24(%rbx),%eax
  mov    %eax,%ebp
  mov    0x10(%rsp),%eax
  test   %eax,%eax
  jle    L86
  mov    0x10(%rsp),%r13d
  mov    $0x9,%eax
  xor    %r12d,%r12d
  mov    $0x1,%edx
  add    $0x1,%r13d
  nopl   0x0(%rax,%rax,1)
L22:
  mov    %eax,%ecx
  lea    (%rax,%rax,4),%eax
  imul   %edx,%ecx
  add    $0x1,%edx
  add    %eax,%eax
  add    %ecx,%r12d
  cmp    %r13d,%edx
  jne    L22
L1:
  mov    0x1c(%rsp),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %eax,%r8d
  mov    0x18(%rsp),%eax
  sub    %r8d,%eax
  add    $0x1,%eax
  imul   %r13d,%eax
  add    %r12d,%eax
  sub    %ebp,%eax
  mov    %eax,(%rbx)
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L188:
  cmovl  %r11d,%r8d
  jmp    L19
L21:
  je     L162
  movdqu 0x14(%rbx),%xmm0
  movdqu 0x4(%rbx),%xmm4
  paddd  %xmm4,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x8,%xmm1
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%eax
  add    0x24(%rbx),%eax
  mov    %eax,%ebp
  nopl   0x0(%rax)
L86:
  mov    0x10(%rsp),%rax
  xor    %r12d,%r12d
  lea    0x1(%rax),%r13d
  jmp    L1
L99:
  mov    $0x1,%esi
  jmp    L48
L162:
  mov    $0x1,%esi
  jmp    L49
```

tool_calls: name: disassemble_data
arguments: data_tag: D9
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D5
type_infered: byte[16]
name: disassemble_data
arguments: data_tag: D21
type_infered: byte[16]

tool: {"D9": [0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

tool: {"D5": [0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00]}

tool: {"D21": [0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00]}

assistant: ```c
void contDig(int t, int tt[]) {
  int i, j, m, n, p, q, s = 0, h = 9, s0 = 0;
  for (i = 0; i <= 9; i++)
    tt[i] = 0;
  if (t == 0)
    return;
  m = (int)log10(t);
  n = t;
  q = 1;
  for (j = 1; j <= m; j++)
    q *= 10;
  for (i = m; i >= 0; i--) {
    p = q / 10 * i;
    for (j = 1; j <= 9; j++) {
      tt[j] += p * (n / q);
      if (j < n / q)
        tt[j] += q;
    }
    tt[n / q] += n % (q) + 1;
    n %= q;
    q /= 10;
  }
  for (i = 1; i <= 9; i++)
    s0 += tt[i];
  for (i = 1; i <= m; i++, h *= 10)
    s += h * i;
  s += (t - pow(10, m) + 1) * (m + 1);
  tt[0] = s - s0;
}
```