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

```asm
<float_i2f>:
  endbr64
  push   %r15
  xor    %eax,%eax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,-0x4(%rsp)
  test   %edi,%edi
  je     L118
  movslq %edi,%rax
  mov    %rax,%rdx
  neg    %rdx
  test   %edi,%edi
  cmovs  %rdx,%rax
  shl    $0x17,%rax
  mov    %eax,%r15d
  je     L0
  movl   $0x0,-0x8(%rsp)
  xor    %edx,%edx
  xor    %r8d,%r8d
  mov    $0x33000000,%esi
  jmp    L58
  nop
L117:
  test   %edx,%edx
  jne    L116
  mov    %r8d,-0x8(%rsp)
  mov    %edi,%edx
  xor    %r8d,%r8d
L50:
  test   %rax,%rax
  je     L90
L38:
  mov    -0x14(%rsp),%edi
  mov    %r14d,-0xc(%rsp)
  mov    %r13d,%r14d
  mov    %r12d,%r13d
  mov    %ebp,%r12d
  mov    %ebx,%ebp
  mov    %r11d,%ebx
  mov    %r10d,%r11d
  mov    %r9d,%r10d
  mov    -0x10(%rsp),%r9d
  mov    %edi,-0x10(%rsp)
  mov    -0x18(%rsp),%edi
  mov    %edi,-0x14(%rsp)
  mov    -0x1c(%rsp),%edi
  mov    %edi,-0x18(%rsp)
  mov    -0x20(%rsp),%edi
  mov    %edi,-0x1c(%rsp)
  mov    -0x24(%rsp),%edi
  mov    %edi,-0x20(%rsp)
  mov    -0x28(%rsp),%edi
  mov    %edi,-0x24(%rsp)
  mov    -0x2c(%rsp),%edi
  mov    %edi,-0x28(%rsp)
  mov    -0x30(%rsp),%edi
  mov    %edi,-0x2c(%rsp)
  mov    -0x34(%rsp),%edi
  mov    %edi,-0x30(%rsp)
  mov    -0x38(%rsp),%edi
  mov    %edi,-0x34(%rsp)
  mov    -0x3c(%rsp),%edi
  mov    %edi,-0x38(%rsp)
  mov    -0x40(%rsp),%edi
  mov    %edi,-0x3c(%rsp)
  mov    -0x44(%rsp),%edi
  mov    %r15d,-0x44(%rsp)
  mov    %ecx,%r15d
  mov    %edi,-0x40(%rsp)
L58:
  shr    %rax
  add    $0x800000,%esi
  mov    %eax,%edi
  mov    %eax,%ecx
  and    $0x1,%edi
  test   %r8d,%r8d
  jne    L117
  test   %edx,%edx
  je     L92
  test   %edi,%edi
  jne    L2
  mov    %edx,%r8d
  xor    %edx,%edx
  cmpl   $0x0,-0x8(%rsp)
  je     L50
  nopw   0x0(%rax,%rax,1)
L2:
  mov    -0x8(%rsp),%edx
L116:
  mov    %edx,-0x8(%rsp)
  add    $0x1,%ecx
  mov    %edi,%edx
  mov    $0x1,%r8d
  test   %rax,%rax
  jne    L38
L90:
  mov    -0x4(%rsp),%eax
  and    $0x80000000,%eax
  xor    %esi,%eax
  add    -0xc(%rsp),%eax
L118:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L92:
  mov    %edi,%edx
  jmp    L50
  nopw   0x0(%rax,%rax,1)
L0:
  mov    $0x33000000,%esi
  jmp    L90
```

assistant: ```c
unsigned float_i2f(int x) {
  unsigned long long lx = x;
  int sign = x & 0x80000000;
  int exp = 0x33000000;
  int round = 0;
  int last = 0;
  int now = 0;
  int tempround;
  int lans0, lans1, lans2, lans3, lans4, lans5, lans6, lans7, lans8, lans9, lans10, lans11, lans12, lans13, lans14, lans15, lans16, lans17, lans18, lans19, lans20, lans21, lans22, lans23, lans24;
  if (x)
    ;
  else
    return 0;
  if (sign)
    lx = -lx;
  lx <<= 23;
  lans0 = lx;
  while (lx) {
    exp += 0x800000;
    if (last)
      round = 1;
    last = now;
    lx >>= 1;
    now = lx & 1;
    lans24 = lans23;
    lans23 = lans22;
    lans22 = lans21;
    lans21 = lans20;
    lans20 = lans19;
    lans19 = lans18;
    lans18 = lans17;
    lans17 = lans16;
    lans16 = lans15;
    lans15 = lans14;
    lans14 = lans13;
    lans13 = lans12;
    lans12 = lans11;
    lans11 = lans10;
    lans10 = lans9;
    lans9 = lans8;
    lans8 = lans7;
    lans7 = lans6;
    lans6 = lans5;
    lans5 = lans4;
    lans4 = lans3;
    lans3 = lans2;
    lans2 = lans1;
    lans1 = lans0;
    lans0 = lx;
    if (last) {
      tempround = round;
      if (now)
        tempround = 1;
      if (tempround)
        ++lans0;
    }
  }
  return (sign ^ exp) + lans24;
}
```