user: 下面的汇编指令对应的C源代码是什么:

```asm
<xkeep_topper>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  movsd  %xmm0,-0x8(%rbp)
  movsd  %xmm1,-0x10(%rbp)
  movsd  %xmm2,-0x18(%rbp)
  mov    %edi,-0x1c(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  je     L119
  mov    $0x1,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    $0x5a,%edi
  call   <rotate@plt>
L119:
  mov    $0x64,%edi
  call   <irandomn@plt>
  cmp    $0x1d,%eax
  jg     L147
  movsd  -0x10(%rbp),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L123
  movsd  -0x8(%rbp),%xmm0
  jmp    L23
L123:
  movsd  -0x10(%rbp),%xmm0
L23:
  movsd  D39(%rip),%xmm1
  movapd %xmm0,%xmm2
  mulsd  %xmm1,%xmm2
  movsd  -0x18(%rbp),%xmm1
  movsd  -0x10(%rbp),%xmm0
  mov    -0x8(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <english_house@plt>
  cmpl   $0x0,-0x1c(%rbp)
  je     L87
  mov    $0x0,%eax
  call   <endrotate@plt>
  jmp    L87
L147:
  mov    $0x64,%edi
  call   <irandomn@plt>
  cmp    $0x1d,%eax
  jg     L78
  movsd  -0x10(%rbp),%xmm1
  movsd  D54(%rip),%xmm0
  movapd %xmm1,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  mov    $0x1,%edx
  movapd %xmm2,%xmm3
  mov    $0x2,%esi
  mov    $0x3,%edi
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <gothic_hall@plt>
  cmpl   $0x0,-0x1c(%rbp)
  je     L86
  mov    $0x0,%eax
  call   <endrotate@plt>
  jmp    L86
L78:
  cmpl   $0x0,-0x1c(%rbp)
  je     L26
  mov    $0x0,%eax
  call   <endrotate@plt>
L26:
  mov    $0x1,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    $0x5a,%edi
  call   <rotate@plt>
  movsd  -0x10(%rbp),%xmm1
  movsd  D60(%rip),%xmm0
  movapd %xmm1,%xmm3
  mulsd  %xmm0,%xmm3
  movsd  -0x10(%rbp),%xmm1
  movsd  D54(%rip),%xmm0
  movapd %xmm1,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  -0x18(%rbp),%xmm1
  movsd  D7(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <crenelated_rectangle@plt>
  mov    $0x0,%eax
  call   <endrotate@plt>
  mov    $0x3e8,%edi
  call   <irandomn@plt>
  cmp    $0x1f3,%eax
  jg     L62
  movsd  -0x18(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movq   %xmm0,%rax
  movsd  D7(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <perturb@plt>
  mov    %eax,%edx
  movsd  -0x8(%rbp),%xmm0
  comisd -0x10(%rbp),%xmm0
  jbe    L113
  movsd  -0x10(%rbp),%xmm0
  jmp    L20
L113:
  movsd  -0x8(%rbp),%xmm0
L20:
  movsd  D24(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  mov    $0x0,%ecx
  movq   %rax,%xmm0
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <generic_tower@plt>
  jmp    L62
L87:
  nop
  jmp    L62
L86:
  nop
L62:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D39
type: f64
name: read_data
arguments: tag: D54
type: f64
name: read_data
arguments: tag: D60
type: f64
name: read_data
arguments: tag: D7
type: f64
name: read_data
arguments: tag: D24
type: f64

tool: D39: 0.75

tool: D54: 0.1

tool: D60: 0.05

tool: D7: 0.2

tool: D24: 3

assistant: ```c
void xkeep_topper(double width, double length, double height, int rot) {
  if (rot)
    rotate(90, 0, 0, 1);
  if (irandomn(100) < 30) {
    english_house(width, length, height, ((width) < (length) ? (width) : (length)) * 0.75);
    if (rot)
      endrotate();
    return;
  }
  if (irandomn(100) < 30) {
    gothic_hall(length, width, height, 3, 2, length * 0.1, 1);
    if (rot)
      endrotate();
    return;
  }
  if (rot)
    endrotate();
  rotate(90, 0, 0, 1);
  crenelated_rectangle(length, width, height * 0.2, length * 0.1, length * 0.05);
  endrotate();
  if (irandomn(1000) < 500)
    generic_tower(0, 0, ((length) < (width) ? (length) : (width)) / 3.0, perturb(height * 2.0, 0.2), 0);
}
```