// File: /workspace/github_c_makefile_star2_O0/rakitzis[P]rc/match.c
// Function: match
extern bool match(char *p, char *m, char *s) {
	struct { char *p, *m, *s; } next;
	if (m == NULL)
		return streq(p, s);
	next.s = NULL;
	while (*p || *s) {
		if (*p) {
			if (!*m) {
				/* ordinary character */
				if (*s == *p) {
					p++, m++, s++;
					continue;
				}
			} else switch (*p) {
			case '?':
				if (*s) {
					p++, m++, s++;
					continue;
				}
				break;
			case '[': {
				int r = 1 + rangematch(p+1, *s);
				if (r > 0) {
					p += r, m += r, s++;
					continue;
				}
				break;
			}
			case '*':
				next.p = p++;
				next.m = m++;
				next.s = *s ? s+1 : NULL;
				continue;
			default:
				panic("bad metacharacter in match");
				/* NOTREACHED */
				return FALSE; /* hush up gcc -Wall */
			}
		}
		if (next.s != NULL) {
			p = next.p;
			m = next.m;
			s = next.s;
			continue;
		}
		return FALSE;
	}
	return TRUE;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0xd168
movq -0x10(%rbp), %rax
movsbl (%rax), %ecx
movq -0x20(%rbp), %rax
movsbl (%rax), %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, -0x3d(%rbp)
jne 0xd158
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x31e0
cmpl $0x0, %eax
sete %al
movb %al, -0x3d(%rbp)
movb -0x3d(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x4(%rbp)
jmp 0xd34a
movq $0x0, -0x28(%rbp)
movq -0x10(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x3e(%rbp)
jne 0xd191
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
setne %al
movb %al, -0x3e(%rbp)
movb -0x3e(%rbp), %al
testb $0x1, %al
jne 0xd19d
jmp 0xd343
movq -0x10(%rbp), %rax
cmpb $0x0, (%rax)
je 0xd316
movq -0x18(%rbp), %rax
cmpb $0x0, (%rax)
jne 0xd1f0
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
movq -0x10(%rbp), %rcx
movsbl (%rcx), %ecx
cmpl %ecx, %eax
jne 0xd1eb
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0xd170
jmp 0xd314
movq -0x10(%rbp), %rax
movsbl (%rax), %eax
movl %eax, -0x44(%rbp)
subl $0x2a, %eax
je 0xd2a8
jmp 0xd205
movl -0x44(%rbp), %eax
subl $0x3f, %eax
je 0xd21c
jmp 0xd20f
movl -0x44(%rbp), %eax
subl $0x5b, %eax
je 0xd253
jmp 0xd2fd
movq -0x20(%rbp), %rax
cmpb $0x0, (%rax)
je 0xd24e
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0xd170
jmp 0xd312
movq -0x10(%rbp), %rdi
addq $0x1, %rdi
movq -0x20(%rbp), %rax
movsbl (%rax), %esi
callq 0xd360
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
jle 0xd2a6
movl -0x3c(%rbp), %ecx
movq -0x10(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x10(%rbp)
movl -0x3c(%rbp), %ecx
movq -0x18(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0xd170
jmp 0xd312
movq -0x10(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10(%rbp)
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
je 0xd2e8
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0xd2f0
xorl %eax, %eax
movq %rax, -0x50(%rbp)
jmp 0xd2f0
movq -0x50(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0xd170
leaq 0x8dbb(%rip), %rdi      # 0x160bf
callq 0x11c80
movl $0x0, -0x4(%rbp)
jmp 0xd34a
jmp 0xd314
jmp 0xd316
cmpq $0x0, -0x28(%rbp)
je 0xd33a
movq -0x38(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0xd170
movl $0x0, -0x4(%rbp)
jmp 0xd34a
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)