user: 下面的汇编指令对应的C源代码是什么：

```asm
<find_first>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %rdx,-0x28(%rbp)
  movss  %xmm0,-0x20(%rbp)
  movl   $0x0,-0x4(%rbp)
  jmp    L132
L185:
  mov    -0x28(%rbp),%rax
  lea    D10(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L120
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  comiss -0x20(%rbp),%xmm0
  jbe    L168
  mov    -0x4(%rbp),%eax
  jmp    L80
L120:
  mov    -0x28(%rbp),%rax
  lea    D59(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L13
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  movss  -0x20(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jbe    L168
  mov    -0x4(%rbp),%eax
  jmp    L80
L13:
  mov    -0x28(%rbp),%rax
  lea    D36(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L140
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  comiss -0x20(%rbp),%xmm0
  jb     L168
  mov    -0x4(%rbp),%eax
  jmp    L80
L140:
  mov    -0x28(%rbp),%rax
  lea    D57(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L92
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  ucomiss -0x20(%rbp),%xmm0
  jp     L168
  ucomiss -0x20(%rbp),%xmm0
  jne    L168
  mov    -0x4(%rbp),%eax
  jmp    L80
L92:
  mov    -0x28(%rbp),%rax
  lea    D6(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L142
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  ucomiss -0x20(%rbp),%xmm0
  jp     L113
  ucomiss -0x20(%rbp),%xmm0
  je     L168
L113:
  mov    -0x4(%rbp),%eax
  jmp    L80
L142:
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0xffffffff,%edi
  call   <exit@plt>
L168:
  addl   $0x1,-0x4(%rbp)
L132:
  mov    -0x4(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L185
  mov    $0xffffffff,%eax
L80:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D10
type: string
name: unpack_data
arguments: data_tag: D59
type: string
name: unpack_data
arguments: data_tag: D36
type: string
name: unpack_data
arguments: data_tag: D57
type: string
name: unpack_data
arguments: data_tag: D6
type: string
name: unpack_data
arguments: data_tag: D33
type: string

tool: D10: >

tool: D59: <

tool: D36: >=

tool: D57: ==

tool: D6: !=

tool: D33: Error: Invalid type. Exiting program.

assistant: ```c
int find_first(float *buf, int n, char *type, float val) {
  int i;
  for (i = 0; i < n; i++) {
    if (strcmp(type, ">") == 0) {
      if (buf[i] > val)
        return i;
    } else if (strcmp(type, "<") == 0) {
      if (buf[i] < val)
        return i;
    } else if (strcmp(type, ">=") == 0) {
      if (buf[i] >= val)
        return i;
    } else if (strcmp(type, "==") == 0) {
      if (buf[i] == val)
        return i;
    } else if (strcmp(type, "!=") == 0) {
      if (buf[i] != val)
        return i;
    } else {
      printf("Error: Invalid type. Exiting program.");
      exit(-1);
    }
  }
  return -1;
}
```