user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<timespec_normalize>:
  endbr64
  mov    (%rdi),%rsi
  cmp    $0x3b9ac9ff,%rsi
  jle    L2
  lea    -0x3b9aca00(%rsi),%rcx
  mov    0x8(%rdi),%r9d
  movabs $0x44b82fa09b5a53,%r8
  mov    %rcx,%rdx
  shr    $0x9,%rdx
  mov    %rdx,%rax
  mul    %r8
  movabs $0x165a0bbff,%rax
  shr    $0xb,%rdx
  add    $0x1,%rdx
  cmp    %rax,%rcx
  jbe    L128
  movq   %rcx,%xmm4
  movd   %r9d,%xmm5
  movq   %rsi,%xmm3
  mov    %rdx,%rcx
  pshufd $0x0,%xmm5,%xmm2
  punpcklqdq %xmm4,%xmm3
  shr    $0x2,%rcx
  xor    %eax,%eax
  paddd  D42(%rip),%xmm2
  movdqa D29(%rip),%xmm7
  movdqa D63(%rip),%xmm6
  movdqa D2(%rip),%xmm5
  movdqa D82(%rip),%xmm4
  nopw   0x0(%rax,%rax,1)
L38:
  movdqa %xmm2,%xmm1
  movdqa %xmm3,%xmm0
  paddd  %xmm7,%xmm2
  add    $0x1,%eax
  paddq  %xmm6,%xmm3
  paddd  %xmm5,%xmm1
  paddq  %xmm4,%xmm0
  cmp    %ecx,%eax
  jne    L38
  mov    %rdx,%rcx
  movhlps %xmm0,%xmm6
  pshufd $0xff,%xmm1,%xmm1
  and    $0xfffffffffffffffc,%rcx
  movq   %xmm6,%rax
  movd   %xmm1,%r8d
  imul   $0xffffffffc4653600,%rcx,%r10
  add    %ecx,%r9d
  add    %r10,%rsi
  cmp    %rcx,%rdx
  je     L175
  lea    -0x3b9aca00(%rsi),%rcx
L128:
  lea    0x1(%r9),%r8d
  mov    %rcx,%rax
  cmp    $0x3b9ac9ff,%rcx
  jle    L175
  lea    -0x77359400(%rsi),%rax
  lea    0x2(%r9),%r8d
  cmp    $0x3b9ac9ff,%rax
  jle    L175
  movabs $0xffffffff4d2fa200,%rax
  lea    0x3(%r9),%r8d
  add    %rsi,%rax
  cmp    $0x3b9ac9ff,%rax
  jle    L175
  movabs $0xffffffff1194d800,%rax
  lea    0x4(%r9),%r8d
  add    %rsi,%rax
  cmp    $0x3b9ac9ff,%rax
  jle    L175
  movabs $0xfffffffed5fa0e00,%rax
  lea    0x5(%r9),%r8d
  add    %rsi,%rax
  cmp    $0x3b9ac9ff,%rax
  jle    L175
  movabs $0xfffffffe9a5f4400,%rax
  lea    0x6(%r9),%r8d
  add    %rsi,%rax
L175:
  mov    %r8d,0x8(%rdi)
  mov    %rax,(%rdi)
L137:
  ret
  nopl   0x0(%rax)
L2:
  test   %rsi,%rsi
  jns    L137
  mov    %rsi,%rdx
  mov    0x8(%rdi),%r8d
  movabs $0x44b82fa09b5a53,%rcx
  not    %rdx
  shr    $0x9,%rdx
  mov    %rdx,%rax
  mul    %rcx
  movabs $0xfffffffe9a5f43ff,%rax
  shr    $0xb,%rdx
  add    $0x1,%rdx
  cmp    %rax,%rsi
  ja     L61
  lea    0x3b9aca00(%rsi),%rax
  movd   %r8d,%xmm4
  movq   %rsi,%xmm3
  mov    %rdx,%rcx
  movq   %rax,%xmm7
  pshufd $0x0,%xmm4,%xmm2
  shr    $0x2,%rcx
  paddd  D13(%rip),%xmm2
  punpcklqdq %xmm7,%xmm3
  movdqa D31(%rip),%xmm6
  xor    %eax,%eax
  pcmpeqd %xmm4,%xmm4
  movdqa D34(%rip),%xmm7
  movdqa D59(%rip),%xmm5
  nopw   0x0(%rax,%rax,1)
L87:
  movdqa %xmm2,%xmm1
  movdqa %xmm3,%xmm0
  paddd  %xmm7,%xmm2
  add    $0x1,%eax
  paddq  %xmm6,%xmm3
  paddd  %xmm4,%xmm1
  paddq  %xmm5,%xmm0
  cmp    %ecx,%eax
  jne    L87
  mov    %rdx,%r9
  movhlps %xmm0,%xmm5
  pshufd $0xff,%xmm1,%xmm1
  and    $0xfffffffffffffffc,%r9
  movq   %xmm5,%rax
  movd   %xmm1,%ecx
  imul   $0x3b9aca00,%r9,%r10
  sub    %r9d,%r8d
  add    %r10,%rsi
  cmp    %r9,%rdx
  je     L86
L61:
  mov    %rsi,%rax
  lea    -0x1(%r8),%ecx
  add    $0x3b9aca00,%rax
  jns    L86
  mov    %rsi,%rax
  lea    -0x2(%r8),%ecx
  add    $0x77359400,%rax
  jns    L86
  mov    $0xb2d05e00,%eax
  lea    -0x3(%r8),%ecx
  add    %rsi,%rax
  jns    L86
  mov    $0xee6b2800,%eax
  lea    -0x4(%r8),%ecx
  add    %rsi,%rax
  jns    L86
  movabs $0x12a05f200,%rax
  lea    -0x5(%r8),%ecx
  add    %rsi,%rax
  jns    L86
  movabs $0x165a0bc00,%rax
  lea    -0x6(%r8),%ecx
  add    %rsi,%rax
L86:
  mov    %ecx,0x8(%rdi)
  mov    %rax,(%rdi)
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D42
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D29
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D63
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D2
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D82
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D13
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D31
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D34
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D59
data_type: byte[16]

tool: {"D42": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D29": [0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: {"D63": [0x00,0xd8,0x94,0x11,0xff,0xff,0xff,0xff,0x00,0xd8,0x94,0x11,0xff,0xff,0xff,0xff]}

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

tool: {"D82": [0x00,0xa2,0x2f,0x4d,0xff,0xff,0xff,0xff,0x00,0xa2,0x2f,0x4d,0xff,0xff,0xff,0xff]}

tool: {"D13": [0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xff,0xff,0xff]}

tool: {"D31": [0x00,0x28,0x6b,0xee,0x00,0x00,0x00,0x00,0x00,0x28,0x6b,0xee,0x00,0x00,0x00,0x00]}

tool: {"D34": [0xfc,0xff,0xff,0xff,0xfc,0xff,0xff,0xff,0xfc,0xff,0xff,0xff,0xfc,0xff,0xff,0xff]}

tool: {"D59": [0x00,0x5e,0xd0,0xb2,0x00,0x00,0x00,0x00,0x00,0x5e,0xd0,0xb2,0x00,0x00,0x00,0x00]}

assistant: ```c
void timespec_normalize(struct timespec *ts) {
  while (ts->tv_nsec >= (1000000000L)) {
    ts->tv_sec++;
    ts->tv_nsec -= (1000000000L);
  }
  while (ts->tv_nsec < 0) {
    ts->tv_sec--;
    ts->tv_nsec += (1000000000L);
  }
}
```