user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<utest_should_filter_test>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L14
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  movq   $0x0,-0x8(%rbp)
  jmp    L218
L31:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  jne    L222
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  addq   $0x1,-0x18(%rbp)
  jmp    L186
L66:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  je     L41
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L215
  mov    -0x8(%rbp),%rax
  mov    %rax,-0x18(%rbp)
L215:
  addq   $0x1,-0x10(%rbp)
  addq   $0x1,-0x18(%rbp)
L186:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L229
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L66
  jmp    L229
L41:
  nop
L229:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L57
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L57
  mov    $0x0,%eax
  jmp    L182
L57:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L218
  mov    $0x1,%eax
  jmp    L182
L222:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L194
  mov    $0x1,%eax
  jmp    L182
L194:
  addq   $0x1,-0x10(%rbp)
  addq   $0x1,-0x18(%rbp)
L218:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L27
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L31
L27:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L160
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L14
  mov    -0x28(%rbp),%rax
  cmp    -0x18(%rbp),%rax
  je     L160
  mov    -0x18(%rbp),%rax
  sub    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  je     L14
L160:
  mov    $0x1,%eax
  jmp    L182
L14:
  mov    $0x0,%eax
L182:
  pop    %rbp
  ret
```

assistant: ```c
__attribute__((weak)) int utest_should_filter_test(const char *filter, const char *testcase) {
  if (filter) {
    const char *filter_cur = filter;
    const char *testcase_cur = testcase;
    const char *filter_wildcard = 0;
    while (('\0' != *filter_cur) && ('\0' != *testcase_cur)) {
      if ('*' == *filter_cur) {
        filter_wildcard = filter_cur;
        filter_cur++;
        while (('\0' != *filter_cur) && ('\0' != *testcase_cur)) {
          if ('*' == *filter_cur) {
            break;
          } else if (*filter_cur != *testcase_cur) {
            filter_cur = filter_wildcard;
          }
          testcase_cur++;
          filter_cur++;
        }
        if (('\0' == *filter_cur) && ('\0' == *testcase_cur)) {
          return 0;
        }
        if ('\0' == *testcase_cur) {
          return 1;
        }
      } else {
        if (*testcase_cur != *filter_cur) {
          return 1;
        } else {
          testcase_cur++;
          filter_cur++;
        }
      }
    }
    if (('\0' != *filter_cur) || (('\0' != *testcase_cur) && ((filter == filter_cur) || ('*' != filter_cur[-1])))) {
      return 1;
    }
  }
  return 0;
}
```