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

```asm
<test_fcmov>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  movsd  D13(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  D185(%rip),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movq   $0x0,-0x68(%rbp)
  jmp    L0
L31:
  movq   $0x0,-0x70(%rbp)
  mov    -0x68(%rbp),%rax
  and    $0x1,%eax
  test   %rax,%rax
  je     L38
  orq    $0x1,-0x70(%rbp)
L38:
  mov    -0x68(%rbp),%rax
  and    $0x2,%eax
  test   %rax,%rax
  je     L1
  orq    $0x40,-0x70(%rbp)
L1:
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   -0x70(%rbp)
  popf
  fcmovb %st(1),%st
  fstp   %st(1)
  fstpl  -0x30(%rbp)
  mov    -0x30(%rbp),%rdx
  mov    -0x70(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdx
  lea    D62(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   -0x70(%rbp)
  popf
  fcmove %st(1),%st
  fstp   %st(1)
  fstpl  -0x28(%rbp)
  mov    -0x28(%rbp),%rdx
  mov    -0x70(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdx
  lea    D179(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   -0x70(%rbp)
  popf
  fcmovbe %st(1),%st
  fstp   %st(1)
  fstpl  -0x20(%rbp)
  mov    -0x20(%rbp),%rdx
  mov    -0x70(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdx
  lea    D182(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   -0x70(%rbp)
  popf
  fcmovnb %st(1),%st
  fstp   %st(1)
  fstpl  -0x18(%rbp)
  mov    -0x18(%rbp),%rdx
  mov    -0x70(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdx
  lea    D173(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   -0x70(%rbp)
  popf
  fcmovne %st(1),%st
  fstp   %st(1)
  fstpl  -0x10(%rbp)
  mov    -0x10(%rbp),%rdx
  mov    -0x70(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdx
  lea    D172(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   -0x70(%rbp)
  popf
  fcmovnbe %st(1),%st
  fstp   %st(1)
  fstpl  -0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x70(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdx
  lea    D63(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addq   $0x1,-0x68(%rbp)
L0:
  cmpq   $0x3,-0x68(%rbp)
  jle    L31
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   $0x0
  popf
  fcmovu %st(1),%st
  fstp   %st(1)
  fstpl  -0x50(%rbp)
  mov    -0x50(%rbp),%rax
  movq   %rax,%xmm0
  mov    $0x0,%edx
  lea    D151(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   $0x4
  popf
  fcmovu %st(1),%st
  fstp   %st(1)
  fstpl  -0x48(%rbp)
  mov    -0x48(%rbp),%rax
  movq   %rax,%xmm0
  mov    $0x4,%edx
  lea    D151(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   $0x0
  popf
  fcmovnu %st(1),%st
  fstp   %st(1)
  fstpl  -0x40(%rbp)
  mov    -0x40(%rbp),%rax
  movq   %rax,%xmm0
  mov    $0x0,%edx
  lea    D190(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   $0x4
  popf
  fcmovnu %st(1),%st
  fstp   %st(1)
  fstpl  -0x38(%rbp)
  mov    -0x38(%rbp),%rax
  movq   %rax,%xmm0
  mov    $0x4,%edx
  lea    D190(%rip),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D13
datatype: f64
name: disassemble_data
arguments: data_label: D185
datatype: f64
name: disassemble_data
arguments: data_label: D62
datatype: string
name: disassemble_data
arguments: data_label: D158
datatype: string
name: disassemble_data
arguments: data_label: D179
datatype: string
name: disassemble_data
arguments: data_label: D182
datatype: string
name: disassemble_data
arguments: data_label: D173
datatype: string
name: disassemble_data
arguments: data_label: D172
datatype: string
name: disassemble_data
arguments: data_label: D63
datatype: string
name: disassemble_data
arguments: data_label: D151
datatype: string
name: disassemble_data
arguments: data_label: D190
datatype: string

tool: D13: 1

tool: D185: 2

tool: D62: b

tool: D158: fcmov%s eflags=0x%04llx-> %f


tool: D179: e

tool: D182: be

tool: D173: nb

tool: D172: ne

tool: D63: nbe

tool: D151: u

tool: D190: nu

assistant: ```c
void test_fcmov(void) {
  double a, b;
  long long int eflags, i;
  a = 1.0;
  b = 2.0;
  for (i = 0; i < 4; i++) {
    eflags = 0;
    if (i & 1)
      eflags |= 0x0001;
    if (i & 2)
      eflags |= 0x0040;
    {
      double res;
      asm("pushq %3\n"
          "popfq\n"
          "fcmov"
          "b"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"((long long int)eflags));
      printf("fcmov%s eflags=0x%04llx-> %f\n", "b", (long long int)eflags, res);
    };
    {
      double res;
      asm("pushq %3\n"
          "popfq\n"
          "fcmov"
          "e"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"((long long int)eflags));
      printf("fcmov%s eflags=0x%04llx-> %f\n", "e", (long long int)eflags, res);
    };
    {
      double res;
      asm("pushq %3\n"
          "popfq\n"
          "fcmov"
          "be"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"((long long int)eflags));
      printf("fcmov%s eflags=0x%04llx-> %f\n", "be", (long long int)eflags, res);
    };
    {
      double res;
      asm("pushq %3\n"
          "popfq\n"
          "fcmov"
          "nb"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"((long long int)eflags));
      printf("fcmov%s eflags=0x%04llx-> %f\n", "nb", (long long int)eflags, res);
    };
    {
      double res;
      asm("pushq %3\n"
          "popfq\n"
          "fcmov"
          "ne"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"((long long int)eflags));
      printf("fcmov%s eflags=0x%04llx-> %f\n", "ne", (long long int)eflags, res);
    };
    {
      double res;
      asm("pushq %3\n"
          "popfq\n"
          "fcmov"
          "nbe"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"((long long int)eflags));
      printf("fcmov%s eflags=0x%04llx-> %f\n", "nbe", (long long int)eflags, res);
    };
  }
  {
    double res;
    asm("pushq %3\n"
        "popfq\n"
        "fcmov"
        "u"
        " %2, %0\n"
        : "=t"(res)
        : "0"(a), "u"(b), "g"((long long int)0));
    printf("fcmov%s eflags=0x%04llx-> %f\n", "u", (long long int)0, res);
  };
  {
    double res;
    asm("pushq %3\n"
        "popfq\n"
        "fcmov"
        "u"
        " %2, %0\n"
        : "=t"(res)
        : "0"(a), "u"(b), "g"((long long int)0x0004));
    printf("fcmov%s eflags=0x%04llx-> %f\n", "u", (long long int)0x0004, res);
  };
  {
    double res;
    asm("pushq %3\n"
        "popfq\n"
        "fcmov"
        "nu"
        " %2, %0\n"
        : "=t"(res)
        : "0"(a), "u"(b), "g"((long long int)0));
    printf("fcmov%s eflags=0x%04llx-> %f\n", "nu", (long long int)0, res);
  };
  {
    double res;
    asm("pushq %3\n"
        "popfq\n"
        "fcmov"
        "nu"
        " %2, %0\n"
        : "=t"(res)
        : "0"(a), "u"(b), "g"((long long int)0x0004));
    printf("fcmov%s eflags=0x%04llx-> %f\n", "nu", (long long int)0x0004, res);
  };
}
```