user: 请将以下的汇编代码转换成C语言代码:

```asm
<X360GammaToLinear>:
  endbr64
  sub    $0x18,%rsp
  call   <saturate@plt>
  movss  D97(%rip),%xmm1
  comiss %xmm0,%xmm1
  jbe    L56
  movss  D107(%rip),%xmm1
  comiss %xmm0,%xmm1
  jbe    L23
  mulss  D89(%rip),%xmm0
L35:
  mulss  D115(%rip),%xmm0
  add    $0x18,%rsp
  jmp    1070 <saturate@plt>
  nopl   0x0(%rax)
L56:
  movss  D137(%rip),%xmm1
  comiss %xmm0,%xmm1
  jbe    L15
  mulss  D61(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  D69(%rip),%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  mulss  D126(%rip),%xmm0
  call   <floor@plt>
  pxor   %xmm0,%xmm0
  movss  0xc(%rsp),%xmm1
  cvtsi2ss %rax,%xmm0
  addss  %xmm1,%xmm0
  jmp    L35
  nopl   0x0(%rax,%rax,1)
L15:
  mulss  D26(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  D133(%rip),%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  mulss  D117(%rip),%xmm0
  call   <floor@plt>
  pxor   %xmm0,%xmm0
  movss  0xc(%rsp),%xmm1
  cvtsi2ss %rax,%xmm0
  addss  %xmm1,%xmm0
  jmp    L35
  nopl   0x0(%rax)
L23:
  mulss  D60(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  D124(%rip),%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  mulss  D76(%rip),%xmm0
  call   <floor@plt>
  pxor   %xmm0,%xmm0
  movss  0xc(%rsp),%xmm1
  cvtsi2ss %rax,%xmm0
  addss  %xmm1,%xmm0
  jmp    L35
```

tool_calls: name: unpack_data
arguments: data_tag: D97
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D107
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D89
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D115
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D137
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D61
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D69
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D126
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D26
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D133
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D117
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D60
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D124
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D76
type_infered: byte[4]

tool: {"D97": [0xc1,0xc0,0xc0,0x3e]}

tool: {"D107": [0x81,0x80,0x80,0x3e]}

tool: {"D89": [0x00,0x00,0x7f,0x43]}

tool: {"D115": [0x08,0x20,0x80,0x3a]}

tool: {"D137": [0xc1,0xc0,0x40,0x3f]}

tool: {"D61": [0x00,0x00,0x7f,0x44]}

tool: {"D69": [0x00,0x00,0x80,0x43]}

tool: {"D126": [0x00,0x00,0x80,0x3b]}

tool: {"D26": [0x00,0x00,0xff,0x44]}

tool: {"D133": [0x00,0x00,0x80,0x44]}

tool: {"D117": [0x00,0x00,0x00,0x3c]}

tool: {"D60": [0x00,0x00,0xff,0x43]}

tool: {"D124": [0x00,0x00,0x80,0x42]}

tool: {"D76": [0x00,0x00,0x00,0x3b]}

assistant: ```c
float X360GammaToLinear(float fl360GammaValue) {
  float flLinearValue;
  fl360GammaValue = saturate(fl360GammaValue);
  if (fl360GammaValue < (96.0f / 255.0f)) {
    if (fl360GammaValue < (64.0f / 255.0f)) {
      flLinearValue = fl360GammaValue * 255.0f;
    } else {
      flLinearValue = fl360GammaValue * (255.0f * 2.0f) - 64.0f;
      flLinearValue += floor(flLinearValue * (1.0f / 512.0f));
    }
  } else {
    if (fl360GammaValue < (192.0f / 255.0f)) {
      flLinearValue = fl360GammaValue * (255.0f * 4.0f) - 256.0f;
      flLinearValue += floor(flLinearValue * (1.0f / 256.0f));
    } else {
      flLinearValue = fl360GammaValue * (255.0f * 8.0f) - 1024.0f;
      flLinearValue += floor(flLinearValue * (1.0f / 128.0f));
    }
  }
  flLinearValue *= 1.0f / 1023.0f;
  flLinearValue = saturate(flLinearValue);
  return flLinearValue;
}
```