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

```asm
<npt_move_vertex>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x2a8,%rsp
  mov    0x318(%rsp),%r10
  mov    0x2e0(%rsp),%rax
  mov    %r9,0x10(%rsp)
  mov    0x2e8(%rsp),%rbx
  mov    0x308(%rsp),%r9
  mov    %r8,0x8(%rsp)
  mov    0x2f0(%rsp),%rdx
  mov    0x2f8(%rsp),%rdi
  mov    %r10,0x38(%rsp)
  mov    0x328(%rsp),%r14
  mov    0x338(%rsp),%r10
  mov    %r9,0x88(%rsp)
  mov    0x330(%rsp),%r15
  mov    0x320(%rsp),%r11
  mov    %rcx,(%rsp)
  lea    0x98(%rsp),%rcx
  mov    %r10,0x58(%rsp)
  mov    0x310(%rsp),%r13
  mov    %rax,0x18(%rsp)
  mov    %rbx,0x20(%rsp)
  mov    0x300(%rsp),%rbx
  mov    %rdx,0x28(%rsp)
  mov    %rdi,0x30(%rsp)
  mov    %rbp,%rdi
  mov    %r14,0x48(%rsp)
  mov    %r15,0x50(%rsp)
  lea    0xc0(%rsp),%r15
  mov    %r11,0x40(%rsp)
  mov    0x340(%rsp),%r11
  mov    0x348(%rsp),%r14
  mov    %r11,0x60(%rsp)
  mov    %r14,0x68(%rsp)
  lea    0xa8(%rsp),%r14
  mov    %r14,%rdx
  mov    %fs:0x28,%rax
  mov    %rax,0x298(%rsp)
  xor    %eax,%eax
  mov    %rcx,0x78(%rsp)
  call   <CalcLineVec@plt>
  lea    0x9c(%rsp),%r8
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %r8,%rdx
  mov    %r8,0x70(%rsp)
  lea    0xcc(%rsp),%r12
  call   <CalcVec@plt>
  mov    0x70(%rsp),%rsi
  mov    %r15,%rdx
  mov    %r14,%rdi
  call   <CalcOutProduct@plt>
  mov    %r15,%rdi
  call   <CalcNormalize@plt>
  lea    0xb4(%rsp),%r11
  mov    %r14,%rsi
  mov    %r15,%rdi
  mov    %r11,%rdx
  mov    %r11,0x80(%rsp)
  call   <CalcOutProduct@plt>
  mov    0x78(%rsp),%rcx
  mov    %r12,%rdx
  mov    %rbx,%rdi
  mov    0x88(%rsp),%rsi
  call   <CalcLineVec@plt>
  mov    0x70(%rsp),%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  lea    0xe4(%rsp),%r13
  call   <CalcVec@plt>
  mov    0x70(%rsp),%rsi
  mov    %r13,%rdx
  mov    %r12,%rdi
  call   <CalcOutProduct@plt>
  mov    %r13,%rdi
  call   <CalcNormalize@plt>
  lea    0xd8(%rsp),%r10
  mov    %r12,%rsi
  mov    %r13,%rdi
  mov    %r10,%rdx
  mov    %r10,0x78(%rsp)
  call   <CalcOutProduct@plt>
  mov    %rbp,%rdi
  mov    %r15,%rcx
  mov    %r14,%rsi
  lea    0xf0(%rsp),%r9
  mov    0x80(%rsp),%rdx
  lea    0x130(%rsp),%rbp
  mov    %r9,%r8
  mov    %r9,0x70(%rsp)
  call   <Calc_3dMat4TranAxis@plt>
  mov    0x78(%rsp),%rdx
  mov    %r13,%rcx
  mov    %rbp,%r8
  mov    %r12,%rsi
  mov    %rbx,%rdi
  lea    0x170(%rsp),%rbx
  call   <Calc_3dMat4TranAxisInv@plt>
  mov    0x70(%rsp),%rdi
  mov    %rbp,%rsi
  mov    %rbx,%rdx
  lea    0x220(%rsp),%r13
  lea    0x1b0(%rsp),%r12
  call   <Calc_3dMat4Multi44@plt>
  mov    (%rsp),%rcx
  mov    0x10(%rsp),%rsi
  mov    %r13,%rbp
  movss  0x8(%rcx),%xmm0
  mov    (%rcx),%rax
  mov    0x8(%rsp),%rcx
  mov    %rax,0x1b0(%rsp)
  mov    (%rcx),%rax
  movss  0x8(%rcx),%xmm1
  movss  %xmm0,0x1b8(%rsp)
  movss  D2(%rip),%xmm0
  mov    %rax,0x1c0(%rsp)
  mov    (%rsi),%rax
  movss  %xmm1,0x1c8(%rsp)
  movss  0x8(%rsi),%xmm1
  mov    %rax,0x1d0(%rsp)
  mov    0x18(%rsp),%rax
  movss  %xmm1,0x1d8(%rsp)
  movss  %xmm0,0x1bc(%rsp)
  movss  0x8(%rax),%xmm1
  mov    (%rax),%rax
  movss  %xmm0,0x1cc(%rsp)
  mov    %rax,0x1e0(%rsp)
  mov    0x20(%rsp),%rax
  movss  %xmm1,0x1e8(%rsp)
  movss  %xmm0,0x1dc(%rsp)
  movss  0x8(%rax),%xmm1
  mov    (%rax),%rax
  movss  %xmm0,0x1ec(%rsp)
  mov    %rax,0x1f0(%rsp)
  mov    0x28(%rsp),%rax
  movss  %xmm1,0x1f8(%rsp)
  movss  %xmm0,0x1fc(%rsp)
  movss  0x8(%rax),%xmm1
  mov    (%rax),%rax
  movss  %xmm0,0x20c(%rsp)
  mov    %rax,0x200(%rsp)
  mov    0x30(%rsp),%rax
  movss  %xmm1,0x208(%rsp)
  movss  %xmm0,0x21c(%rsp)
  movss  0x8(%rax),%xmm1
  mov    (%rax),%rax
  mov    %rax,0x210(%rsp)
  movss  %xmm1,0x218(%rsp)
  cs nopw 0x0(%rax,%rax,1)
L9:
  mov    %r13,%rdx
  mov    %r12,%rdi
  mov    %rbx,%rsi
  add    $0x10,%r12
  call   <Calc_3dMat4Multi14@plt>
  add    $0x10,%r13
  cmp    %r12,%rbp
  jne    L9
  mov    0x38(%rsp),%rbx
  mov    0x40(%rsp),%rdx
  mov    0x220(%rsp),%rax
  mov    0x50(%rsp),%rdi
  movss  0x228(%rsp),%xmm0
  mov    0x58(%rsp),%rcx
  mov    %rax,(%rbx)
  mov    0x230(%rsp),%rax
  movss  %xmm0,0x8(%rbx)
  mov    0x48(%rsp),%rbx
  mov    0x68(%rsp),%rsi
  movss  0x238(%rsp),%xmm0
  mov    %rax,(%rdx)
  mov    0x240(%rsp),%rax
  movss  %xmm0,0x8(%rdx)
  mov    0x60(%rsp),%rdx
  movss  0x248(%rsp),%xmm0
  mov    %rax,(%rbx)
  mov    0x250(%rsp),%rax
  movss  %xmm0,0x8(%rbx)
  movss  0x258(%rsp),%xmm0
  mov    %rax,(%rdi)
  mov    0x260(%rsp),%rax
  movss  %xmm0,0x8(%rdi)
  movss  0x268(%rsp),%xmm0
  mov    %rax,(%rcx)
  mov    0x270(%rsp),%rax
  movss  %xmm0,0x8(%rcx)
  movss  0x278(%rsp),%xmm0
  mov    %rax,(%rdx)
  mov    0x280(%rsp),%rax
  movss  %xmm0,0x8(%rdx)
  mov    %rax,(%rsi)
  movss  0x288(%rsp),%xmm0
  movss  %xmm0,0x8(%rsi)
  mov    0x298(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L12
  add    $0x2a8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L12:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D2
type_guessed: f32

tool: D2: 1

assistant: ```c
void npt_move_vertex(float p1[3], float p2[3], float p3[3], float cp_side1_1[3], float cp_side1_2[3], float cp_side2_1[3], float cp_side2_2[3], float cp_side3_1[3], float cp_side3_2[3], float cp_center[3], float p1_n[3], float p2_n[3], float p3_n[3], float cp_side1_1_n[3], float cp_side1_2_n[3], float cp_side2_1_n[3], float cp_side2_2_n[3], float cp_side3_1_n[3], float cp_side3_2_n[3], float cp_center_n[3]) {
  float len12, vec13[3];
  float x_axis[3], y_axis[3], z_axis[3];
  float x_axis_n[3], y_axis_n[3], z_axis_n[3];
  int i;
  CalcLineVec(p1, p2, x_axis, &len12);
  CalcVec(p1, p3, vec13);
  CalcOutProduct(x_axis, vec13, z_axis);
  CalcNormalize(z_axis);
  CalcOutProduct(z_axis, x_axis, y_axis);
  CalcLineVec(p1_n, p2_n, x_axis_n, &len12);
  CalcVec(p1_n, p3_n, vec13);
  CalcOutProduct(x_axis_n, vec13, z_axis_n);
  CalcNormalize(z_axis_n);
  CalcOutProduct(z_axis_n, x_axis_n, y_axis_n);
  float change_mat[4][4];
  float change_mat_n[4][4];
  float change_mat_all[4][4];
  Calc_3dMat4TranAxis(p1, x_axis, y_axis, z_axis, change_mat);
  Calc_3dMat4TranAxisInv(p1_n, x_axis_n, y_axis_n, z_axis_n, change_mat_n);
  Calc_3dMat4Multi44(change_mat, change_mat_n, change_mat_all);
  float pnts_in[7][4], pnts_out[7][4];
  pnts_in[0][0] = cp_side1_1[0];
  pnts_in[0][1] = cp_side1_1[1];
  pnts_in[0][2] = cp_side1_1[2];
  pnts_in[0][3] = 1.0;
  pnts_in[1][0] = cp_side1_2[0];
  pnts_in[1][1] = cp_side1_2[1];
  pnts_in[1][2] = cp_side1_2[2];
  pnts_in[1][3] = 1.0;
  pnts_in[2][0] = cp_side2_1[0];
  pnts_in[2][1] = cp_side2_1[1];
  pnts_in[2][2] = cp_side2_1[2];
  pnts_in[2][3] = 1.0;
  pnts_in[3][0] = cp_side2_2[0];
  pnts_in[3][1] = cp_side2_2[1];
  pnts_in[3][2] = cp_side2_2[2];
  pnts_in[3][3] = 1.0;
  pnts_in[4][0] = cp_side3_1[0];
  pnts_in[4][1] = cp_side3_1[1];
  pnts_in[4][2] = cp_side3_1[2];
  pnts_in[4][3] = 1.0;
  pnts_in[5][0] = cp_side3_2[0];
  pnts_in[5][1] = cp_side3_2[1];
  pnts_in[5][2] = cp_side3_2[2];
  pnts_in[5][3] = 1.0;
  pnts_in[6][0] = cp_center[0];
  pnts_in[6][1] = cp_center[1];
  pnts_in[6][2] = cp_center[2];
  pnts_in[6][3] = 1.0;
  for (i = 0; i < 7; i++) {
    Calc_3dMat4Multi14(pnts_in[i], change_mat_all, pnts_out[i]);
  }
  cp_side1_1_n[0] = pnts_out[0][0];
  cp_side1_1_n[1] = pnts_out[0][1];
  cp_side1_1_n[2] = pnts_out[0][2];
  cp_side1_2_n[0] = pnts_out[1][0];
  cp_side1_2_n[1] = pnts_out[1][1];
  cp_side1_2_n[2] = pnts_out[1][2];
  cp_side2_1_n[0] = pnts_out[2][0];
  cp_side2_1_n[1] = pnts_out[2][1];
  cp_side2_1_n[2] = pnts_out[2][2];
  cp_side2_2_n[0] = pnts_out[3][0];
  cp_side2_2_n[1] = pnts_out[3][1];
  cp_side2_2_n[2] = pnts_out[3][2];
  cp_side3_1_n[0] = pnts_out[4][0];
  cp_side3_1_n[1] = pnts_out[4][1];
  cp_side3_1_n[2] = pnts_out[4][2];
  cp_side3_2_n[0] = pnts_out[5][0];
  cp_side3_2_n[1] = pnts_out[5][1];
  cp_side3_2_n[2] = pnts_out[5][2];
  cp_center_n[0] = pnts_out[6][0];
  cp_center_n[1] = pnts_out[6][1];
  cp_center_n[2] = pnts_out[6][2];
}
```