user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<print_points>:
  endbr64
  push   %r12
  cvtss2sd %xmm2,%xmm2
  lea    D13(%rip),%r12
  push   %rbp
  mov    %rdi,%rbp
  sub    $0x18,%rsp
  mulsd  D58(%rip),%xmm2
  cvtsd2ss %xmm2,%xmm2
  movaps %xmm2,%xmm0
  movss  %xmm2,0x4(%rsp)
  call   <sin@plt>
  movss  0x4(%rsp),%xmm2
  movss  %xmm0,(%rsp)
  movaps %xmm2,%xmm0
  call   <cos@plt>
  movss  (%rsp),%xmm6
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movaps %xmm0,%xmm4
  movss  D62(%rip),%xmm0
  mov    $0x2,%eax
  movaps %xmm4,%xmm3
  movaps %xmm4,%xmm1
  movss  %xmm4,0xc(%rsp)
  mulss  %xmm0,%xmm3
  movaps %xmm0,%xmm5
  movaps %xmm6,%xmm0
  mulss  %xmm6,%xmm5
  subss  %xmm3,%xmm0
  movss  %xmm3,0x4(%rsp)
  addss  %xmm5,%xmm1
  movss  %xmm5,0x8(%rsp)
  cvtss2sd %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm1
  call   <fprintf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movss  0xc(%rsp),%xmm1
  movss  (%rsp),%xmm2
  pxor   %xmm0,%xmm0
  mov    $0x2,%eax
  addss  0x4(%rsp),%xmm2
  subss  0x8(%rsp),%xmm1
  cvtss2sd %xmm2,%xmm0
  cvtss2sd %xmm1,%xmm1
  call   <fprintf@plt>
  mov    %r12,%rsi
  movss  0x4(%rsp),%xmm0
  xorps  D53(%rip),%xmm0
  mov    %rbp,%rdi
  pxor   %xmm1,%xmm1
  mov    $0x2,%eax
  cvtss2sd 0x8(%rsp),%xmm1
  cvtss2sd %xmm0,%xmm0
  call   <fprintf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movss  0x8(%rsp),%xmm7
  xorps  D53(%rip),%xmm7
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  mov    $0x2,%eax
  cvtss2sd 0x4(%rsp),%xmm0
  cvtss2sd %xmm7,%xmm1
  call   <fprintf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movss  0x8(%rsp),%xmm6
  movss  (%rsp),%xmm0
  pxor   %xmm1,%xmm1
  mov    $0x2,%eax
  subss  0xc(%rsp),%xmm6
  xorps  D53(%rip),%xmm0
  subss  0x4(%rsp),%xmm0
  cvtss2sd %xmm6,%xmm1
  cvtss2sd %xmm0,%xmm0
  call   <fprintf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  movss  0xc(%rsp),%xmm1
  movss  0x4(%rsp),%xmm0
  mov    $0x2,%eax
  subss  (%rsp),%xmm0
  xorps  D53(%rip),%xmm1
  subss  0x8(%rsp),%xmm1
  cvtss2sd %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm1
  call   <fprintf@plt>
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  add    $0x18,%rsp
  mov    $0x1,%eax
  pop    %rbp
  pop    %r12
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D13
type_infered: string
name: extract_symbolic_data
arguments: label: D58
type_infered: byte[8]
name: extract_symbolic_data
arguments: label: D62
type_infered: byte[4]
name: extract_symbolic_data
arguments: label: D53
type_infered: byte[16]

tool: D13: %f %f


tool: {"D58": [0x39,0x9d,0x52,0xa2,0x46,0xdf,0x91,0x3f]}

tool: {"D62": [0x00,0x00,0x00,0x3f]}

tool: {"D53": [0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

assistant: ```c
int print_points(float x, float y, float direction, FILE *fff) {
  float x1, y1, xdelta, ydelta, theta;
  theta = (direction * (3.141592653589793238462643383279502884197169399 / 180.0));
  x1 = sin(theta);
  y1 = cos(theta);
  xdelta = (y1) / 2;
  ydelta = (x1) / 2;
  fprintf(fff, "%f %f\n", x1 - xdelta, y1 + ydelta);
  fprintf(fff, "%f %f\n", x1 + xdelta, y1 - ydelta);
  fprintf(fff, "%f %f\n", -xdelta, +ydelta);
  fprintf(fff, "%f %f\n", xdelta, -ydelta);
  fprintf(fff, "%f %f\n", -x1 - xdelta, -y1 + ydelta);
  fprintf(fff, "%f %f\n", -x1 + xdelta, -y1 - ydelta);
  fprintf(fff, "\n");
  return 1;
}
```