user: Demonstrate the C code that generates the assembly output below:

```asm
<do_is_match>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %edx,-0x14(%rbp)
  mov    %ecx,-0x18(%rbp)
  mov    %r8d,-0x1c(%rbp)
  mov    %r9d,-0x20(%rbp)
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L152
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L183
  mov    $0x1,%eax
  jmp    L88
L183:
  mov    -0x20(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x18(%rbp)
  jle    L226
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L226
  mov    -0x20(%rbp),%eax
  lea    0x2(%rax),%r8d
  mov    -0x1c(%rbp),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <do_is_match>
  test   %eax,%eax
  je     L226
  mov    $0x1,%eax
  jmp    L88
L226:
  mov    $0x0,%eax
  jmp    L88
L152:
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L12
  mov    $0x0,%eax
  jmp    L88
L12:
  mov    -0x20(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x18(%rbp)
  jle    L72
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L72
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x20(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L143
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  jne    L64
L143:
  mov    -0x1c(%rbp),%eax
  lea    0x1(%rax),%r8d
  mov    -0x20(%rbp),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %edi,%r9d
  mov    %rax,%rdi
  call   <do_is_match>
  test   %eax,%eax
  jne    L35
  mov    -0x20(%rbp),%eax
  lea    0x2(%rax),%r8d
  mov    -0x1c(%rbp),%eax
  lea    0x1(%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <do_is_match>
  test   %eax,%eax
  jne    L35
  mov    -0x20(%rbp),%eax
  lea    0x2(%rax),%r8d
  mov    -0x1c(%rbp),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <do_is_match>
  test   %eax,%eax
  je     L109
L35:
  mov    $0x1,%eax
  jmp    L88
L64:
  mov    -0x20(%rbp),%eax
  lea    0x2(%rax),%r8d
  mov    -0x1c(%rbp),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <do_is_match>
  jmp    L88
L109:
  nop
  nop
  mov    $0x0,%eax
  jmp    L88
L72:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x20(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L87
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L87
  mov    $0x0,%eax
  jmp    L88
L87:
  mov    -0x20(%rbp),%eax
  lea    0x1(%rax),%r8d
  mov    -0x1c(%rbp),%eax
  lea    0x1(%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <do_is_match>
L88:
  leave
  ret
```

assistant: ```c
bool do_is_match(char *s, char *t, int ls, int lt, int ps, int pt) {
  if (s[ps] == '\0') {
    if (t[pt] == '\0') {
      return true;
    }
    return pt + 1 < lt && t[pt + 1] == '*' && do_is_match(s, t, ls, lt, ps, pt + 2);
  } else if (t[pt] == '\0') {
    return false;
  }
  if (pt + 1 < lt && t[pt + 1] == '*') {
    if (s[ps] == t[pt] || t[pt] == '.') {
      if (do_is_match(s, t, ls, lt, ps + 1, pt) || do_is_match(s, t, ls, lt, ps + 1, pt + 2) || do_is_match(s, t, ls, lt, ps, pt + 2)) {
        return true;
      }
    } else {
      return do_is_match(s, t, ls, lt, ps, pt + 2);
    }
  } else {
    if (s[ps] != t[pt] && t[pt] != '.') {
      return false;
    }
    return do_is_match(s, t, ls, lt, ps + 1, pt + 1);
  }
  return false;
}
```