// File: arnoldrobbins[P]mcilroy-regex/sed3.cpp
// Function: dosub(unsigned char*, unsigned char*)
int
dosub(uchar *where, uchar *rp)
{
	int c, n;
	regmatch_t *m;

	while((c = *rp++) != 0) {
		if(c == '\\') {
			c = *rp++;
			if (c >= '1' && c <= '9') {
				m = matches + c - '0';
				if(m->rm_eo == -1)
					continue;   /* or return 0 */
				n = m->rm_eo - m->rm_so;
				assure(&gendata, n);
				memmove(gendata.w,where+m->rm_so,n);
				gendata.w += n;
				continue;
			}
		} else if(c == '&') {
				assure(&gendata, eo-so);
				memmove(gendata.w,where+so,eo-so);
				gendata.w += eo-so;
				continue;
		}
		assure(&gendata, 1);
		*gendata.w++ = c;
	}
	return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10(%rbp)
movzbl (%rax), %eax
movl %eax, -0x14(%rbp)
cmpl $0x0, %eax
je 0x924e
cmpl $0x5c, -0x14(%rbp)
jne 0x9148
movq -0x10(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10(%rbp)
movzbl (%rax), %eax
movl %eax, -0x14(%rbp)
cmpl $0x31, -0x14(%rbp)
jl 0x9143
cmpl $0x39, -0x14(%rbp)
jg 0x9143
movslq -0x14(%rbp), %rcx
leaq 0xf1c4(%rip), %rax      # 0x18260
shlq $0x4, %rcx
addq %rcx, %rax
addq $-0x300, %rax           # imm = 0xFD00
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpq $-0x1, 0x8(%rax)
jne 0x90ba
jmp 0x9040
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
subq (%rcx), %rax
movl %eax, -0x18(%rbp)
cmpq $0x0, 0xf17c(%rip)      # 0x18250
je 0x90f9
movq 0xf163(%rip), %rax      # 0x18240
movq 0xf164(%rip), %rcx      # 0x18248
movslq -0x18(%rbp), %rsi
xorl %edx, %edx
subq %rsi, %rdx
addq %rdx, %rcx
addq $-0x1, %rcx
cmpq %rcx, %rax
jb 0x910a
movl -0x18(%rbp), %esi
leaq 0xf13d(%rip), %rdi      # 0x18240
callq 0x5ae0
jmp 0x910c
jmp 0x910c
movq 0xf12d(%rip), %rdi      # 0x18240
movq -0x8(%rbp), %rsi
movq -0x20(%rbp), %rax
addq (%rax), %rsi
movslq -0x18(%rbp), %rdx
callq 0x52b0
movl -0x18(%rbp), %ecx
movq 0xf10f(%rip), %rax      # 0x18240
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, 0xf102(%rip)      # 0x18240
jmp 0x9040
jmp 0x91f3
cmpl $0x26, -0x14(%rbp)
jne 0x91f1
cmpq $0x0, 0xf0f6(%rip)      # 0x18250
je 0x918b
movq 0xf0dd(%rip), %rax      # 0x18240
movq 0xf0de(%rip), %rcx      # 0x18248
xorl %edx, %edx
subq 0xf0f5(%rip), %rdx      # 0x18268
addq %rdx, %rcx
xorl %edx, %edx
subq 0xf0e1(%rip), %rdx      # 0x18260
addq %rdx, %rcx
addq $-0x1, %rcx
cmpq %rcx, %rax
jb 0x91a9
movq 0xf0d6(%rip), %rax      # 0x18268
subq 0xf0c7(%rip), %rax      # 0x18260
movl %eax, %esi
leaq 0xf09e(%rip), %rdi      # 0x18240
callq 0x5ae0
jmp 0x91ab
jmp 0x91ab
movq 0xf08e(%rip), %rdi      # 0x18240
movq -0x8(%rbp), %rsi
addq 0xf0a3(%rip), %rsi      # 0x18260
movq 0xf0a4(%rip), %rdx      # 0x18268
subq 0xf095(%rip), %rdx      # 0x18260
callq 0x52b0
movq 0xf091(%rip), %rax      # 0x18268
subq 0xf082(%rip), %rax      # 0x18260
addq 0xf05b(%rip), %rax      # 0x18240
movq %rax, 0xf054(%rip)      # 0x18240
jmp 0x9040
jmp 0x91f3
cmpq $0x0, 0xf055(%rip)      # 0x18250
je 0x9218
movq 0xf03c(%rip), %rax      # 0x18240
movq 0xf03d(%rip), %rcx      # 0x18248
addq $-0x1, %rcx
addq $-0x1, %rcx
cmpq %rcx, %rax
jb 0x922b
leaq 0xf021(%rip), %rdi      # 0x18240
movl $0x1, %esi
callq 0x5ae0
jmp 0x922d
jmp 0x922d
movl -0x14(%rbp), %eax
movb %al, %cl
movq 0xf007(%rip), %rax      # 0x18240
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0xeff9(%rip)      # 0x18240
movb %cl, (%rax)
jmp 0x9040
movl $0x1, %eax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)