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

```asm
<march_cyclic>:
  endbr64
  sub    $0x28,%rsp
  comiss %xmm0,%xmm1
  movss  %xmm4,0x1c(%rsp)
  movss  %xmm5,0x18(%rsp)
  setae  %dil
  movss  %xmm2,0xc(%rsp)
  movzbl %dil,%edi
  movss  %xmm3,0x8(%rsp)
  movss  %xmm1,0x10(%rsp)
  movss  %xmm0,0x14(%rsp)
  call   <assert@plt>
  movss  0x8(%rsp),%xmm7
  xor    %edi,%edi
  comiss 0x10(%rsp),%xmm7
  setae  %dil
  call   <assert@plt>
  movss  0xc(%rsp),%xmm3
  xor    %edi,%edi
  comiss 0x8(%rsp),%xmm3
  setae  %dil
  call   <assert@plt>
  movss  0x14(%rsp),%xmm6
  ucomiss 0xc(%rsp),%xmm6
  movss  0x18(%rsp),%xmm5
  movss  0x1c(%rsp),%xmm4
  jp     L83
  jne    L83
  movss  D8(%rip),%xmm0
  movss  D3(%rip),%xmm1
  movaps %xmm0,%xmm2
  subss  %xmm5,%xmm2
  mulss  %xmm1,%xmm2
  comiss %xmm4,%xmm2
  jae    L15
  mulss  %xmm1,%xmm5
  movaps %xmm5,%xmm3
  addss  %xmm1,%xmm3
  comiss %xmm3,%xmm4
  jae    L82
L10:
  movaps %xmm3,%xmm1
  movaps %xmm4,%xmm0
  subss  %xmm2,%xmm3
  subss  %xmm2,%xmm0
  subss  %xmm4,%xmm1
  mulss  0x8(%rsp),%xmm0
  mulss  0x10(%rsp),%xmm1
  addss  %xmm1,%xmm0
  divss  %xmm3,%xmm0
L37:
  add    $0x28,%rsp
  ret
  nopw   0x0(%rax,%rax,1)
L15:
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm4
  divss  %xmm1,%xmm4
  subss  %xmm4,%xmm0
  mulss  0x10(%rsp),%xmm4
  add    $0x28,%rsp
  mulss  %xmm6,%xmm0
  addss  %xmm4,%xmm0
  ret
  nopl   0x0(%rax,%rax,1)
L83:
  movss  0xc(%rsp),%xmm3
  movss  0x10(%rsp),%xmm1
  movss  D8(%rip),%xmm0
  subss  %xmm6,%xmm3
  subss  %xmm6,%xmm1
  movaps %xmm0,%xmm2
  subss  %xmm5,%xmm2
  divss  %xmm3,%xmm1
  mulss  %xmm1,%xmm2
  comiss %xmm4,%xmm2
  jae    L47
  movss  0x8(%rsp),%xmm1
  subss  %xmm6,%xmm1
  movaps %xmm1,%xmm6
  movaps %xmm0,%xmm1
  divss  %xmm3,%xmm6
  subss  %xmm6,%xmm1
  mulss  %xmm1,%xmm5
  movaps %xmm5,%xmm3
  addss  %xmm6,%xmm3
  comiss %xmm3,%xmm4
  jb     L10
  comiss %xmm6,%xmm0
  ja     L82
  movss  0xc(%rsp),%xmm0
  add    $0x28,%rsp
  ret
  nopl   0x0(%rax)
L47:
  comiss D31(%rip),%xmm1
  ja     L15
  movaps %xmm6,%xmm0
  add    $0x28,%rsp
  ret
  nopl   (%rax)
L82:
  movaps %xmm0,%xmm2
  subss  %xmm4,%xmm2
  addss  %xmm5,%xmm2
  divss  %xmm1,%xmm2
  subss  %xmm2,%xmm0
  mulss  0x8(%rsp),%xmm2
  mulss  0xc(%rsp),%xmm0
  addss  %xmm2,%xmm0
  jmp    L37
```

tool_calls: name: read_data
arguments: data_label: D8
type_infered: f32
name: read_data
arguments: data_label: D3
type_infered: f32
name: read_data
arguments: data_label: D31
type_infered: byte[4]

tool: D8: 1

tool: D3: 0.5

tool: {"D31": [0x00,0x00,0x00,0x00]}

assistant: ```c
float march_cyclic(float a, float b, float c, float d, float x, float y) {
  assert(a <= b);
  assert(b <= d);
  assert(d <= c);
  float alpha = c == a ? 0.5 : (b - a) / (c - a);
  if (x <= alpha * (1 - y)) {
    float ix = a;
    if (alpha > 0) {
      float y0 = (x + alpha * y) / alpha;
      ix = b * y0 + a * (1 - y0);
    }
    return ix;
  }
  float beta = c == a ? 0.5 : (d - a) / (c - a);
  if (x >= beta + (1 - beta) * y) {
    float ix = c;
    if (beta < 1) {
      float y0 = (1 - x + (1 - beta) * y) / (1 - beta);
      ix = d * y0 + c * (1 - y0);
    }
    return ix;
  }
  float x0 = alpha * (1 - y);
  float x1 = beta + (1 - beta) * y;
  float ix = ((x - x0) * d + (x1 - x) * b) / (x1 - x0);
  return 1 * ix;
}
```