user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<IsTestSelected>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %rdx,-0x58(%rbp)
  cmpq   $0x0,-0x48(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  cmpq   $0x0,-0x50(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  cmpq   $0x0,-0x58(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  mov    %rax,-0x28(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  mov    %rax,-0x20(%rbp)
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  jmp    L251
L107:
  addq   $0x1,-0x38(%rbp)
L125:
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <IsTestDelimiter@plt>
  test   %rax,%rax
  jne    L107
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  jmp    L194
L19:
  addq   $0x1,-0x38(%rbp)
L194:
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <IsTestDelimiter@plt>
  test   %rax,%rax
  jne    L221
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <IsFieldDelimiter@plt>
  test   %rax,%rax
  jne    L221
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L19
L221:
  mov    -0x38(%rbp),%rax
  sub    -0x18(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <IsFieldDelimiter@plt>
  test   %rax,%rax
  je     L90
  addq   $0x1,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  jmp    L90
L43:
  addq   $0x1,-0x38(%rbp)
L90:
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <IsTestDelimiter@plt>
  test   %rax,%rax
  jne    L9
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L43
L9:
  mov    -0x38(%rbp),%rax
  sub    -0x30(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L80
  mov    -0x18(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x50(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <WildCompare@plt>
  test   %rax,%rax
  je     L80
  mov    $0x1,%eax
  jmp    L162
L80:
  cmpq   $0x0,-0x10(%rbp)
  jne    L32
  mov    -0x30(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  mov    -0x58(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <WildCompare@plt>
  test   %rax,%rax
  je     L32
  mov    $0x1,%eax
  jmp    L162
L32:
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jne    L234
  mov    -0x10(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  jne    L234
  mov    -0x18(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x50(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <WildCompare@plt>
  test   %rax,%rax
  jne    L28
  mov    -0x18(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x58(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <WildCompare@plt>
  test   %rax,%rax
  je     L234
L28:
  mov    $0x1,%eax
  jmp    L162
L234:
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  je     L251
  mov    -0x18(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x50(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <WildCompare@plt>
  test   %rax,%rax
  je     L251
  mov    -0x30(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  mov    -0x58(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <WildCompare@plt>
  test   %rax,%rax
  je     L251
  mov    $0x1,%eax
  jmp    L162
L251:
  mov    -0x38(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L125
  mov    $0x0,%eax
L162:
  leave
  ret
```

assistant: ```c
bool IsTestSelected(const char *selection, const char *suite_name, const char *test_name) {
  assert(selection != NULL);
  assert(suite_name != NULL);
  assert(test_name != NULL);
  int32_t suite_length = (int32_t)strlen(suite_name);
  int32_t test_length = (int32_t)strlen(test_name);
  for (const char *c = selection; *c != '\0';) {
    while (IsTestDelimiter(*c)) {
      ++c;
    }
    const char *s_str = c;
    const char *t_str = c;
    while (!IsTestDelimiter(*c) && !IsFieldDelimiter(*c) && *c != '\0') {
      ++c;
    }
    int32_t s_len = (int32_t)(c - s_str);
    if (IsFieldDelimiter(*c)) {
      ++c;
      t_str = c;
    }
    while (!IsTestDelimiter(*c) && *c != '\0') {
      ++c;
    }
    int32_t t_len = (int32_t)(c - t_str);
    if (t_len == 0 && WildCompare(suite_length, suite_name, s_len, s_str)) {
      return true;
    } else if (s_len == 0 && WildCompare(test_length, test_name, t_len, t_str)) {
      return true;
    } else if (s_str == t_str && s_len == t_len && (WildCompare(suite_length, suite_name, s_len, s_str) || WildCompare(test_length, test_name, s_len, s_str))) {
      return true;
    } else if (s_str != t_str && WildCompare(suite_length, suite_name, s_len, s_str) && WildCompare(test_length, test_name, t_len, t_str)) {
      return true;
    }
  }
  return false;
}
```