user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<ILibToUpper>:
  endbr64
  mov    %rdi,%rcx
  test   %esi,%esi
  jle    L28
  lea    0x1(%rdi),%rdi
  mov    %rdx,%rax
  sub    %rdi,%rax
  cmp    $0xe,%rax
  jbe    L110
  lea    -0x1(%rsi),%eax
  cmp    $0xe,%eax
  jbe    L110
  mov    %esi,%edi
  movdqa D28(%rip),%xmm6
  xor    %eax,%eax
  pxor   %xmm3,%xmm3
  shr    $0x4,%edi
  movdqa D9(%rip),%xmm5
  movdqa D24(%rip),%xmm4
  shl    $0x4,%rdi
  cs nopw 0x0(%rax,%rax,1)
L42:
  movdqu (%rcx,%rax,1),%xmm2
  movdqa %xmm2,%xmm0
  movdqa %xmm2,%xmm1
  paddb  %xmm6,%xmm0
  paddb  %xmm4,%xmm1
  psubusb %xmm5,%xmm0
  pcmpeqb %xmm3,%xmm0
  pand   %xmm0,%xmm1
  pandn  %xmm2,%xmm0
  por    %xmm1,%xmm0
  movups %xmm0,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rdi,%rax
  jne    L42
  mov    %esi,%eax
  and    $0xfffffff0,%eax
  test   $0xf,%sil
  je     L28
  mov    %eax,%r8d
  movzbl (%rcx,%r8,1),%edi
  lea    -0x61(%rdi),%r10d
  lea    -0x20(%rdi),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%edi
  mov    %dil,(%rdx,%r8,1)
  lea    0x1(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0x2(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0x3(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0x4(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0x5(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0x6(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0x7(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0x8(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0x9(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0xa(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0xb(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0xc(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  mov    %r8b,(%rdx,%rdi,1)
  lea    0xd(%rax),%edi
  cmp    %edi,%esi
  jle    L28
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%r8d
  lea    -0x61(%r8),%r10d
  lea    -0x20(%r8),%r9d
  cmp    $0x1a,%r10b
  cmovb  %r9d,%r8d
  add    $0xe,%eax
  mov    %r8b,(%rdx,%rdi,1)
  cmp    %eax,%esi
  jle    L28
  cltq
  movzbl (%rcx,%rax,1),%ecx
  lea    -0x61(%rcx),%edi
  lea    -0x20(%rcx),%esi
  cmp    $0x1a,%dil
  cmovb  %esi,%ecx
  mov    %cl,(%rdx,%rax,1)
  ret
  nopw   0x0(%rax,%rax,1)
L135:
  mov    %dil,(%rdx,%rax,1)
  add    $0x1,%rax
  cmp    %rax,%rsi
  jne    L168
L28:
  ret
  cs nopw 0x0(%rax,%rax,1)
L110:
  mov    %esi,%esi
  xor    %eax,%eax
L168:
  movzbl (%rcx,%rax,1),%edi
  lea    -0x61(%rdi),%r8d
  cmp    $0x19,%r8b
  ja     L135
  sub    $0x20,%edi
  mov    %dil,(%rdx,%rax,1)
  add    $0x1,%rax
  cmp    %rsi,%rax
  jne    L168
  ret
```

tool_calls: name: parse_data
arguments: tag: D28
datatype: byte[16]
name: parse_data
arguments: tag: D9
datatype: byte[16]
name: parse_data
arguments: tag: D24
datatype: byte[16]

tool: {"D28": [0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f]}

tool: {"D9": [0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19]}

tool: {"D24": [0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0]}

assistant: ```c
void ILibToUpper(const char *in, int inLength, char *out) {
  int i;
  for (i = 0; i < inLength; ++i) {
    if (in[i] >= 97 && in[i] <= 122) {
      out[i] = in[i] - 32;
    } else {
      out[i] = in[i];
    }
  }
}
```