user: Translate the below assembly code into C programming language:

```asm
<getmet>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x18(%rbp)
  mov    %rdi,-0x20(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movq   D21(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D25(%rip),%xmm0
  comisd -0x18(%rbp),%xmm0
  jb     L61
  movl   $0x0,-0x10(%rbp)
  jmp    L64
L72:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    -0x10(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  lea    D96(%rip),%rdx
  movsd  (%rcx,%rdx,1),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L64:
  cmpl   $0x9,-0x10(%rbp)
  jle    L72
  jmp    L33
L61:
  movsd  -0x18(%rbp),%xmm0
  comisd D6(%rip),%xmm0
  jb     L96
  movl   $0x0,-0x10(%rbp)
  jmp    L34
L8:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    -0x10(%rbp),%edx
  movslq %edx,%rdx
  add    $0x28,%rdx
  lea    0x0(,%rdx,8),%rcx
  lea    D96(%rip),%rdx
  movsd  (%rcx,%rdx,1),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L34:
  cmpl   $0x9,-0x10(%rbp)
  jle    L8
  jmp    L33
L96:
  movsd  -0x18(%rbp),%xmm0
  movsd  D25(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0xc(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0xc(%rbp),%xmm1
  movsd  D25(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x18(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  D25(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L90
L58:
  movsd  D72(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x8(%rbp),%xmm1
  mov    -0xc(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x10(%rbp),%eax
  movslq %eax,%rcx
  movslq %edx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D96(%rip),%rax
  movsd  (%rdx,%rax,1),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x10(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  lea    0x0(,%rax,8),%rdx
  lea    D96(%rip),%rax
  movsd  (%rdx,%rax,1),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L90:
  cmpl   $0x9,-0x10(%rbp)
  jle    L58
L33:
  nop
  pop    %rbp
  ret
```

tool_calls: name: read_data
arguments: data_tag: D21
datatype: qword
name: read_data
arguments: data_tag: D25
datatype: f64
name: read_data
arguments: data_tag: D96
datatype: f64
name: read_data
arguments: data_tag: D6
datatype: f64[2]
name: read_data
arguments: data_tag: D72
datatype: f64

tool: D21: 9223372036854775807

tool: D25: 15

tool: D96: 1013.25

tool: {"D6": [75.0,1.0]}

tool: D72: 1

assistant: ```c
void getmet(double lat, double *met) {
  static const double metprm[][10] = {{1013.25, 299.65, 26.31, 6.30E-3, 2.77, 0.00, 0.00, 0.00, 0.00E-3, 0.00}, {1017.25, 294.15, 21.79, 6.05E-3, 3.15, -3.75, 7.00, 8.85, 0.25E-3, 0.33}, {1015.75, 283.15, 11.66, 5.58E-3, 2.57, -2.25, 11.00, 7.24, 0.32E-3, 0.46}, {1011.75, 272.15, 6.78, 5.39E-3, 1.81, -1.75, 15.00, 5.36, 0.81E-3, 0.74}, {1013.00, 263.65, 4.11, 4.53E-3, 1.55, -0.50, 14.50, 3.39, 0.62E-3, 0.30}};
  int i, j;
  double a;
  lat = fabs(lat);
  if (lat <= 15.0)
    for (i = 0; i < 10; i++)
      met[i] = metprm[0][i];
  else if (lat >= 75.0)
    for (i = 0; i < 10; i++)
      met[i] = metprm[4][i];
  else {
    j = (int)(lat / 15.0);
    a = (lat - j * 15.0) / 15.0;
    for (i = 0; i < 10; i++)
      met[i] = (1.0 - a) * metprm[j - 1][i] + a * metprm[j][i];
  }
}
```