user: What would the C source look like for the assembly code provided here?

```asm
<find_last>:
  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)
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L75
L95:
  mov    -0x28(%rbp),%rax
  lea    D42(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L103
  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    L25
  mov    -0x4(%rbp),%eax
  jmp    L21
L103:
  mov    -0x28(%rbp),%rax
  lea    D7(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L91
  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    L25
  mov    -0x4(%rbp),%eax
  jmp    L21
L91:
  mov    -0x28(%rbp),%rax
  lea    D25(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L134
  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     L25
  mov    -0x4(%rbp),%eax
  jmp    L21
L134:
  mov    -0x28(%rbp),%rax
  lea    D34(%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),%xmm0
  ucomiss -0x20(%rbp),%xmm0
  jp     L25
  ucomiss -0x20(%rbp),%xmm0
  jne    L25
  mov    -0x4(%rbp),%eax
  jmp    L21
L13:
  mov    -0x28(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L172
  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     L164
  ucomiss -0x20(%rbp),%xmm0
  je     L25
L164:
  mov    -0x4(%rbp),%eax
  jmp    L21
L172:
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0xffffffff,%edi
  call   <exit@plt>
L25:
  subl   $0x1,-0x4(%rbp)
L75:
  cmpl   $0x0,-0x4(%rbp)
  jns    L95
  mov    $0xffffffff,%eax
L21:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D42
data_type: string
name: parse_data
arguments: tag: D7
data_type: string
name: parse_data
arguments: tag: D25
data_type: string
name: parse_data
arguments: tag: D34
data_type: string
name: parse_data
arguments: tag: D37
data_type: string
name: parse_data
arguments: tag: D14
data_type: string

tool: D42: >

tool: D7: <

tool: D25: >=

tool: D34: ==

tool: D37: !=

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

assistant: ```c
int find_last(float *buf, int n, char *type, float val) {
  int i;
  for (i = n - 1; i >= 0; 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;
}
```