user: 请从给定的汇编指令推导出C源代码:

```asm
<compute_point>:
  endbr64
  push   %r15
  movslq %edx,%r9
  push   %r14
  push   %r13
  mov    %rcx,%r13
  imul   $0x1a,%esi,%ecx
  push   %r12
  push   %rbp
  movslq %ecx,%r8
  push   %rbx
  lea    -0x1a(%rcx),%r10d
  mov    %rdi,%rbx
  add    %r9,%r8
  lea    -0x34(%rcx),%esi
  lea    -0x4e(%rcx),%edx
  movslq %r10d,%r10
  lea    0x0(,%r8,4),%r14
  add    %r9,%r10
  movslq %esi,%rsi
  movslq %edx,%rdx
  lea    (%rdi,%r14,1),%rbp
  sub    $0x38,%rsp
  mov    (%rbx,%r10,4),%r12d
  add    %r9,%rsi
  mov    0x0(%rbp),%eax
  add    %r9,%rdx
  lea    0x0(,%rsi,4),%rdi
  lea    0x0(,%r10,4),%r15
  mov    %rdi,(%rsp)
  lea    0x0(,%rdx,4),%rdi
  imul   %eax,%r12d
  mov    %rdi,0x8(%rsp)
  imul   (%rbx,%rsi,4),%r12d
  imul   (%rbx,%rdx,4),%r12d
  test   %r12d,%r12d
  jg     L143
  xor    %r12d,%r12d
L40:
  mov    (%rsp),%rdi
  mov    0x4(%rbx,%r15,1),%r10d
  imul   %eax,%r10d
  imul   0x8(%rbx,%rdi,1),%r10d
  mov    0x8(%rsp),%rdi
  imul   0xc(%rbx,%rdi,1),%r10d
  cmp    %r10d,%r12d
  jl     L113
L69:
  mov    0x4(%rbx,%r14,1),%r10d
  imul   %eax,%r10d
  imul   0x8(%rbx,%r14,1),%r10d
  imul   0xc(%rbx,%r14,1),%r10d
  cmp    %r10d,%r12d
  jl     L93
L4:
  lea    0x1a(%rcx),%edx
  movslq %edx,%rdx
  lea    0x1(%r9,%rdx,1),%rsi
  lea    0x34(%rcx),%edx
  add    $0x4e,%ecx
  mov    (%rbx,%rsi,4),%edi
  movslq %edx,%rdx
  lea    0x0(,%rsi,4),%r11
  movslq %ecx,%rcx
  lea    0x2(%r9,%rdx,1),%rdx
  lea    0x3(%r9,%rcx,1),%rcx
  imul   %eax,%edi
  mov    (%rbx,%rdx,4),%esi
  lea    0x0(,%rdx,4),%r10
  mov    (%rbx,%rcx,4),%edx
  lea    0x0(,%rcx,4),%r9
  imul   %edi,%esi
  imul   %esi,%edx
  cmp    %edx,%r12d
  jl     L73
L10:
  mov    -0x4(%rbx,%r11,1),%ecx
  imul   %eax,%ecx
  imul   -0x8(%rbx,%r10,1),%ecx
  imul   -0xc(%rbx,%r9,1),%ecx
  cmp    %ecx,%r12d
  jl     L81
L87:
  mov    -0x8(%rbx,%r11,1),%ecx
  imul   %eax,%ecx
  imul   -0x10(%rbx,%r10,1),%ecx
  imul   -0x18(%rbx,%r9,1),%ecx
  cmp    %ecx,%r12d
  jl     L131
L144:
  mov    -0x4(%rbx,%r14,1),%ecx
  imul   %eax,%ecx
  imul   -0x8(%rbx,%r14,1),%ecx
  imul   -0xc(%rbx,%r14,1),%ecx
  cmp    %ecx,%r12d
  jl     L97
L102:
  mov    (%rsp),%rdi
  imul   -0x4(%rbx,%r15,1),%eax
  imul   -0x8(%rbx,%rdi,1),%eax
  mov    0x8(%rsp),%rdi
  imul   -0xc(%rbx,%rdi,1),%eax
  mov    %eax,%ebx
  cmp    %eax,%r12d
  jl     L133
L15:
  add    $0x38,%rsp
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L143:
  mov    $0xa,%edx
  lea    D15(%rip),%rsi
  mov    %r13,%rdi
  mov    %ecx,0x10(%rsp)
  mov    %r9,0x18(%rsp)
  call   <strncpy@plt>
  mov    0x0(%rbp),%eax
  mov    0x10(%rsp),%ecx
  mov    0x18(%rsp),%r9
  jmp    L40
  xchg   %ax,%ax
L133:
  mov    $0xa,%edx
  lea    D19(%rip),%rsi
  mov    %r13,%rdi
  mov    %ebx,%r12d
  call   <strncpy@plt>
  jmp    L15
  nopl   0x0(%rax)
L97:
  mov    $0xa,%edx
  lea    D76(%rip),%rsi
  mov    %r13,%rdi
  mov    %ecx,0x10(%rsp)
  call   <strncpy@plt>
  mov    0x0(%rbp),%eax
  mov    0x10(%rsp),%r12d
  jmp    L102
  nopl   (%rax)
L131:
  mov    $0xa,%edx
  lea    D21(%rip),%rsi
  mov    %r13,%rdi
  mov    %ecx,0x10(%rsp)
  call   <strncpy@plt>
  mov    0x0(%rbp),%eax
  mov    0x10(%rsp),%r12d
  jmp    L144
  nopl   (%rax)
L81:
  mov    $0xa,%edx
  lea    D42(%rip),%rsi
  mov    %r13,%rdi
  mov    %r9,0x20(%rsp)
  mov    %r10,0x18(%rsp)
  mov    %r11,0x10(%rsp)
  mov    %ecx,0x2c(%rsp)
  call   <strncpy@plt>
  mov    0x0(%rbp),%eax
  mov    0x2c(%rsp),%r12d
  mov    0x20(%rsp),%r9
  mov    0x18(%rsp),%r10
  mov    0x10(%rsp),%r11
  jmp    L87
  nopl   0x0(%rax,%rax,1)
L73:
  mov    %edx,0x2c(%rsp)
  lea    D33(%rip),%rsi
  mov    $0xa,%edx
  mov    %r13,%rdi
  mov    %r9,0x20(%rsp)
  mov    %r10,0x18(%rsp)
  mov    %r11,0x10(%rsp)
  call   <strncpy@plt>
  mov    0x0(%rbp),%eax
  mov    0x2c(%rsp),%r12d
  mov    0x20(%rsp),%r9
  mov    0x18(%rsp),%r10
  mov    0x10(%rsp),%r11
  jmp    L10
  nopl   0x0(%rax,%rax,1)
L93:
  mov    $0xa,%edx
  lea    D18(%rip),%rsi
  mov    %r13,%rdi
  mov    %ecx,0x10(%rsp)
  mov    %r9,0x18(%rsp)
  mov    %r10d,0x20(%rsp)
  call   <strncpy@plt>
  mov    0x0(%rbp),%eax
  mov    0x20(%rsp),%r12d
  mov    0x18(%rsp),%r9
  mov    0x10(%rsp),%ecx
  jmp    L4
  nopl   0x0(%rax,%rax,1)
L113:
  mov    $0xa,%edx
  lea    D23(%rip),%rsi
  mov    %r13,%rdi
  mov    %ecx,0x10(%rsp)
  mov    %r9,0x18(%rsp)
  mov    %r10d,0x20(%rsp)
  call   <strncpy@plt>
  mov    0x0(%rbp),%eax
  mov    0x20(%rsp),%r12d
  mov    0x18(%rsp),%r9
  mov    0x10(%rsp),%ecx
  jmp    L69
```

tool_calls: name: parse_data
arguments: data_label: D15
datatype: string
name: parse_data
arguments: data_label: D19
datatype: string
name: parse_data
arguments: data_label: D76
datatype: string
name: parse_data
arguments: data_label: D21
datatype: string
name: parse_data
arguments: data_label: D42
datatype: string
name: parse_data
arguments: data_label: D33
datatype: string
name: parse_data
arguments: data_label: D18
datatype: string
name: parse_data
arguments: data_label: D23
datatype: string

tool: D15: north

tool: D19: northwest

tool: D76: west

tool: D21: southwest

tool: D42: south

tool: D33: southeast

tool: D18: east

tool: D23: northeast

assistant: ```c
int compute_point(int *a, int i, int j, char *type) {
  int n;
  int max = 0;
  n = *(a + (26 * i) + j) * *(a + (26 * (i - 1)) + j) * *(a + (26 * (i - 2)) + j) * *(a + (26 * (i - 3)) + j);
  if (n > max) {
    max = n;
    strncpy(type, "north", 10);
  }
  n = *(a + (26 * i) + j) * *(a + (26 * (i - 1)) + j + 1) * *(a + (26 * (i - 2)) + j + 2) * *(a + (26 * (i - 3)) + j + 3);
  if (n > max) {
    max = n;
    strncpy(type, "northeast", 10);
  }
  n = *(a + (26 * i) + j) * *(a + (26 * i) + j + 1) * *(a + (26 * i) + j + 2) * *(a + (26 * i) + j + 3);
  if (n > max) {
    max = n;
    strncpy(type, "east", 10);
  }
  n = *(a + (26 * i) + j) * *(a + (26 * (i + 1)) + j + 1) * *(a + (26 * (i + 2)) + j + 2) * *(a + (26 * (i + 3)) + j + 3);
  if (n > max) {
    max = n;
    strncpy(type, "southeast", 10);
  }
  n = *(a + (26 * i) + j) * *(a + (26 * (i + 1)) + j) * *(a + (26 * (i + 2)) + j) * *(a + (26 * (i + 3)) + j);
  if (n > max) {
    max = n;
    strncpy(type, "south", 10);
  }
  n = *(a + (26 * i) + j) * *(a + (26 * (i + 1)) + j - 1) * *(a + (26 * (i + 2)) + j - 2) * *(a + (26 * (i + 3)) + j - 3);
  if (n > max) {
    max = n;
    strncpy(type, "southwest", 10);
  }
  n = *(a + (26 * i) + j) * *(a + (26 * i) + j - 1) * *(a + (26 * i) + j - 2) * *(a + (26 * i) + j - 3);
  if (n > max) {
    max = n;
    strncpy(type, "west", 10);
  }
  n = *(a + (26 * i) + j) * *(a + (26 * (i - 1)) + j - 1) * *(a + (26 * (i - 2)) + j - 2) * *(a + (26 * (i - 3)) + j - 3);
  if (n > max) {
    max = n;
    strncpy(type, "northwest", 10);
  }
  return max;
}
```