user: 请从给定的汇编指令推导出C源代码：

```asm
<local_compensation>:
  endbr64
  test   %edi,%edi
  lea    0x3(%rdi),%eax
  pxor   %xmm0,%xmm0
  cmovns %edi,%eax
  sar    $0x2,%eax
  cvtsi2ss %eax,%xmm0
  mulss  D367(%rip),%xmm0
  comiss D65(%rip),%xmm0
  jb     L12
  movss  D317(%rip),%xmm1
  comiss %xmm0,%xmm1
  jb     L12
  mulss  D38(%rip),%xmm0
  divss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  ret
  cs nopw 0x0(%rax,%rax,1)
L12:
  comiss D317(%rip),%xmm0
  jbe    L111
  movss  D58(%rip),%xmm1
  comiss %xmm0,%xmm1
  jb     L111
  movss  D317(%rip),%xmm1
  subss  %xmm1,%xmm0
  mulss  D224(%rip),%xmm0
  divss  %xmm1,%xmm0
  addss  D38(%rip),%xmm0
  cvttss2si %xmm0,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L111:
  comiss D58(%rip),%xmm0
  jbe    L147
  movss  D148(%rip),%xmm1
  comiss %xmm0,%xmm1
  jb     L147
  movss  D58(%rip),%xmm2
  movss  D457(%rip),%xmm1
  subss  %xmm2,%xmm0
  mulss  %xmm1,%xmm0
  divss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L147:
  comiss D148(%rip),%xmm0
  jbe    L44
  movss  D260(%rip),%xmm1
  comiss %xmm0,%xmm1
  jb     L44
  subss  D148(%rip),%xmm0
  mulss  D147(%rip),%xmm0
  divss  D58(%rip),%xmm0
  addss  D31(%rip),%xmm0
  cvttss2si %xmm0,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L44:
  comiss D260(%rip),%xmm0
  jbe    L159
  movss  D459(%rip),%xmm1
  comiss %xmm0,%xmm1
  jb     L159
  subss  D260(%rip),%xmm0
  mulss  D147(%rip),%xmm0
  divss  D58(%rip),%xmm0
  addss  D471(%rip),%xmm0
  cvttss2si %xmm0,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L159:
  comiss D459(%rip),%xmm0
  jbe    L110
  movss  D486(%rip),%xmm1
  comiss %xmm0,%xmm1
  jb     L110
  subss  D459(%rip),%xmm0
  mulss  D118(%rip),%xmm0
  divss  D58(%rip),%xmm0
  addss  D466(%rip),%xmm0
  cvttss2si %xmm0,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L110:
  comiss D486(%rip),%xmm0
  jbe    L173
  movss  D482(%rip),%xmm1
  comiss %xmm0,%xmm1
  jae    L157
L173:
  comiss D482(%rip),%xmm0
  jbe    L71
  movss  D243(%rip),%xmm1
  comiss %xmm0,%xmm1
  jb     L71
  subss  D482(%rip),%xmm0
  mulss  D11(%rip),%xmm0
  divss  D148(%rip),%xmm0
  addss  D184(%rip),%xmm0
  cvttss2si %xmm0,%eax
  ret
  nopl   (%rax)
L71:
  comiss D243(%rip),%xmm0
  jbe    L88
  movss  D390(%rip),%xmm1
  comiss %xmm0,%xmm1
  jb     L88
  subss  D243(%rip),%xmm0
  mulss  D19(%rip),%xmm0
  divss  D5(%rip),%xmm0
  addss  D96(%rip),%xmm0
  cvttss2si %xmm0,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L88:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L157:
  subss  D486(%rip),%xmm0
  mulss  D118(%rip),%xmm0
  divss  D58(%rip),%xmm0
  addss  D359(%rip),%xmm0
  cvttss2si %xmm0,%eax
  ret
```

tool_calls: name: parse_data
arguments: label: D367
type_infered: byte[4]
name: parse_data
arguments: label: D65
type_infered: byte[4]
name: parse_data
arguments: label: D317
type_infered: byte[4]
name: parse_data
arguments: label: D38
type_infered: byte[4]
name: parse_data
arguments: label: D58
type_infered: byte[4]
name: parse_data
arguments: label: D224
type_infered: byte[4]
name: parse_data
arguments: label: D148
type_infered: byte[4]
name: parse_data
arguments: label: D457
type_infered: byte[4]
name: parse_data
arguments: label: D260
type_infered: byte[4]
name: parse_data
arguments: label: D147
type_infered: byte[4]
name: parse_data
arguments: label: D31
type_infered: byte[4]
name: parse_data
arguments: label: D459
type_infered: byte[4]
name: parse_data
arguments: label: D471
type_infered: byte[4]
name: parse_data
arguments: label: D486
type_infered: byte[4]
name: parse_data
arguments: label: D118
type_infered: byte[4]
name: parse_data
arguments: label: D466
type_infered: byte[4]
name: parse_data
arguments: label: D482
type_infered: byte[4]
name: parse_data
arguments: label: D243
type_infered: byte[4]
name: parse_data
arguments: label: D11
type_infered: byte[4]
name: parse_data
arguments: label: D184
type_infered: byte[4]
name: parse_data
arguments: label: D390
type_infered: byte[4]
name: parse_data
arguments: label: D19
type_infered: byte[4]
name: parse_data
arguments: label: D5
type_infered: byte[4]
name: parse_data
arguments: label: D96
type_infered: byte[4]
name: parse_data
arguments: label: D359
type_infered: byte[4]

tool: {"D367": [0x00,0x00,0x00,0x3d]}

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

tool: {"D317": [0x00,0x00,0xa0,0x40]}

tool: {"D38": [0x00,0x00,0xc8,0x41]}

tool: {"D58": [0x00,0x00,0x20,0x41]}

tool: {"D224": [0x00,0x00,0xd0,0x41]}

tool: {"D148": [0x00,0x00,0xa0,0x41]}

tool: {"D457": [0x00,0x00,0x4c,0x42]}

tool: {"D260": [0x00,0x00,0xf0,0x41]}

tool: {"D147": [0x00,0x00,0x50,0x42]}

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

tool: {"D459": [0x00,0x00,0x20,0x42]}

tool: {"D471": [0x00,0x00,0x1a,0x43]}

tool: {"D486": [0x00,0x00,0x48,0x42]}

tool: {"D118": [0x00,0x00,0x54,0x42]}

tool: {"D466": [0x00,0x00,0x4e,0x43]}

tool: {"D482": [0x00,0x00,0x70,0x42]}

tool: {"D243": [0x00,0x00,0xa0,0x42]}

tool: {"D11": [0x00,0x00,0xd4,0x42]}

tool: {"D184": [0x00,0x00,0x9c,0x43]}

tool: {"D390": [0x00,0x00,0xfa,0x42]}

tool: {"D19": [0x00,0x00,0x6e,0x43]}

tool: {"D5": [0x00,0x00,0x34,0x42]}

tool: {"D96": [0x00,0x00,0xd1,0x43]}

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

assistant: ```c
int local_compensation(int local_code) {
  float tmp, local_temp;
  int comp;
  local_code = local_code / 4;
  local_temp = (float)local_code / 32;
  if (local_temp >= 0 && local_temp <= 5) {
    tmp = (0x0019 * local_temp) / 5;
    comp = tmp;
  } else if (local_temp > 5 && local_temp <= 10) {
    tmp = (0x001A * (local_temp - 5)) / 5 + 0x0019;
    comp = tmp;
  } else if (local_temp > 10 && local_temp <= 20) {
    tmp = (0x0033 * (local_temp - 10)) / 10 + 0x0033;
    comp = tmp;
  } else if (local_temp > 20 && local_temp <= 30) {
    tmp = (0x0034 * (local_temp - 20)) / 10 + 0x0066;
    comp = tmp;
  } else if (local_temp > 30 && local_temp <= 40) {
    tmp = (0x0034 * (local_temp - 30)) / 10 + 0x009A;
    comp = tmp;
  } else if (local_temp > 40 && local_temp <= 50) {
    tmp = (0x0035 * (local_temp - 40)) / 10 + 0x00CE;
    comp = tmp;
  } else if (local_temp > 50 && local_temp <= 60) {
    tmp = (0x0035 * (local_temp - 50)) / 10 + 0x0103;
    comp = tmp;
  } else if (local_temp > 60 && local_temp <= 80) {
    tmp = (0x006A * (local_temp - 60)) / 20 + 0x0138;
    comp = tmp;
  } else if (local_temp > 80 && local_temp <= 125) {
    tmp = (0x00EE * (local_temp - 80)) / 45 + 0x01A2;
    comp = tmp;
  } else {
    comp = 0;
  }
  return comp;
}
```