user: Translate the below assembly code into C programming language:

```asm
<X360GammaToLinear>:
  endbr64
  sub    $0x18,%rsp
  call   <saturate@plt>
  movss  D47(%rip),%xmm1
  comiss %xmm0,%xmm1
  jbe    L48
  movss  D77(%rip),%xmm1
  comiss %xmm0,%xmm1
  jbe    L55
  mulss  D135(%rip),%xmm0
L53:
  mulss  D2(%rip),%xmm0
  call   <saturate@plt>
  add    $0x18,%rsp
  ret
L55:
  mulss  D123(%rip),%xmm0
  subss  D30(%rip),%xmm0
  movss  %xmm0,0xc(%rsp)
  mulss  D49(%rip),%xmm0
  call   <floor@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  addss  0xc(%rsp),%xmm0
  jmp    L53
L48:
  movss  D134(%rip),%xmm1
  comiss %xmm0,%xmm1
  jbe    L30
  mulss  D35(%rip),%xmm0
  subss  D67(%rip),%xmm0
  movss  %xmm0,0xc(%rsp)
  mulss  D10(%rip),%xmm0
  call   <floor@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  addss  0xc(%rsp),%xmm0
  jmp    L53
L30:
  mulss  D122(%rip),%xmm0
  subss  D42(%rip),%xmm0
  movss  %xmm0,0xc(%rsp)
  mulss  D92(%rip),%xmm0
  call   <floor@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  addss  0xc(%rsp),%xmm0
  jmp    L53
```

tool_calls: name: unpack_data
arguments: data_label: D47
data_type: byte[4]
name: unpack_data
arguments: data_label: D77
data_type: byte[4]
name: unpack_data
arguments: data_label: D135
data_type: byte[4]
name: unpack_data
arguments: data_label: D2
data_type: byte[4]
name: unpack_data
arguments: data_label: D123
data_type: byte[4]
name: unpack_data
arguments: data_label: D30
data_type: byte[4]
name: unpack_data
arguments: data_label: D49
data_type: byte[4]
name: unpack_data
arguments: data_label: D134
data_type: byte[4]
name: unpack_data
arguments: data_label: D35
data_type: byte[4]
name: unpack_data
arguments: data_label: D67
data_type: byte[4]
name: unpack_data
arguments: data_label: D10
data_type: byte[4]
name: unpack_data
arguments: data_label: D122
data_type: byte[4]
name: unpack_data
arguments: data_label: D42
data_type: byte[4]
name: unpack_data
arguments: data_label: D92
data_type: byte[4]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;
}
```