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

```asm
<is_similar>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x18(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jne    L65
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movl   $0x0,-0x1c(%rbp)
  jmp    L113
L79:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jne    L92
  movsd  -0x10(%rbp),%xmm1
  movsd  D21(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
L92:
  addl   $0x1,-0x1c(%rbp)
L113:
  mov    -0x1c(%rbp),%eax
  cmp    -0x18(%rbp),%eax
  jl     L79
  jmp    L124
L65:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x18(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jge    L20
  movl   $0x0,-0x1c(%rbp)
  jmp    L88
L96:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jne    L115
  movsd  -0x10(%rbp),%xmm1
  movsd  D21(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
L115:
  addl   $0x1,-0x1c(%rbp)
L88:
  mov    -0x1c(%rbp),%eax
  cmp    -0x18(%rbp),%eax
  jl     L96
  jmp    L124
L20:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movl   $0x0,-0x1c(%rbp)
  jmp    L9
L34:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jne    L45
  movsd  -0x10(%rbp),%xmm1
  movsd  D21(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
L45:
  addl   $0x1,-0x1c(%rbp)
L9:
  mov    -0x1c(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L34
L124:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x18(%rbp),%xmm1
  movsd  -0x10(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D21
data_type: f32[2]

tool: {"D21": [0.0,1.875]}

assistant: ```c
double is_similar(const char *str1, const char *str2) {
  double match;
  double count = 0;
  int len1, len2, i;
  len1 = strlen(str1);
  len2 = strlen(str2);
  if (len1 == len2) {
    count = 0;
    for (i = 0; i < len1; i++) {
      if (str1[i] == str2[i]) {
        count++;
      }
    }
  } else {
    count = 0;
    if (len1 < len2) {
      for (i = 0; i < len1; i++) {
        if (str1[i] == str2[i]) {
          count++;
        }
      }
    } else {
      count = 0;
      for (i = 0; i < len2; i++) {
        if (str1[i] == str2[i]) {
          count++;
        }
      }
    }
  }
  match = count / len1;
  return match;
}
```