write_read:
	xorl	%eax, %eax
	testq	%rdx, %rdx
	je	.L1
.L7:
	movq	%rax, (%rsi)
	movq	(%rdi), %rax
	addq	$1, %rax
	subq	$1, %rdx
	jne	.L7
.L1:
	rep ret
array_copy:
	xorl	%eax, %eax
	testq	%rdx, %rdx
	jle	.L10
.L14:
	movq	(%rdi,%rax,8), %rcx
	movq	%rcx, (%rsi,%rax,8)
	addq	$1, %rax
	cmpq	%rdx, %rax
	jne	.L14
.L10:
	rep ret
array_clear:
	testq	%rdx, %rdx
	leaq	(%rsi,%rdx,8), %rax
	jle	.L15
.L19:
	movq	$0, (%rsi)
	addq	$8, %rsi
	cmpq	%rax, %rsi
	jne	.L19
.L15:
	rep ret
array_copy_2:
	leaq	-1(%rdx), %r8
	xorl	%eax, %eax
	testq	%r8, %r8
	jle	.L21
.L23:
	movq	(%rdi,%rax,8), %rcx
	movq	%rcx, (%rsi,%rax,8)
	movq	8(%rdi,%rax,8), %rcx
	movq	%rcx, 8(%rsi,%rax,8)
	addq	$2, %rax
	cmpq	%rax, %r8
	jg	.L23
	leaq	-2(%rdx), %rax
	shrq	%rax
	leaq	2(%rax,%rax), %rax
.L21:
	cmpq	%rax, %rdx
	jle	.L20
.L28:
	movq	(%rdi,%rax,8), %rcx
	movq	%rcx, (%rsi,%rax,8)
	addq	$1, %rax
	cmpq	%rdx, %rax
	jne	.L28
.L20:
	rep ret
array_clear_2:
	leaq	-1(%rdx), %rcx
	xorl	%eax, %eax
	testq	%rcx, %rcx
	jle	.L30
.L32:
	movq	$0, (%rsi,%rax,8)
	movq	$0, 8(%rsi,%rax,8)
	addq	$2, %rax
	cmpq	%rax, %rcx
	jg	.L32
	leaq	-2(%rdx), %rax
	shrq	%rax
	leaq	2(%rax,%rax), %rax
.L30:
	cmpq	%rax, %rdx
	jle	.L29
.L37:
	movq	$0, (%rsi,%rax,8)
	addq	$1, %rax
	cmpq	%rdx, %rax
	jne	.L37
.L29:
	rep ret
array_copy_4:
	leaq	-3(%rdx), %r8
	xorl	%eax, %eax
	testq	%r8, %r8
	jle	.L39
.L41:
	movq	(%rdi,%rax,8), %rcx
	movq	%rcx, (%rsi,%rax,8)
	movq	8(%rdi,%rax,8), %rcx
	movq	%rcx, 8(%rsi,%rax,8)
	movq	16(%rdi,%rax,8), %rcx
	movq	%rcx, 16(%rsi,%rax,8)
	movq	24(%rdi,%rax,8), %rcx
	movq	%rcx, 24(%rsi,%rax,8)
	addq	$4, %rax
	cmpq	%rax, %r8
	jg	.L41
	leaq	-4(%rdx), %rax
	shrq	$2, %rax
	leaq	4(,%rax,4), %rax
.L39:
	cmpq	%rax, %rdx
	jle	.L38
.L46:
	movq	(%rdi,%rax,8), %rcx
	movq	%rcx, (%rsi,%rax,8)
	addq	$1, %rax
	cmpq	%rdx, %rax
	jne	.L46
.L38:
	rep ret
array_clear_3:
	leaq	-2(%rdx), %rcx
	xorl	%eax, %eax
	testq	%rcx, %rcx
	jle	.L48
.L49:
	movq	$0, (%rsi,%rax,8)
	movq	$0, 8(%rsi,%rax,8)
	movq	$0, 16(%rsi,%rax,8)
	addq	$3, %rax
	cmpq	%rax, %rcx
	jg	.L49
.L48:
	cmpq	%rax, %rdx
	jle	.L47
.L54:
	movq	$0, (%rsi,%rax,8)
	addq	$1, %rax
	cmpq	%rdx, %rax
	jne	.L54
.L47:
	rep ret
array_clear_4:
	leaq	-3(%rdx), %rcx
	xorl	%eax, %eax
	testq	%rcx, %rcx
	jle	.L56
.L58:
	movq	$0, (%rsi,%rax,8)
	movq	$0, 8(%rsi,%rax,8)
	movq	$0, 16(%rsi,%rax,8)
	movq	$0, 24(%rsi,%rax,8)
	addq	$4, %rax
	cmpq	%rax, %rcx
	jg	.L58
	leaq	-4(%rdx), %rax
	shrq	$2, %rax
	leaq	4(,%rax,4), %rax
.L56:
	cmpq	%rax, %rdx
	jle	.L55
.L63:
	movq	$0, (%rsi,%rax,8)
	addq	$1, %rax
	cmpq	%rdx, %rax
	jne	.L63
.L55:
	rep ret
test2a:
	movq	idx(%rip), %rax
	movl	$data, %esi
	movq	%rdi, %rdx
	movq	%rsi, %rdi
	movq	copier(,%rax,8), %rax
	jmp	*%rax
test2b:
	movq	idx(%rip), %rax
	movq	%rdi, %rdx
	movl	$data+8, %esi
	movl	$data, %edi
	movq	copier(,%rax,8), %rax
	jmp	*%rax
test2c:
	movq	idx(%rip), %rax
	movq	%rdi, %rdx
	movl	$data, %esi
	movl	$data+8, %edi
	movq	copier(,%rax,8), %rax
	jmp	*%rax
test2d:
	movq	idx(%rip), %rax
	movq	%rdi, %rdx
	movl	$data2, %esi
	movl	$data, %edi
	movq	copier(,%rax,8), %rax
	jmp	*%rax
mem_clear:
	movq	%rsi, %rdi
	salq	$3, %rdx
	xorl	%esi, %esi
	jmp	memset
copy_array:
	xorl	%eax, %eax
	testq	%rdx, %rdx
	jle	.L69
.L73:
	movq	(%rdi,%rax,8), %rcx
	movq	%rcx, (%rsi,%rax,8)
	addq	$1, %rax
	cmpq	%rdx, %rax
	jne	.L73
.L69:
	rep ret
clear_array:
	testq	%rsi, %rsi
	leaq	(%rdi,%rsi,8), %rax
	jle	.L74
.L78:
	movq	$0, (%rdi)
	addq	$8, %rdi
	cmpq	%rax, %rdi
	jne	.L78
.L74:
	rep ret
clear_array_4:
	leaq	-3(%rsi), %rdx
	xorl	%eax, %eax
	testq	%rdx, %rdx
	jle	.L80
.L82:
	movq	$0, (%rdi,%rax,8)
	movq	$0, 8(%rdi,%rax,8)
	movq	$0, 16(%rdi,%rax,8)
	movq	$0, 24(%rdi,%rax,8)
	addq	$4, %rax
	cmpq	%rax, %rdx
	jg	.L82
	leaq	-4(%rsi), %rax
	shrq	$2, %rax
	leaq	4(,%rax,4), %rax
.L80:
	cmpq	%rax, %rsi
	jle	.L79
.L87:
	movq	$0, (%rdi,%rax,8)
	addq	$1, %rax
	cmpq	%rsi, %rax
	jne	.L87
.L79:
	rep ret
main:
	pushq	%r12
	movl	$1024, %esi
	movl	$test2a, %edi
	movq	$0, idx(%rip)
	pushq	%rbp
	xorl	%ebp, %ebp
	pushq	%rbx
	call	find_cpe
.L89:
	movq	test_descr(,%rbp,8), %r12
	xorl	%ebx, %ebx
.L92:
	movq	case_descr(%rbx), %rdx
	movq	%r12, %rsi
	movl	$.LC0, %edi
	xorl	%eax, %eax
	addq	$8, %rbx
	call	printf
	movq	case_fun-8(%rbx), %rdi
	movl	$1024, %esi
	movq	%rbp, idx(%rip)
	call	find_cpe
	movl	$.LC1, %edi
	movl	$1, %eax
	call	printf
	cmpq	$32, %rbx
	jne	.L92
	addq	$1, %rbp
	cmpq	$9, %rbp
	jne	.L89
	popq	%rbx
	popq	%rbp
	xorl	%eax, %eax
	popq	%r12
	ret

case_descr:
case_fun:
idx:
test_descr:
copier:
