user: 这段汇编代码用C语言表示是什么样的？

```asm
<fmodf>:
  endbr64
  push   %r13
  movaps %xmm0,%xmm2
  push   %r12
  push   %rbp
  movd   %xmm1,%ebp
  push   %rbx
  sub    $0x18,%rsp
  add    %ebp,%ebp
  jne    L35
L199:
  mulss  %xmm1,%xmm2
  divss  %xmm2,%xmm2
  movaps %xmm2,%xmm0
L124:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nop
L35:
  movd   %xmm0,%ebx
  movss  %xmm0,0xc(%rsp)
  movd   %xmm0,%r12d
  movaps %xmm1,%xmm0
  sar    $0x17,%ebx
  movd   %xmm1,%r13d
  movss  %xmm1,0x8(%rsp)
  call   <isnan@plt>
  movzbl %bl,%ebx
  movss  0x8(%rsp),%xmm1
  movss  0xc(%rsp),%xmm2
  cmp    $0xff,%ebx
  je     L199
  test   %rax,%rax
  jne    L199
  lea    (%r12,%r12,1),%eax
  cmp    %eax,%ebp
  jge    L229
  test   %ebx,%ebx
  jne    L108
  mov    %r12d,%edx
  shl    $0x9,%edx
  js     L252
  nopl   (%rax)
L188:
  sub    $0x1,%ebx
  add    %edx,%edx
  jns    L188
  mov    $0x1,%ecx
  mov    %r12d,%eax
  sub    %ebx,%ecx
  shl    %cl,%eax
L252:
  mov    %r13d,%edx
  sar    $0x17,%edx
  and    $0xff,%edx
  jne    L125
  mov    %r13d,%ecx
  shl    $0x9,%ecx
  js     L47
  nopl   (%rax)
L31:
  sub    $0x1,%edx
  add    %ecx,%ecx
  jns    L31
  mov    $0x1,%ecx
  mov    %r13d,%ebp
  sub    %edx,%ecx
  shl    %cl,%ebp
L47:
  cmp    %edx,%ebx
  jg     L29
  jmp    L41
  nopl   0x0(%rax)
L104:
  je     L65
L196:
  sub    $0x1,%ebx
  lea    (%rcx,%rcx,1),%eax
  cmp    %edx,%ebx
  je     L23
L29:
  mov    %eax,%ecx
  sub    %ebp,%ecx
  jns    L104
  mov    %eax,%ecx
  jmp    L196
  cs nopw 0x0(%rax,%rax,1)
L229:
  movaps %xmm2,%xmm0
  jne    L124
L65:
  add    $0x18,%rsp
  pxor   %xmm0,%xmm0
  mulss  %xmm2,%xmm0
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L41:
  mov    %ebx,%edx
  xchg   %ax,%ax
L23:
  mov    %eax,%ecx
  sub    %ebp,%ecx
  js     L226
  mov    %ecx,%eax
  je     L65
L226:
  mov    %eax,%edi
  shr    $0x17,%edi
  jne    L112
  nopl   0x0(%rax)
L114:
  add    %eax,%eax
  sub    $0x1,%edx
  mov    %eax,%esi
  shr    $0x17,%esi
  je     L114
L112:
  test   %edx,%edx
  jle    L117
  lea    -0x800000(%rax),%ecx
  mov    %edx,%eax
  shl    $0x17,%eax
  or     %ecx,%eax
L34:
  and    $0x80000000,%r12d
  or     %eax,%r12d
  movd   %r12d,%xmm0
  jmp    L124
  nopl   0x0(%rax)
L108:
  mov    %r12d,%eax
  and    $0x7fffff,%eax
  or     $0x800000,%eax
  jmp    L252
  nopw   0x0(%rax,%rax,1)
L125:
  and    $0x7fffff,%r13d
  mov    %r13d,%ebp
  or     $0x800000,%ebp
  jmp    L47
  nopl   (%rax)
L117:
  mov    $0x1,%ecx
  sub    %edx,%ecx
  sar    %cl,%eax
  jmp    L34
```

assistant: ```c
float fmodf(float x, float y) {
  union {
    float f;
    uint32_t i;
  } ux = {x}, uy = {y};
  int ex = ux.i >> 23 & 0xff;
  int ey = uy.i >> 23 & 0xff;
  uint32_t sx = ux.i & 0x80000000;
  uint32_t i;
  uint32_t uxi = ux.i;
  if (uy.i << 1 == 0 || isnan(y) || ex == 0xff)
    return (x * y) / (x * y);
  if (uxi << 1 <= uy.i << 1) {
    if (uxi << 1 == uy.i << 1)
      return 0 * x;
    return x;
  }
  if (!ex) {
    for (i = uxi << 9; i >> 31 == 0; ex--, i <<= 1)
      ;
    uxi <<= -ex + 1;
  } else {
    uxi &= -1U >> 9;
    uxi |= 1U << 23;
  }
  if (!ey) {
    for (i = uy.i << 9; i >> 31 == 0; ey--, i <<= 1)
      ;
    uy.i <<= -ey + 1;
  } else {
    uy.i &= -1U >> 9;
    uy.i |= 1U << 23;
  }
  for (; ex > ey; ex--) {
    i = uxi - uy.i;
    if (i >> 31 == 0) {
      if (i == 0)
        return 0 * x;
      uxi = i;
    }
    uxi <<= 1;
  }
  i = uxi - uy.i;
  if (i >> 31 == 0) {
    if (i == 0)
      return 0 * x;
    uxi = i;
  }
  for (; uxi >> 23 == 0; uxi <<= 1, ex--)
    ;
  if (ex > 0) {
    uxi -= 1U << 23;
    uxi |= (uint32_t)ex << 23;
  } else {
    uxi >>= -ex + 1;
  }
  uxi |= sx;
  ux.i = uxi;
  return ux.f;
}
```