	.data
	.globl	a
	.align	8
	.type	a, @object
	.size	a, 8
a:
	.quad	0xa

	.data
	.globl	s
	.align	8
	.type	s, @object
	.size	s, 8
s:
	.quad	.LC0

	.text
	.globl	func2
	.type	func2, @function
func2:
	push	%rbp
	mov	%rsp, %rbp
	push	%rbx
	push	%rsi
	push	%rdi
	sub	$0x0, %rsp
	mov	$.LC1, %rax
	mov	%rax, %rdi
	push	%rbx
	mov	%rsp, %rbx
	and	$0xfffffffffffffff0, %rsp
	call	printf
	mov	%rbx, %rsp
	pop	%rbx
	mov	%rax, %rbx
	mov	$0x0, %rax
	mov	-0x8(%rbp), %rbx
	mov	-0x10(%rbp), %rsi
	mov	-0x18(%rbp), %rdi
	leave
	ret
	.text
	.globl	func3
	.type	func3, @function
func3:
	push	%rbp
	mov	%rsp, %rbp
	push	%rbx
	push	%rsi
	push	%rdi
	sub	$0x0, %rsp
	mov	$.LC2, %rax
	mov	%rax, %rdi
	push	%rbx
	mov	%rsp, %rbx
	and	$0xfffffffffffffff0, %rsp
	call	printf
	mov	%rbx, %rsp
	pop	%rbx
	mov	%rax, %rbx
	mov	$0x0, %rax
	mov	-0x8(%rbp), %rbx
	mov	-0x10(%rbp), %rsi
	mov	-0x18(%rbp), %rdi
	leave
	ret
	.text
	.globl	func
	.type	func, @function
func:
	push	%rbp
	mov	%rsp, %rbp
	push	%rbx
	push	%rsi
	push	%rdi
	sub	$0x0, %rsp
	mov	$0x14, %rax
	push	%rax
	pop	%rax
	mov	%rax, a(%rip)
	mov	$.LC3, %rax
	push	%rax
	pop	%rax
	mov	%rax, s(%rip)
	mov	$.LC4, %rax
	mov	%rax, %rdi
	mov	a(%rip), %rax
	mov	%rax, %rsi
	mov	s(%rip), %rax
	mov	%rax, %rdx
	push	%rbx
	mov	%rsp, %rbx
	and	$0xfffffffffffffff0, %rsp
	call	printf
	mov	%rbx, %rsp
	pop	%rbx
	mov	%rax, %rbx
	mov	$0xa, %rax
	push	%rax
	push	%rbx
	mov	%rsp, %rbx
	and	$0xfffffffffffffff0, %rsp
	call	func2
	mov	%rbx, %rsp
	pop	%rbx
	mov	%rax, %rbx
	mov	$.LC5, %rax
	push	%rax
	push	%rbx
	mov	%rsp, %rbx
	and	$0xfffffffffffffff0, %rsp
	call	func3
	mov	%rbx, %rsp
	pop	%rbx
	mov	%rax, %rbx
	mov	$.LC6, %rax
	push	%rax
	mov	$0x0, %rax
	mov	-0x8(%rbp), %rbx
	mov	-0x10(%rbp), %rsi
	mov	-0x18(%rbp), %rdi
	leave
	ret
	.text
	.globl	main
	.type	main, @function
main:
	push	%rbp
	mov	%rsp, %rbp
	push	%rbx
	push	%rsi
	push	%rdi
	sub	$0x0, %rsp
	push	%rbx
	mov	%rsp, %rbx
	and	$0xfffffffffffffff0, %rsp
	call	func
	mov	%rbx, %rsp
	pop	%rbx
	mov	%rax, %rbx
	mov	$.LC7, %rax
	mov	%rax, %rdi
	push	%rbx
	mov	%rsp, %rbx
	and	$0xfffffffffffffff0, %rsp
	call	printf
	mov	%rbx, %rsp
	pop	%rbx
	mov	%rax, %rbx
	mov	$0x0, %rax
	mov	-0x8(%rbp), %rbx
	mov	-0x10(%rbp), %rsi
	mov	-0x18(%rbp), %rdi
	leave
	ret

	.data
.LC7:	.string	"return\n"
.LC6:	.string	"opqrstu"
.LC5:	.string	"hijklmn"
.LC4:	.string	"func: %d %s\n"
.LC3:	.string	"abcdefg"
.LC2:	.string	"func3:\n"
.LC1:	.string	"func2:\n"
.LC0:	.string	"test"
