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

```asm
<bill>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  cmpl   $0x32,-0x14(%rbp)
  ja     L131
  mov    -0x14(%rbp),%eax
  test   %rax,%rax
  js     L30
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L14
L30:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L14:
  movsd  D53(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L129
L131:
  cmpl   $0x96,-0x14(%rbp)
  ja     L32
  mov    -0x14(%rbp),%eax
  sub    $0x32,%eax
  mov    %eax,%eax
  test   %rax,%rax
  js     L45
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L56
L45:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L56:
  movsd  D70(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  D31(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L129
L32:
  cmpl   $0xfa,-0x14(%rbp)
  ja     L80
  mov    -0x14(%rbp),%eax
  sub    $0x96,%eax
  mov    %eax,%eax
  test   %rax,%rax
  js     L46
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L108
L46:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L108:
  movsd  D33(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  D45(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L129
L80:
  mov    -0x14(%rbp),%eax
  sub    $0xfa,%eax
  mov    %eax,%eax
  test   %rax,%rax
  js     L116
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L103
L116:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L103:
  movsd  D60(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  D32(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L129:
  movsd  -0x8(%rbp),%xmm1
  movsd  D24(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D53
type_guessed: f64
name: disassemble_data
arguments: tag: D70
type_guessed: f64
name: disassemble_data
arguments: tag: D31
type_guessed: byte[8]
name: disassemble_data
arguments: tag: D33
type_guessed: f64
name: disassemble_data
arguments: tag: D45
type_guessed: byte[8]
name: disassemble_data
arguments: tag: D60
type_guessed: f64
name: disassemble_data
arguments: tag: D32
type_guessed: byte[8]
name: disassemble_data
arguments: tag: D24
type_guessed: f64
name: disassemble_data
arguments: tag: D66
type_guessed: string

tool: D53: 0.5

tool: D70: 0.75

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

tool: D33: 1.2

tool: {"D45": [0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x40]}

tool: D60: 1.5

tool: {"D32": [0x00,0x00,0x00,0x00,0x00,0x80,0x6b,0x40]}

tool: D24: 1.3

tool: D66: Bill: %.2lf


assistant: ```c
void bill(unsigned units) {
  double bill;
  if (units <= 50)
    bill = 0.5 * units;
  else if (units <= 150)
    bill = 0.5 * 50 + 0.75 * (units - 50);
  else if (units <= 250)
    bill = 0.5 * 50 + 0.75 * 100 + 1.2 * (units - 150);
  else
    bill = 0.5 * 50 + 0.75 * 100 + 1.2 * 100 + 1.5 * (units - 250);
  bill *= 1.3;
  printf("Bill: %.2lf\n", bill);
}
```