user: Please show me the C implementation that matches the assembly code listed below:

```asm
<rssi_to_heat>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movss  %xmm0,-0x4(%rbp)
  movss  D42(%rip),%xmm0
  comiss -0x4(%rbp),%xmm0
  jbe    L357
  mov    $0x0,%eax
  jmp    L329
L357:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D49(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L271
  mov    $0x1,%eax
  jmp    L329
L271:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D138(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L348
  mov    $0x2,%eax
  jmp    L329
L348:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D45(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L144
  mov    $0x3,%eax
  jmp    L329
L144:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D67(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L217
  mov    $0x4,%eax
  jmp    L329
L217:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D173(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L39
  mov    $0x5,%eax
  jmp    L329
L39:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D170(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L17
  mov    $0x6,%eax
  jmp    L329
L17:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D124(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L328
  mov    $0x7,%eax
  jmp    L329
L328:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D47(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L224
  mov    $0x8,%eax
  jmp    L329
L224:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D54(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L327
  mov    $0x9,%eax
  jmp    L329
L327:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D109(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L195
  mov    $0xa,%eax
  jmp    L329
L195:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D84(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L204
  mov    $0xb,%eax
  jmp    L329
L204:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D157(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L153
  mov    $0xc,%eax
  jmp    L329
L153:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D72(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L163
  mov    $0xd,%eax
  jmp    L329
L163:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D161(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L177
  mov    $0xe,%eax
  jmp    L329
L177:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D98(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L128
  mov    $0xf,%eax
  jmp    L329
L128:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  movsd  D6(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L130
  mov    $0x10,%eax
  jmp    L329
L130:
  movss  D57(%rip),%xmm0
  comiss -0x4(%rbp),%xmm0
  jbe    L257
  mov    $0x11,%eax
  jmp    L329
L257:
  mov    $0x12,%eax
L329:
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D42
type_infered: byte[4]
name: parse_data
arguments: data_tag: D49
type_infered: byte[8]
name: parse_data
arguments: data_tag: D138
type_infered: byte[8]
name: parse_data
arguments: data_tag: D45
type_infered: byte[8]
name: parse_data
arguments: data_tag: D67
type_infered: byte[8]
name: parse_data
arguments: data_tag: D173
type_infered: byte[8]
name: parse_data
arguments: data_tag: D170
type_infered: byte[8]
name: parse_data
arguments: data_tag: D124
type_infered: byte[8]
name: parse_data
arguments: data_tag: D47
type_infered: byte[8]
name: parse_data
arguments: data_tag: D54
type_infered: byte[8]
name: parse_data
arguments: data_tag: D109
type_infered: byte[8]
name: parse_data
arguments: data_tag: D84
type_infered: byte[8]
name: parse_data
arguments: data_tag: D157
type_infered: byte[8]
name: parse_data
arguments: data_tag: D72
type_infered: byte[8]
name: parse_data
arguments: data_tag: D161
type_infered: byte[8]
name: parse_data
arguments: data_tag: D98
type_infered: byte[8]
name: parse_data
arguments: data_tag: D6
type_infered: byte[8]
name: parse_data
arguments: data_tag: D57
type_infered: byte[4]

tool: {"D42": [0x00,0x00,0xcc,0xc2]}

tool: {"D49": [0x85,0xeb,0x51,0xb8,0x1e,0xe5,0x58,0xc0]}

tool: {"D138": [0x7b,0x14,0xae,0x47,0xe1,0x4a,0x58,0xc0]}

tool: {"D45": [0x71,0x3d,0x0a,0xd7,0xa3,0xb0,0x57,0xc0]}

tool: {"D67": [0x66,0x66,0x66,0x66,0x66,0x16,0x57,0xc0]}

tool: {"D173": [0x5c,0x8f,0xc2,0xf5,0x28,0x7c,0x56,0xc0]}

tool: {"D170": [0xe1,0x7a,0x14,0xae,0x47,0xe1,0x55,0xc0]}

tool: {"D124": [0xd7,0xa3,0x70,0x3d,0x0a,0x47,0x55,0xc0]}

tool: {"D47": [0xcd,0xcc,0xcc,0xcc,0xcc,0xac,0x54,0xc0]}

tool: {"D54": [0xc3,0xf5,0x28,0x5c,0x8f,0x12,0x54,0xc0]}

tool: {"D109": [0xb8,0x1e,0x85,0xeb,0x51,0x78,0x53,0xc0]}

tool: {"D84": [0xae,0x47,0xe1,0x7a,0x14,0xde,0x52,0xc0]}

tool: {"D157": [0x33,0x33,0x33,0x33,0x33,0x43,0x52,0xc0]}

tool: {"D72": [0x29,0x5c,0x8f,0xc2,0xf5,0xa8,0x51,0xc0]}

tool: {"D161": [0x1f,0x85,0xeb,0x51,0xb8,0x0e,0x51,0xc0]}

tool: {"D98": [0x14,0xae,0x47,0xe1,0x7a,0x74,0x50,0xc0]}

tool: {"D6": [0x14,0xae,0x47,0xe1,0x7a,0xb4,0x4f,0xc0]}

tool: {"D57": [0x00,0x00,0x74,0xc2]}

assistant: ```c
int rssi_to_heat(float rssi) {
  if (rssi < -102) {
    return 0;
  } else if (rssi < -99.58) {
    return 1;
  } else if (rssi < -97.17) {
    return 2;
  } else if (rssi < -94.76) {
    return 3;
  } else if (rssi < -92.35) {
    return 4;
  } else if (rssi < -89.94) {
    return 5;
  } else if (rssi < -87.52) {
    return 6;
  } else if (rssi < -85.11) {
    return 7;
  } else if (rssi < -82.70) {
    return 8;
  } else if (rssi < -80.29) {
    return 9;
  } else if (rssi < -77.88) {
    return 10;
  } else if (rssi < -75.47) {
    return 11;
  } else if (rssi < -73.05) {
    return 12;
  } else if (rssi < -70.64) {
    return 13;
  } else if (rssi < -68.23) {
    return 14;
  } else if (rssi < -65.82) {
    return 15;
  } else if (rssi < -63.41) {
    return 16;
  }
  if (rssi < -61.0f) {
    return 17;
  } else {
    return 18;
  }
}
```