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

```asm
<tst_integer>:
  endbr64
  sub    $0x8,%rsp
  pxor   %xmm0,%xmm0
  call   <f2u@plt>
  test   %eax,%eax
  jne    L327
L230:
  movss  D157(%rip),%xmm0
  call   <f2u@plt>
  test   %eax,%eax
  jne    L89
L61:
  movss  D44(%rip),%xmm0
  call   <f2u@plt>
  cmp    $0x1,%eax
  je     L111
  xor    %eax,%eax
  call   <abort@plt>
L111:
  movss  D254(%rip),%xmm0
  call   <f2u@plt>
  cmp    $0x1,%eax
  je     L16
  xor    %eax,%eax
  call   <abort@plt>
L16:
  movss  D19(%rip),%xmm0
  call   <f2u@plt>
  movss  D19(%rip),%xmm0
  cmp    $0x7fffffff,%eax
  jne    L349
L205:
  call   <f2u@plt>
  cmp    $0x80000000,%eax
  je     L155
  xor    %eax,%eax
  call   <abort@plt>
L155:
  pxor   %xmm0,%xmm0
  call   <d2u@plt>
  test   %eax,%eax
  jne    L243
L419:
  mov    D177(%rip),%rax
  movq   %rax,%xmm0
  call   <d2u@plt>
  test   %eax,%eax
  jne    L156
L337:
  mov    D199(%rip),%rax
  movq   %rax,%xmm0
  call   <d2u@plt>
  cmp    $0x1,%eax
  je     L204
  xor    %eax,%eax
  call   <abort@plt>
L204:
  mov    D47(%rip),%rax
  movq   %rax,%xmm0
  call   <d2u@plt>
  cmp    $0x1,%eax
  je     L237
  xor    %eax,%eax
  call   <abort@plt>
L237:
  movsd  D242(%rip),%xmm0
  call   <d2u@plt>
  cmp    $0xffffffff,%eax
  je     L331
  xor    %eax,%eax
  call   <abort@plt>
L331:
  mov    D266(%rip),%rax
  movq   %rax,%xmm0
  call   <d2u@plt>
  cmp    $0x7fffffff,%eax
  je     L130
  xor    %eax,%eax
  call   <abort@plt>
L130:
  movsd  D108(%rip),%xmm0
  call   <d2u@plt>
  cmp    $0x80000000,%eax
  je     L143
  xor    %eax,%eax
  call   <abort@plt>
L143:
  pxor   %xmm0,%xmm0
  call   <f2s@plt>
  test   %eax,%eax
  jne    L171
L376:
  movss  D157(%rip),%xmm0
  call   <f2s@plt>
  test   %eax,%eax
  jne    L338
L134:
  movss  D44(%rip),%xmm0
  call   <f2s@plt>
  cmp    $0x1,%eax
  je     L158
  xor    %eax,%eax
  call   <abort@plt>
L158:
  movss  D254(%rip),%xmm0
  call   <f2s@plt>
  cmp    $0x1,%eax
  je     L128
  xor    %eax,%eax
  call   <abort@plt>
L128:
  movss  D218(%rip),%xmm0
  call   <f2s@plt>
  test   %eax,%eax
  jne    L98
L14:
  movss  D160(%rip),%xmm0
  call   <f2s@plt>
  cmp    $0xffffffff,%eax
  je     L219
  xor    %eax,%eax
  call   <abort@plt>
L219:
  movss  D145(%rip),%xmm0
  call   <f2s@plt>
  cmp    $0xffffffff,%eax
  je     L279
  xor    %eax,%eax
  call   <abort@plt>
L279:
  movss  D60(%rip),%xmm0
  call   <f2s@plt>
  cmp    $0x80000000,%eax
  je     L64
  xor    %eax,%eax
  call   <abort@plt>
L64:
  pxor   %xmm0,%xmm0
  call   <d2s@plt>
  test   %eax,%eax
  jne    L132
L59:
  mov    D177(%rip),%rax
  movq   %rax,%xmm0
  call   <d2s@plt>
  test   %eax,%eax
  jne    L67
L138:
  mov    D199(%rip),%rax
  movq   %rax,%xmm0
  call   <d2s@plt>
  cmp    $0x1,%eax
  je     L216
  xor    %eax,%eax
  call   <abort@plt>
L216:
  mov    D47(%rip),%rax
  movq   %rax,%xmm0
  call   <d2s@plt>
  cmp    $0x1,%eax
  je     L110
  xor    %eax,%eax
  call   <abort@plt>
L110:
  movsd  D64(%rip),%xmm0
  call   <d2s@plt>
  test   %eax,%eax
  jne    L377
L154:
  movsd  D180(%rip),%xmm0
  call   <d2s@plt>
  cmp    $0xffffffff,%eax
  je     L238
  xor    %eax,%eax
  call   <abort@plt>
L238:
  movsd  D183(%rip),%xmm0
  call   <d2s@plt>
  cmp    $0xffffffff,%eax
  je     L62
  xor    %eax,%eax
  call   <abort@plt>
L62:
  mov    D266(%rip),%rax
  movq   %rax,%xmm0
  call   <d2s@plt>
  cmp    $0x7fffffff,%eax
  je     L4
  xor    %eax,%eax
  call   <abort@plt>
L4:
  movsd  D68(%rip),%xmm0
  call   <d2s@plt>
  cmp    $0x80000000,%eax
  jne    L364
  add    $0x8,%rsp
  ret
  nopw   0x0(%rax,%rax,1)
L349:
  call   <f2u@plt>
  movss  D19(%rip),%xmm0
  cmp    $0x80000000,%eax
  je     L205
  xor    %eax,%eax
  call   <abort@plt>
  movss  D19(%rip),%xmm0
  jmp    L205
  nopl   0x0(%rax)
L364:
  xor    %eax,%eax
  add    $0x8,%rsp
  jmp    1090 <abort@plt>
  nopl   0x0(%rax,%rax,1)
L67:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L138
  nopl   0x0(%rax)
L132:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L59
  nopl   0x0(%rax)
L377:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L154
  nopl   0x0(%rax)
L243:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L419
  nopl   0x0(%rax)
L89:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L61
  nopl   0x0(%rax)
L327:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L230
  nopl   0x0(%rax)
L98:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L14
  nopl   0x0(%rax)
L338:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L134
  nopl   0x0(%rax)
L171:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L376
  nopl   0x0(%rax)
L156:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L337
```

tool_calls: name: read_data
arguments: tag: D157
type: f32
name: read_data
arguments: tag: D44
type: f32
name: read_data
arguments: tag: D254
type: f32
name: read_data
arguments: tag: D19
type: byte[4]
name: read_data
arguments: tag: D177
type: byte[8]
name: read_data
arguments: tag: D199
type: f32[2]
name: read_data
arguments: tag: D47
type: byte[8]
name: read_data
arguments: tag: D242
type: byte[8]
name: read_data
arguments: tag: D266
type: byte[8]
name: read_data
arguments: tag: D108
type: f32[2]
name: read_data
arguments: tag: D218
type: byte[4]
name: read_data
arguments: tag: D160
type: byte[4]
name: read_data
arguments: tag: D145
type: byte[4]
name: read_data
arguments: tag: D60
type: byte[4]
name: read_data
arguments: tag: D64
type: byte[8]
name: read_data
arguments: tag: D180
type: f32[2]
name: read_data
arguments: tag: D183
type: byte[8]
name: read_data
arguments: tag: D68
type: f32[2]

tool: D157: 0.999

tool: D44: 1

tool: D254: 1.99

tool: {"D19": [0x00,0x00,0x00,0x4f]}

tool: {"D177": [0x2b,0x87,0x16,0xd9,0xce,0xf7,0xef,0x3f]}

tool: {"D199": [0.0,1.875]}

tool: {"D47": [0xd7,0xa3,0x70,0x3d,0x0a,0xd7,0xff,0x3f]}

tool: {"D242": [0x00,0x00,0xe0,0xff,0xff,0xff,0xef,0x41]}

tool: {"D266": [0x00,0x00,0xc0,0xff,0xff,0xff,0xdf,0x41]}

tool: {"D108": [0.0,28.0]}

tool: {"D218": [0x77,0xbe,0x7f,0xbf]}

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

tool: {"D145": [0x52,0xb8,0xfe,0xbf]}

tool: {"D60": [0x00,0x00,0x00,0xcf]}

tool: {"D64": [0x2b,0x87,0x16,0xd9,0xce,0xf7,0xef,0xbf]}

tool: {"D180": [0.0,-1.875]}

tool: {"D183": [0xd7,0xa3,0x70,0x3d,0x0a,0xd7,0xff,0xbf]}

tool: {"D68": [0.0,-28.0]}

assistant: ```c
tst_integer() {
  if (f2u(0.0) != 0)
    abort();
  if (f2u(0.999) != 0)
    abort();
  if (f2u(1.0) != 1)
    abort();
  if (f2u(1.99) != 1)
    abort();
  if (f2u((float)((~0U) >> 1)) != (~0U) >> 1 && f2u((float)((~0U) >> 1)) != ((~0U) >> 1) + 1)
    abort();
  if (f2u((float)~((~0U) >> 1)) != ~((~0U) >> 1))
    abort();
  if (sizeof(double) >= 8) {
    if (d2u(0.0) != 0)
      abort();
    if (d2u(0.999) != 0)
      abort();
    if (d2u(1.0) != 1)
      abort();
    if (d2u(1.99) != 1)
      abort();
    if (d2u((double)(~0U)) != ~0U)
      abort();
    if (d2u((double)((~0U) >> 1)) != (~0U) >> 1)
      abort();
    if (d2u((double)~((~0U) >> 1)) != ~((~0U) >> 1))
      abort();
  }
  if (f2s(0.0) != 0)
    abort();
  if (f2s(0.999) != 0)
    abort();
  if (f2s(1.0) != 1)
    abort();
  if (f2s(1.99) != 1)
    abort();
  if (f2s(-0.999) != 0)
    abort();
  if (f2s(-1.0) != -1)
    abort();
  if (f2s(-1.99) != -1)
    abort();
  if (f2s((float)(int)~((~0U) >> 1)) != (int)~((~0U) >> 1))
    abort();
  if (sizeof(double) >= 8) {
    if (d2s(0.0) != 0)
      abort();
    if (d2s(0.999) != 0)
      abort();
    if (d2s(1.0) != 1)
      abort();
    if (d2s(1.99) != 1)
      abort();
    if (d2s(-0.999) != 0)
      abort();
    if (d2s(-1.0) != -1)
      abort();
    if (d2s(-1.99) != -1)
      abort();
    if (d2s((double)((~0U) >> 1)) != (~0U) >> 1)
      abort();
    if (d2s((double)(int)~((~0U) >> 1)) != (int)~((~0U) >> 1))
      abort();
  }
}
```