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

```asm
<create_simplex>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  lea    0x8(,%rdi,8),%edi
  sub    $0x18,%rsp
  call   <malloc@plt>
  mov    %rax,0x8(%rsp)
  test   %ebx,%ebx
  js     L13
  lea    0x0(,%rbx,8),%r15d
  mov    %rax,%r14
  mov    %rax,%r12
  xor    %ebp,%ebp
  nopl   (%rax)
L150:
  mov    %r15d,%edi
  add    $0x1,%ebp
  add    $0x8,%r12
  call   <malloc@plt>
  mov    %rax,-0x8(%r12)
  cmp    %ebp,%ebx
  jge    L150
  mov    %ebx,%eax
  lea    -0x1(%rbx),%ecx
  mov    %ebx,%r15d
  movdqa D86(%rip),%xmm7
  shr    $0x2,%eax
  and    $0xfffffffc,%r15d
  mov    $0xffffffff,%ebp
  movapd D1(%rip),%xmm4
  lea    -0x1(%rax),%r12d
  mov    %ecx,%eax
  add    $0x1,%r12
  lea    0x8(,%rax,8),%r13
  shl    $0x5,%r12
  nopw   0x0(%rax,%rax,1)
L9:
  mov    %ebp,%esi
  add    $0x1,%ebp
  test   %ebx,%ebx
  je     L75
  mov    (%r14),%rdi
  test   %ebp,%ebp
  je     L118
  cmp    $0x3,%ecx
  jbe    L78
  movd   %esi,%xmm5
  movdqa D39(%rip),%xmm2
  mov    %rdi,%rax
  lea    (%r12,%rdi,1),%rdx
  pshufd $0x0,%xmm5,%xmm6
  pxor   %xmm5,%xmm5
  nopl   (%rax)
L73:
  movdqa %xmm2,%xmm0
  movdqa %xmm5,%xmm3
  paddd  %xmm7,%xmm2
  add    $0x20,%rax
  pcmpeqd %xmm6,%xmm0
  pcmpgtd %xmm0,%xmm3
  movdqa %xmm0,%xmm1
  punpckldq %xmm3,%xmm1
  punpckhdq %xmm3,%xmm0
  andpd  %xmm4,%xmm1
  andpd  %xmm4,%xmm0
  movups %xmm1,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
  cmp    %rax,%rdx
  jne    L73
  mov    %r15d,%eax
  cmp    %ebx,%r15d
  je     L75
L123:
  movslq %eax,%rdx
  movsd  D1(%rip),%xmm0
  shl    $0x3,%rdx
  lea    (%rdi,%rdx,1),%r9
  cmp    %esi,%eax
  je     L10
  pxor   %xmm0,%xmm0
L10:
  movsd  %xmm0,(%r9)
  lea    0x1(%rax),%r9d
  cmp    %r9d,%ebx
  jle    L75
  movsd  D1(%rip),%xmm0
  lea    0x8(%rdi,%rdx,1),%r10
  cmp    %esi,%r9d
  je     L127
  pxor   %xmm0,%xmm0
L127:
  lea    0x2(%rax),%r9d
  movsd  %xmm0,(%r10)
  cmp    %r9d,%ebx
  jle    L75
  movsd  D1(%rip),%xmm0
  lea    0x10(%rdi,%rdx,1),%r10
  cmp    %esi,%r9d
  je     L34
  pxor   %xmm0,%xmm0
L34:
  add    $0x3,%eax
  movsd  %xmm0,(%r10)
  cmp    %eax,%ebx
  jle    L75
  movsd  D1(%rip),%xmm0
  lea    0x18(%rdi,%rdx,1),%rdx
  cmp    %esi,%eax
  je     L109
  pxor   %xmm0,%xmm0
L109:
  movsd  %xmm0,(%rdx)
L75:
  add    $0x8,%r14
  cmp    %ebp,%ebx
  jne    L9
L13:
  mov    0x8(%rsp),%rax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L118:
  mov    %r13,%rdx
  xor    %esi,%esi
  mov    %ecx,0x4(%rsp)
  call   <memset@plt>
  mov    0x4(%rsp),%ecx
  movdqa D86(%rip),%xmm7
  movapd D1(%rip),%xmm4
  jmp    L75
L78:
  xor    %eax,%eax
  jmp    L123
```

tool_calls: name: parse_data
arguments: label: D86
type_guessed: byte[16]
name: parse_data
arguments: label: D1
type_guessed: f64[2]
name: parse_data
arguments: label: D39
type_guessed: f32[4]

tool: {"D86": [0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: {"D1": [1.0,1.0]}

tool: {"D39": [0.0,1.401298464324817e-45,2.802596928649634e-45,4.203895392974451e-45]}

assistant: ```c
double **create_simplex(int n) {
  int i, j;
  double MAX = 1.0;
  double **simplex = (double **)malloc((n + 1) * sizeof(double *));
  for (i = 0; i < (n + 1); i++) {
    simplex[i] = (double *)malloc(n * sizeof(double));
  }
  for (i = 0; i < (n + 1); i++) {
    for (j = 0; j < n; j++) {
      if (i > 0 && (j == (i - 1)))
        simplex[i][j] = MAX;
      else
        simplex[i][j] = 0.0;
    }
  }
  return simplex;
}
```