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

```asm
<strstr>:
  endbr64
  mov    %rsi,%r8
  movzbl (%rsi),%esi
  mov    %rdi,%rax
  test   %si,%si
  je     L80
  sub    $0x1,%rax
  jmp    L169
  nopl   0x0(%rax)
L229:
  cmp    %dx,%si
  je     L100
L169:
  mov    %rax,%rcx
  movzbl 0x1(%rax),%edx
  add    $0x1,%rax
  test   %dx,%dx
  jne    L229
L65:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L100:
  movzbl 0x1(%r8),%edi
  test   %di,%di
  je     L80
  lea    0x2(%rcx),%rdx
  movzbl 0x1(%rax),%ecx
  cmp    %cx,%di
  je     L128
L110:
  cmp    %si,%cx
  je     L182
  test   %cx,%cx
  je     L65
  movzbl 0x1(%rdx),%eax
  cmp    %ax,%si
  je     L241
  test   %ax,%ax
  je     L65
  movzbl 0x2(%rdx),%ecx
  add    $0x2,%rdx
  jmp    L110
L241:
  lea    0x1(%rdx),%rax
L92:
  movzbl 0x1(%rax),%ecx
  lea    0x1(%rax),%rdx
  cmp    %cx,%di
  jne    L110
  nopw   0x0(%rax,%rax,1)
L128:
  movzbl 0x2(%r8),%r9d
  cmp    %r9b,0x1(%rdx)
  je     L261
  test   %r9w,%r9w
  jne    L110
  jmp    L65
  nopl   0x0(%rax,%rax,1)
L182:
  mov    %rdx,%rax
  jmp    L92
  nopl   (%rax)
L80:
  ret
L261:
  lea    0x2(%r8),%r11
  lea    0x1(%rdx),%r10
  test   %r9w,%r9w
  je     L80
  push   %rbx
  jmp    L23
  nopw   0x0(%rax,%rax,1)
L175:
  test   %r9w,%r9w
  je     L86
  add    $0x2,%r10
  add    $0x2,%r11
  movzbl (%r11),%r9d
  cmp    %r9b,(%r10)
  jne    L22
L141:
  test   %r9w,%r9w
  je     L86
L23:
  movzbl 0x1(%r11),%r9d
  cmp    %r9b,0x1(%r10)
  je     L175
  nopl   0x0(%rax)
L22:
  test   %r9w,%r9w
  je     L109
  xchg   %ax,%ax
L58:
  cmp    %si,%cx
  je     L300
L277:
  test   %cx,%cx
  je     L109
  movzbl 0x1(%rdx),%eax
  cmp    %ax,%si
  je     L194
  test   %ax,%ax
  je     L109
  movzbl 0x2(%rdx),%ecx
  add    $0x2,%rdx
  cmp    %si,%cx
  jne    L277
L300:
  mov    %rdx,%rax
L295:
  movzbl 0x1(%rax),%ecx
  lea    0x1(%rax),%rdx
  cmp    %cx,%di
  jne    L58
  movzbl 0x2(%r8),%r9d
  cmp    %r9b,0x1(%rdx)
  jne    L22
  lea    0x2(%r8),%r11
  lea    0x1(%rdx),%r10
  jmp    L141
  nopw   0x0(%rax,%rax,1)
L109:
  xor    %eax,%eax
L86:
  pop    %rbx
  ret
  nopl   0x0(%rax)
L194:
  lea    0x1(%rdx),%rax
  jmp    L295
```

assistant: ```c
unsigned char *strstr(const unsigned char *phaystack, const unsigned char *pneedle) {
  const unsigned char *haystack, *needle;
  unsigned short a, b, c;
  const unsigned char *rneedle;
  const unsigned char *rhaystack;
  haystack = (const unsigned char *)phaystack;
  needle = (const unsigned char *)pneedle;
  b = *needle;
  if (!b)
  foundneedle:
    return (unsigned char *)haystack;
  haystack--;
  do {
    a = *++haystack;
    if (!a)
      return 0;
  } while (a != b);
  c = *++needle;
  if (!c)
    goto foundneedle;
  ++needle;
  a = *++haystack;
  if (a == c)
    goto crest;
  goto jin;
  for (;;) {
    a = *++haystack;
  jin:
    do {
      for (; a != b; a = *++haystack) {
        if (!a)
          return 0;
        if ((a = *++haystack) == b)
          break;
        if (!a)
          return 0;
      }
    } while ((a = *++haystack) != c);
  crest:
    if (*(rhaystack = haystack-- + 1) == (a = *(rneedle = needle)))
      do {
        if (!a)
          goto foundneedle;
        if (*++rhaystack != (a = *++needle))
          break;
        if (!a)
          goto foundneedle;
      } while (*++rhaystack == (a = *++needle));
    needle = rneedle;
    if (!a)
      return 0;
  }
}
```