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

```asm
<test_longlong_integer_to_float>:
  endbr64
  sub    $0x18,%rsp
  xor    %edi,%edi
  call   <ull2f@plt>
  pxor   %xmm2,%xmm2
  ucomiss %xmm2,%xmm0
  jp     L313
  jne    L313
L644:
  mov    $0xffffffffffffffff,%rdi
  call   <ull2f@plt>
  ucomiss D79(%rip),%xmm0
  jp     L546
  jne    L546
L433:
  movabs $0x7fffffffffffffff,%rdi
  call   <ull2f@plt>
  ucomiss D24(%rip),%xmm0
  jp     L158
  jne    L158
L638:
  movabs $0x8000000000000000,%rdi
  call   <ull2f@plt>
  ucomiss D24(%rip),%xmm0
  jp     L27
  jne    L27
L630:
  xor    %edi,%edi
  call   <ull2d@plt>
  pxor   %xmm3,%xmm3
  ucomisd %xmm3,%xmm0
  jp     L340
  jne    L340
L318:
  mov    $0xffffffffffffffff,%rdi
  call   <ull2d@plt>
  ucomisd D93(%rip),%xmm0
  jp     L156
  jne    L156
L10:
  movabs $0x7fffffffffffffff,%rdi
  call   <ull2d@plt>
  ucomisd D18(%rip),%xmm0
  jp     L617
  jne    L617
L242:
  movabs $0x8000000000000000,%rdi
  call   <ull2d@plt>
  ucomisd D18(%rip),%xmm0
  jp     L153
  jne    L153
L655:
  xor    %edi,%edi
  call   <ull2ld@plt>
  fldz
  fxch   %st(1)
  fucomip %st(1),%st
  fstp   %st(0)
  jp     L462
  jne    L462
L529:
  mov    $0xffffffffffffffff,%rdi
  call   <ull2ld@plt>
  fldt   0xcbd(%rip)        # 2030 <_fini+0x934>
  fxch   %st(1)
  fucomip %st(1),%st
  fstp   %st(0)
  jp     L409
  jne    L409
L249:
  movabs $0x7fffffffffffffff,%rdi
  call   <ull2ld@plt>
  fldt   0xca6(%rip)        # 2040 <_fini+0x944>
  fxch   %st(1)
  fucomip %st(1),%st
  fstp   %st(0)
  jp     L515
  jne    L515
L625:
  movabs $0x8000000000000000,%rdi
  call   <ull2ld@plt>
  flds   0xc43(%rip)        # 2004 <_fini+0x908>
  fxch   %st(1)
  fucomip %st(1),%st
  fstp   %st(0)
  jp     L426
  jne    L426
L440:
  xor    %edi,%edi
  call   <sll2f@plt>
  pxor   %xmm4,%xmm4
  ucomiss %xmm4,%xmm0
  jp     L304
  jne    L304
L570:
  mov    $0xffffffffffffffff,%rdi
  call   <sll2f@plt>
  ucomiss D102(%rip),%xmm0
  jp     L391
  jne    L391
L86:
  movabs $0x7fffffffffffffff,%rdi
  call   <sll2f@plt>
  movss  D24(%rip),%xmm1
  call   <fnear@plt>
  test   %eax,%eax
  je     L578
L131:
  movabs $0x8000000000000000,%rdi
  call   <sll2f@plt>
  ucomiss D71(%rip),%xmm0
  jp     L32
  jne    L32
L64:
  xor    %edi,%edi
  call   <sll2d@plt>
  pxor   %xmm5,%xmm5
  ucomisd %xmm5,%xmm0
  jp     L139
  jne    L139
L178:
  mov    $0xffffffffffffffff,%rdi
  call   <sll2d@plt>
  ucomisd D13(%rip),%xmm0
  jp     L627
  jne    L627
L582:
  movabs $0x7fffffffffffffff,%rdi
  call   <sll2d@plt>
  mov    D18(%rip),%rax
  movq   %rax,%xmm1
  call   <dnear@plt>
  test   %eax,%eax
  je     L192
L311:
  movabs $0x8000000000000000,%rdi
  call   <sll2d@plt>
  movsd  D1(%rip),%xmm1
  call   <dnear@plt>
  test   %eax,%eax
  je     L471
L485:
  xor    %edi,%edi
  call   <sll2ld@plt>
  fldz
  fxch   %st(1)
  fucomip %st(1),%st
  fstp   %st(0)
  jp     L346
  jne    L346
L292:
  mov    $0xffffffffffffffff,%rdi
  call   <sll2ld@plt>
  fld1
  fchs
  fxch   %st(1)
  fucomip %st(1),%st
  fstp   %st(0)
  jp     L464
  jne    L464
L300:
  movabs $0x7fffffffffffffff,%rdi
  call   <sll2ld@plt>
  push   $0x403d
  push   $0xfffffffffffffffe
  sub    $0x10,%rsp
  fstpt  (%rsp)
  call   <ldnear@plt>
  add    $0x20,%rsp
  test   %eax,%eax
  je     L351
L573:
  movabs $0x8000000000000000,%rdi
  call   <sll2ld@plt>
  flds   0xab7(%rip)        # 200c <_fini+0x910>
  fstpt  (%rsp)
  mov    (%rsp),%rax
  mov    0x8(%rsp),%edx
  push   %rdx
  push   %rax
  sub    $0x10,%rsp
  fstpt  (%rsp)
  call   <ldnear@plt>
  add    $0x20,%rsp
  test   %eax,%eax
  je     L274
  add    $0x18,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L313:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L644
  nopl   0x0(%rax)
L274:
  add    $0x18,%rsp
  jmp    1100 <abort@plt>
  nopl   0x0(%rax)
L351:
  call   <abort@plt>
  jmp    L573
  nopw   0x0(%rax,%rax,1)
L464:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L300
  nopl   0x0(%rax)
L346:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L292
  nopl   0x0(%rax)
L471:
  call   <abort@plt>
  jmp    L485
  nopw   0x0(%rax,%rax,1)
L192:
  call   <abort@plt>
  jmp    L311
  nopw   0x0(%rax,%rax,1)
L627:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L582
  nopl   0x0(%rax)
L139:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L178
  nopl   0x0(%rax)
L32:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L64
  nopl   0x0(%rax)
L578:
  call   <abort@plt>
  jmp    L131
  nopw   0x0(%rax,%rax,1)
L391:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L86
  nopl   0x0(%rax)
L304:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L570
  nopl   0x0(%rax)
L426:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L440
  nopl   0x0(%rax)
L515:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L625
  nopl   0x0(%rax)
L409:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L249
  nopl   0x0(%rax)
L462:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L529
  nopl   0x0(%rax)
L153:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L655
  nopl   0x0(%rax)
L617:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L242
  nopl   0x0(%rax)
L156:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L10
  nopl   0x0(%rax)
L340:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L318
  nopl   0x0(%rax)
L27:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L630
  nopl   0x0(%rax)
L158:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L638
  nopl   0x0(%rax)
L546:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L433
```

tool_calls: name: extract_symbolic_data
arguments: label: D79
type_guessed: byte[4]
name: extract_symbolic_data
arguments: label: D24
type_guessed: byte[4]
name: extract_symbolic_data
arguments: label: D93
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D18
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D102
type_guessed: byte[4]
name: extract_symbolic_data
arguments: label: D71
type_guessed: byte[4]
name: extract_symbolic_data
arguments: label: D13
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D1
type_guessed: byte[8]

tool: {"D79": [0x00,0x00,0x80,0x5f]}

tool: {"D24": [0x00,0x00,0x00,0x5f]}

tool: {"D93": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x43]}

tool: {"D18": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x43]}

tool: {"D102": [0x00,0x00,0x80,0xbf]}

tool: {"D71": [0x00,0x00,0x00,0xdf]}

tool: {"D13": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

tool: {"D1": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xc3]}

assistant: ```c
test_longlong_integer_to_float() {
  if (ull2f(0ULL) != (float)0ULL)
    abort();
  if (ull2f(~0ULL) != (float)~0ULL)
    abort();
  if (ull2f((~0ULL) >> 1) != (float)((~0ULL) >> 1))
    abort();
  if (ull2f(~((~0ULL) >> 1)) != (float)~((~0ULL) >> 1))
    abort();
  if (ull2d(0ULL) != (double)0ULL)
    abort();
  if (ull2d(~0ULL) != (double)~0ULL)
    abort();
  if (ull2d((~0ULL) >> 1) != (double)((~0ULL) >> 1))
    abort();
  if (ull2d(~((~0ULL) >> 1)) != (double)~((~0ULL) >> 1))
    abort();
  if (ull2ld(0ULL) != (long double)0ULL)
    abort();
  if (ull2ld(~0ULL) != (long double)~0ULL)
    abort();
  if (ull2ld((~0ULL) >> 1) != (long double)((~0ULL) >> 1))
    abort();
  if (ull2ld(~((~0ULL) >> 1)) != (long double)~((~0ULL) >> 1))
    abort();
  if (sll2f(0LL) != (float)0LL)
    abort();
  if (sll2f(~0LL) != (float)~0LL)
    abort();
  if (!fnear(sll2f((long long int)((~0ULL) >> 1)), (float)(long long int)((~0ULL) >> 1)))
    abort();
  if (sll2f((long long int)(~((~0ULL) >> 1))) != (float)(long long int)~((~0ULL) >> 1))
    abort();
  if (sll2d(0LL) != (double)0LL)
    abort();
  if (sll2d(~0LL) != (double)~0LL)
    abort();
  if (!dnear(sll2d((long long int)((~0ULL) >> 1)), (double)(long long int)((~0ULL) >> 1)))
    abort();
  if (!dnear(sll2d((long long int)~((~0ULL) >> 1)), (double)(long long int)~((~0ULL) >> 1)))
    abort();
  if (sll2ld(0LL) != (long double)0LL)
    abort();
  if (sll2ld(~0LL) != (long double)~0LL)
    abort();
  if (!ldnear(sll2ld((long long int)((~0ULL) >> 1)), (long double)(long long int)((~0ULL) >> 1)))
    abort();
  if (!ldnear(sll2ld((long long int)~((~0ULL) >> 1)), (long double)(long long int)~((~0ULL) >> 1)))
    abort();
}
```