user: 下面的汇编指令对应的C源代码是什么：

```asm
<redislitePutVarint>:
  endbr64
  sub    $0x38,%rsp
  mov    %rdi,%rdx
  mov    %rsi,%rax
  mov    %fs:0x28,%rcx
  mov    %rcx,0x28(%rsp)
  movabs $0xff00000000000000,%rcx
  test   %rcx,%rsi
  jne    L80
  mov    %rsi,%rcx
  sar    $0x7,%rcx
  je     L204
  movzbl %cl,%ecx
  or     $0x80,%cl
  mov    %ecx,0x4(%rsp)
  mov    %rsi,%rcx
  sar    $0xe,%rcx
  je     L36
  movzbl %cl,%ecx
  or     $0x80,%cl
  mov    %ecx,0x8(%rsp)
  mov    %rsi,%rcx
  sar    $0x15,%rcx
  je     L129
  movzbl %cl,%ecx
  or     $0x80,%cl
  mov    %ecx,0xc(%rsp)
  mov    %rsi,%rcx
  sar    $0x1c,%rcx
  je     L66
  movzbl %cl,%ecx
  or     $0x80,%cl
  mov    %ecx,0x10(%rsp)
  mov    %rsi,%rcx
  sar    $0x23,%rcx
  je     L148
  movzbl %cl,%ecx
  or     $0x80,%cl
  mov    %ecx,0x14(%rsp)
  mov    %rsi,%rcx
  sar    $0x2a,%rcx
  je     L76
  movzbl %cl,%ecx
  or     $0x80,%cl
  sar    $0x31,%rsi
  mov    %ecx,0x18(%rsp)
  je     L41
  or     $0x80,%sil
  and    $0x7f,%eax
  mov    %cl,0x1(%rdi)
  mov    $0x8,%r8d
  mov    %esi,0x1c(%rsp)
  mov    $0x5,%ecx
  mov    %eax,(%rsp)
  mov    %sil,(%rdi)
L177:
  movslq %ecx,%rsi
  mov    (%rsp,%rsi,4),%esi
  mov    %sil,0x2(%rdx)
  lea    -0x1(%rcx),%esi
  test   %ecx,%ecx
  je     L87
  movslq %esi,%rsi
  mov    (%rsp,%rsi,4),%esi
  mov    %sil,0x3(%rdx)
  lea    -0x2(%rcx),%esi
  cmp    $0x1,%ecx
  je     L87
  movslq %esi,%rsi
  mov    (%rsp,%rsi,4),%esi
  mov    %sil,0x4(%rdx)
  lea    -0x3(%rcx),%esi
  cmp    $0x2,%ecx
  je     L87
  movslq %esi,%rsi
  mov    (%rsp,%rsi,4),%esi
  mov    %sil,0x5(%rdx)
  lea    -0x4(%rcx),%esi
  cmp    $0x3,%ecx
  je     L87
  movslq %esi,%rcx
  mov    (%rsp,%rcx,4),%ecx
  mov    %cl,0x6(%rdx)
  test   %esi,%esi
  je     L87
  mov    %al,0x7(%rdx)
L87:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L108
  mov    %r8d,%eax
  add    $0x38,%rsp
  ret
  nopl   (%rax)
L80:
  mov    %rax,%r11
  mov    %rax,%rdi
  mov    %rax,%r8
  mov    %rax,%r9
  sar    $0xf,%r11
  mov    %rax,%r10
  and    $0xff00,%eax
  sar    $0x1d,%r9
  movzbl %r11b,%r11d
  sar    $0x16,%r10
  movzbl %r9b,%r9d
  mov    %rsi,%rcx
  or     %r11,%rax
  movzbl %r10b,%r10d
  sar    $0x24,%r8
  mov    %sil,0x8(%rdx)
  shl    $0x8,%rax
  movzbl %r8b,%r8d
  sar    $0x2b,%rdi
  movq   D2(%rip),%xmm0
  sar    $0x32,%rsi
  or     %r10,%rax
  movzbl %dil,%edi
  sar    $0x39,%rcx
  shl    $0x8,%rax
  movzbl %sil,%esi
  movzbl %cl,%ecx
  or     %r9,%rax
  shl    $0x8,%rax
  or     %r8,%rax
  mov    $0x9,%r8d
  shl    $0x8,%rax
  or     %rdi,%rax
  shl    $0x8,%rax
  or     %rsi,%rax
  shl    $0x8,%rax
  or     %rcx,%rax
  movq   %rax,%xmm1
  por    %xmm1,%xmm0
  movq   %xmm0,(%rdx)
  jmp    L87
L66:
  mov    $0x4,%r8d
  mov    $0x3,%esi
  nopw   0x0(%rax,%rax,1)
L217:
  movslq %esi,%rcx
  and    $0x7f,%eax
  mov    (%rsp,%rcx,4),%ecx
  mov    %eax,(%rsp)
  mov    %cl,(%rdx)
  lea    -0x1(%rsi),%ecx
  movslq %ecx,%rcx
  mov    (%rsp,%rcx,4),%ecx
  mov    %cl,0x1(%rdx)
  lea    -0x2(%rsi),%ecx
  cmp    $0x1,%esi
  jne    L177
  jmp    L87
  nopl   0x0(%rax,%rax,1)
L204:
  and    $0x7f,%eax
  mov    $0x1,%r8d
  mov    %al,(%rdi)
  jmp    L87
  nopl   0x0(%rax,%rax,1)
L36:
  mov    $0x2,%r8d
  mov    $0x1,%esi
  jmp    L217
L129:
  mov    $0x3,%r8d
  mov    $0x2,%esi
  jmp    L217
L148:
  mov    $0x5,%r8d
  mov    $0x4,%esi
  jmp    L217
L76:
  mov    $0x6,%r8d
  mov    $0x5,%esi
  jmp    L217
L41:
  mov    $0x7,%r8d
  mov    $0x6,%esi
  jmp    L217
L108:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D2
data_type: byte[8]

tool: {"D2": [0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80]}

assistant: ```c
int redislitePutVarint(unsigned char *p, long long v) {
  int i, j, n;
  int buf[10];
  if (v & (((long long)0xff000000) << 32)) {
    p[8] = (int)v;
    v >>= 8;
    for (i = 7; i >= 0; i--) {
      p[i] = (int)((v & 0x7f) | 0x80);
      v >>= 7;
    }
    return 9;
  }
  n = 0;
  do {
    buf[n++] = (int)((v & 0x7f) | 0x80);
    v >>= 7;
  } while (v != 0);
  buf[0] &= 0x7f;
  for (i = 0, j = n - 1; j >= 0; j--, i++) {
    p[i] = buf[j];
  }
  return n;
}
```