user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<test_fcmov>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  movsd  D126(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  D26(%rip),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movl   $0x0,-0x64(%rbp)
  jmp    L29
L25:
  movl   $0x0,-0x68(%rbp)
  mov    -0x64(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L6
  orl    $0x1,-0x68(%rbp)
L6:
  mov    -0x64(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L34
  orl    $0x40,-0x68(%rbp)
L34:
  movsd  -0x60(%rbp),%xmm0
  fldl   -0x58(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  fldl   -0x78(%rbp)
  push   -0x68(%rbp)
  popf
  fcmovb %st(1),%st
  fstp   %st(1)
  fstpl  -0x30(%rbp)
  mov    -0x30(%rbp),%rdx
  mov    -0x68(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%edx
  lea    D128(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%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   -0x68(%rbp)
  popf
  fcmove %st(1),%st
  fstp   %st(1)
  fstpl  -0x28(%rbp)
  mov    -0x28(%rbp),%rdx
  mov    -0x68(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%edx
  lea    D91(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%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   -0x68(%rbp)
  popf
  fcmovbe %st(1),%st
  fstp   %st(1)
  fstpl  -0x20(%rbp)
  mov    -0x20(%rbp),%rdx
  mov    -0x68(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%edx
  lea    D67(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%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   -0x68(%rbp)
  popf
  fcmovnb %st(1),%st
  fstp   %st(1)
  fstpl  -0x18(%rbp)
  mov    -0x18(%rbp),%rdx
  mov    -0x68(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%edx
  lea    D213(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%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   -0x68(%rbp)
  popf
  fcmovne %st(1),%st
  fstp   %st(1)
  fstpl  -0x10(%rbp)
  mov    -0x10(%rbp),%rdx
  mov    -0x68(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%edx
  lea    D98(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%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   -0x68(%rbp)
  popf
  fcmovnbe %st(1),%st
  fstp   %st(1)
  fstpl  -0x8(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x68(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%edx
  lea    D195(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x64(%rbp)
L29:
  cmpl   $0x3,-0x64(%rbp)
  jle    L25
  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    D122(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%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    D122(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%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    D206(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%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    D206(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  nop
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D126
type_guessed: f64
name: retrieve_data
arguments: label: D26
type_guessed: f64
name: retrieve_data
arguments: label: D128
type_guessed: string
name: retrieve_data
arguments: label: D66
type_guessed: string
name: retrieve_data
arguments: label: D91
type_guessed: string
name: retrieve_data
arguments: label: D67
type_guessed: string
name: retrieve_data
arguments: label: D213
type_guessed: string
name: retrieve_data
arguments: label: D98
type_guessed: string
name: retrieve_data
arguments: label: D195
type_guessed: string
name: retrieve_data
arguments: label: D122
type_guessed: string
name: retrieve_data
arguments: label: D206
type_guessed: string

tool: D126: 1

tool: D26: 2

tool: D128: b

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


tool: D91: e

tool: D67: be

tool: D213: nb

tool: D98: ne

tool: D195: nbe

tool: D122: u

tool: D206: nu

assistant: ```c
void test_fcmov(void) {
  double a, b;
  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("push %3\n"
          "popf\n"
          "fcmov"
          "b"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"(eflags));
      printf("fcmov%s eflags=0x%04x-> %f\n", "b", eflags, res);
    };
    {
      double res;
      asm("push %3\n"
          "popf\n"
          "fcmov"
          "e"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"(eflags));
      printf("fcmov%s eflags=0x%04x-> %f\n", "e", eflags, res);
    };
    {
      double res;
      asm("push %3\n"
          "popf\n"
          "fcmov"
          "be"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"(eflags));
      printf("fcmov%s eflags=0x%04x-> %f\n", "be", eflags, res);
    };
    {
      double res;
      asm("push %3\n"
          "popf\n"
          "fcmov"
          "nb"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"(eflags));
      printf("fcmov%s eflags=0x%04x-> %f\n", "nb", eflags, res);
    };
    {
      double res;
      asm("push %3\n"
          "popf\n"
          "fcmov"
          "ne"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"(eflags));
      printf("fcmov%s eflags=0x%04x-> %f\n", "ne", eflags, res);
    };
    {
      double res;
      asm("push %3\n"
          "popf\n"
          "fcmov"
          "nbe"
          " %2, %0\n"
          : "=t"(res)
          : "0"(a), "u"(b), "g"(eflags));
      printf("fcmov%s eflags=0x%04x-> %f\n", "nbe", eflags, res);
    };
  }
  {
    double res;
    asm("push %3\n"
        "popf\n"
        "fcmov"
        "u"
        " %2, %0\n"
        : "=t"(res)
        : "0"(a), "u"(b), "g"(0));
    printf("fcmov%s eflags=0x%04x-> %f\n", "u", 0, res);
  };
  {
    double res;
    asm("push %3\n"
        "popf\n"
        "fcmov"
        "u"
        " %2, %0\n"
        : "=t"(res)
        : "0"(a), "u"(b), "g"(0x0004));
    printf("fcmov%s eflags=0x%04x-> %f\n", "u", 0x0004, res);
  };
  {
    double res;
    asm("push %3\n"
        "popf\n"
        "fcmov"
        "nu"
        " %2, %0\n"
        : "=t"(res)
        : "0"(a), "u"(b), "g"(0));
    printf("fcmov%s eflags=0x%04x-> %f\n", "nu", 0, res);
  };
  {
    double res;
    asm("push %3\n"
        "popf\n"
        "fcmov"
        "nu"
        " %2, %0\n"
        : "=t"(res)
        : "0"(a), "u"(b), "g"(0x0004));
    printf("fcmov%s eflags=0x%04x-> %f\n", "nu", 0x0004, res);
  };
}
```