user: 请将以下的汇编代码转换成C语言代码：

```asm
<normalize_timespec>:
  endbr64
  mov    (%rdi),%rsi
  test   %rsi,%rsi
  jns    L31
  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     L156
  lea    0x3b9aca00(%rsi),%rax
  movd   %r8d,%xmm5
  movq   %rsi,%xmm3
  mov    %rdx,%rcx
  movq   %rax,%xmm4
  pshufd $0x0,%xmm5,%xmm2
  shr    $0x2,%rcx
  xor    %eax,%eax
  paddd  D16(%rip),%xmm2
  movdqa D59(%rip),%xmm7
  punpcklqdq %xmm4,%xmm3
  pcmpeqd %xmm4,%xmm4
  movdqa D28(%rip),%xmm6
  movdqa D34(%rip),%xmm5
  nopl   (%rax)
L63:
  movdqa %xmm2,%xmm1
  movdqa %xmm3,%xmm0
  paddd  %xmm7,%xmm2
  add    $0x1,%eax
  paddq  %xmm6,%xmm3
  paddq  %xmm5,%xmm0
  paddd  %xmm4,%xmm1
  cmp    %ecx,%eax
  jne    L63
  mov    %rdx,%r9
  pshufd $0xff,%xmm1,%xmm1
  movhlps %xmm0,%xmm6
  and    $0xfffffffffffffffc,%r9
  movd   %xmm1,%ecx
  movq   %xmm6,%rax
  imul   $0x3b9aca00,%r9,%r10
  sub    %r9d,%r8d
  add    %r10,%rsi
  cmp    %r9,%rdx
  je     L74
L156:
  mov    %rsi,%rax
  lea    -0x1(%r8),%ecx
  add    $0x3b9aca00,%rax
  jns    L74
  mov    %rsi,%rax
  lea    -0x2(%r8),%ecx
  add    $0x77359400,%rax
  jns    L74
  mov    $0xb2d05e00,%eax
  lea    -0x3(%r8),%ecx
  add    %rsi,%rax
  jns    L74
  mov    $0xee6b2800,%eax
  lea    -0x4(%r8),%ecx
  add    %rsi,%rax
  jns    L74
  movabs $0x12a05f200,%rax
  lea    -0x5(%r8),%ecx
  add    %rsi,%rax
  jns    L74
  movabs $0x165a0bc00,%rax
  lea    -0x6(%r8),%ecx
  add    %rsi,%rax
L74:
  mov    %rax,(%rdi)
  mov    %ecx,0x8(%rdi)
L158:
  ret
  cs nopw 0x0(%rax,%rax,1)
L31:
  cmp    $0x3b9ac9ff,%rsi
  jle    L158
  lea    -0x3b9aca00(%rsi),%rcx
  mov    0x8(%rdi),%r8d
  movabs $0x44b82fa09b5a53,%r9
  mov    %rcx,%rdx
  shr    $0x9,%rdx
  mov    %rdx,%rax
  mul    %r9
  movabs $0x165a0bbff,%rax
  shr    $0xb,%rdx
  add    $0x1,%rdx
  cmp    %rax,%rcx
  jbe    L49
  movq   %rcx,%xmm7
  movd   %r8d,%xmm4
  movq   %rsi,%xmm3
  mov    %rdx,%rcx
  pshufd $0x0,%xmm4,%xmm2
  punpcklqdq %xmm7,%xmm3
  shr    $0x2,%rcx
  xor    %eax,%eax
  paddd  D2(%rip),%xmm2
  movdqa D67(%rip),%xmm7
  movdqa D69(%rip),%xmm6
  movdqa D84(%rip),%xmm5
  movdqa D0(%rip),%xmm4
  nop
L115:
  movdqa %xmm2,%xmm1
  movdqa %xmm3,%xmm0
  paddd  %xmm7,%xmm2
  add    $0x1,%eax
  paddq  %xmm6,%xmm3
  paddq  %xmm5,%xmm0
  paddd  %xmm4,%xmm1
  cmp    %ecx,%eax
  jne    L115
  mov    %rdx,%r9
  pshufd $0xff,%xmm1,%xmm1
  movhlps %xmm0,%xmm5
  and    $0xfffffffffffffffc,%r9
  movd   %xmm1,%ecx
  movq   %xmm5,%rax
  imul   $0xffffffffc4653600,%r9,%r10
  add    %r9d,%r8d
  add    %r10,%rsi
  cmp    %r9,%rdx
  je     L74
  lea    -0x3b9aca00(%rsi),%rcx
L49:
  mov    %rcx,%rax
  lea    0x1(%r8),%ecx
  cmp    $0x3b9ac9ff,%rax
  jle    L74
  lea    -0x77359400(%rsi),%rax
  lea    0x2(%r8),%ecx
  cmp    $0x3b9ac9ff,%rax
  jle    L74
  movabs $0xffffffff4d2fa200,%rax
  lea    0x3(%r8),%ecx
  add    %rsi,%rax
  cmp    $0x3b9ac9ff,%rax
  jle    L74
  movabs $0xffffffff1194d800,%rax
  lea    0x4(%r8),%ecx
  add    %rsi,%rax
  cmp    $0x3b9ac9ff,%rax
  jle    L74
  movabs $0xfffffffed5fa0e00,%rax
  lea    0x5(%r8),%ecx
  add    %rsi,%rax
  cmp    $0x3b9ac9ff,%rax
  jle    L74
  movabs $0xfffffffe9a5f4400,%rax
  lea    0x6(%r8),%ecx
  add    %rsi,%rax
  mov    %ecx,0x8(%rdi)
  mov    %rax,(%rdi)
  jmp    L158
```

tool_calls: name: disassemble_data
arguments: data_label: D16
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D59
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D28
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D34
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D2
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D67
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D69
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D84
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D0
type_guessed: byte[16]

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

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

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

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

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

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

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

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

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

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