	.file	"56122.c"
	.intel_syntax noprefix
	.text
	.section	.rodata
.LC0:
	.string	"[!] ERROR: "
	.text
	.globl	error
	.type	error, @function
error:
.LFB6:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 224
	mov	QWORD PTR -216[rbp], rdi
	mov	QWORD PTR -168[rbp], rsi
	mov	QWORD PTR -160[rbp], rdx
	mov	QWORD PTR -152[rbp], rcx
	mov	QWORD PTR -144[rbp], r8
	mov	QWORD PTR -136[rbp], r9
	test	al, al
	je	.L2
	movaps	XMMWORD PTR -128[rbp], xmm0
	movaps	XMMWORD PTR -112[rbp], xmm1
	movaps	XMMWORD PTR -96[rbp], xmm2
	movaps	XMMWORD PTR -80[rbp], xmm3
	movaps	XMMWORD PTR -64[rbp], xmm4
	movaps	XMMWORD PTR -48[rbp], xmm5
	movaps	XMMWORD PTR -32[rbp], xmm6
	movaps	XMMWORD PTR -16[rbp], xmm7
.L2:
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -184[rbp], rax
	xor	eax, eax
	lea	rdi, .LC0[rip]
	mov	eax, 0
	call	printf@PLT
	mov	DWORD PTR -208[rbp], 8
	mov	DWORD PTR -204[rbp], 48
	lea	rax, 16[rbp]
	mov	QWORD PTR -200[rbp], rax
	lea	rax, -176[rbp]
	mov	QWORD PTR -192[rbp], rax
	lea	rdx, -208[rbp]
	mov	rax, QWORD PTR -216[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	vprintf@PLT
	mov	edi, 10
	call	putchar@PLT
	nop
	mov	rax, QWORD PTR -184[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L3
	call	__stack_chk_fail@PLT
.L3:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	error, .-error
	.globl	fatal
	.type	fatal, @function
fatal:
.LFB7:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 224
	mov	QWORD PTR -216[rbp], rdi
	mov	QWORD PTR -168[rbp], rsi
	mov	QWORD PTR -160[rbp], rdx
	mov	QWORD PTR -152[rbp], rcx
	mov	QWORD PTR -144[rbp], r8
	mov	QWORD PTR -136[rbp], r9
	test	al, al
	je	.L5
	movaps	XMMWORD PTR -128[rbp], xmm0
	movaps	XMMWORD PTR -112[rbp], xmm1
	movaps	XMMWORD PTR -96[rbp], xmm2
	movaps	XMMWORD PTR -80[rbp], xmm3
	movaps	XMMWORD PTR -64[rbp], xmm4
	movaps	XMMWORD PTR -48[rbp], xmm5
	movaps	XMMWORD PTR -32[rbp], xmm6
	movaps	XMMWORD PTR -16[rbp], xmm7
.L5:
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -184[rbp], rax
	xor	eax, eax
	lea	rdi, .LC0[rip]
	mov	eax, 0
	call	printf@PLT
	mov	DWORD PTR -208[rbp], 8
	mov	DWORD PTR -204[rbp], 48
	lea	rax, 16[rbp]
	mov	QWORD PTR -200[rbp], rax
	lea	rax, -176[rbp]
	mov	QWORD PTR -192[rbp], rax
	lea	rdx, -208[rbp]
	mov	rax, QWORD PTR -216[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	vprintf@PLT
	mov	edi, 10
	call	putchar@PLT
	mov	edi, 1
	call	exit@PLT
	.cfi_endproc
.LFE7:
	.size	fatal, .-fatal
	.globl	str_intern_table
	.bss
	.align 8
	.type	str_intern_table, @object
	.size	str_intern_table, 8
str_intern_table:
	.zero	8
	.text
	.globl	str_intern_create
	.type	str_intern_create, @function
str_intern_create:
.LFB8:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	strlen@PLT
	mov	DWORD PTR -12[rbp], eax
	mov	eax, DWORD PTR -12[rbp]
	cdqe
	add	rax, 16
	mov	rdi, rax
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR [rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -12[rbp]
	mov	DWORD PTR 8[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	lea	rdx, 12[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rax
	mov	rdi, rdx
	call	strcpy@PLT
	mov	rdx, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR -12[rbp]
	cdqe
	mov	BYTE PTR 12[rdx+rax], 0
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	str_intern_create, .-str_intern_create
	.globl	str_intern_add
	.type	str_intern_add, @function
str_intern_add:
.LFB9:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	rax, QWORD PTR str_intern_table[rip]
	test	rax, rax
	je	.L10
	mov	rax, QWORD PTR str_intern_table[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L11
.L12:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR [rax]
	mov	QWORD PTR -8[rbp], rax
.L11:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR [rax]
	test	rax, rax
	jne	.L12
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR [rax], rdx
	jmp	.L14
.L10:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR str_intern_table[rip], rax
.L14:
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	str_intern_add, .-str_intern_add
	.globl	str_intern_len
	.type	str_intern_len, @function
str_intern_len:
.LFB10:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	DWORD PTR -12[rbp], 0
	cmp	QWORD PTR -24[rbp], 0
	je	.L16
	mov	rax, QWORD PTR -24[rbp]
	sub	rax, 12
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 8[rax]
	mov	DWORD PTR -12[rbp], eax
	jmp	.L17
.L16:
	mov	DWORD PTR -12[rbp], 0
.L17:
	mov	eax, DWORD PTR -12[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	str_intern_len, .-str_intern_len
	.globl	str_intern
	.type	str_intern, @function
str_intern:
.LFB11:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	mov	QWORD PTR -16[rbp], 0
	cmp	QWORD PTR -40[rbp], 0
	je	.L20
	mov	rax, QWORD PTR -40[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	je	.L20
	mov	DWORD PTR -24[rbp], 0
	mov	rax, QWORD PTR str_intern_table[rip]
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	strlen@PLT
	mov	DWORD PTR -20[rbp], eax
	jmp	.L21
.L25:
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 8[rax]
	cmp	DWORD PTR -20[rbp], eax
	jne	.L22
	mov	rax, QWORD PTR -8[rbp]
	lea	rdx, 12[rax]
	mov	rax, QWORD PTR -40[rbp]
	mov	rsi, rax
	mov	rdi, rdx
	call	strcmp@PLT
	test	eax, eax
	jne	.L22
	mov	eax, 1
	jmp	.L23
.L22:
	mov	eax, 0
.L23:
	mov	DWORD PTR -24[rbp], eax
	cmp	DWORD PTR -24[rbp], 0
	jne	.L21
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR [rax]
	mov	QWORD PTR -8[rbp], rax
.L21:
	cmp	DWORD PTR -24[rbp], 0
	jne	.L24
	cmp	QWORD PTR -8[rbp], 0
	jne	.L25
.L24:
	cmp	DWORD PTR -24[rbp], 0
	jne	.L26
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	str_intern_create
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	str_intern_add
.L26:
	mov	rax, QWORD PTR -8[rbp]
	add	rax, 12
	mov	QWORD PTR -16[rbp], rax
	jmp	.L27
.L20:
	mov	QWORD PTR -16[rbp], 0
.L27:
	mov	rax, QWORD PTR -16[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	str_intern, .-str_intern
	.globl	make_func_param
	.type	make_func_param, @function
make_func_param:
.LFB12:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	edi, 24
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L30
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR [rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 16[rax], 0
.L30:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE12:
	.size	make_func_param, .-make_func_param
	.globl	reverse_func_params_list
	.type	reverse_func_params_list, @function
reverse_func_params_list:
.LFB13:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	cmp	QWORD PTR -24[rbp], 0
	je	.L33
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	test	rax, rax
	jne	.L34
.L33:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L35
.L34:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reverse_func_params_list
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], 0
.L35:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE13:
	.size	reverse_func_params_list, .-reverse_func_params_list
	.globl	make_aggr_element
	.type	make_aggr_element, @function
make_aggr_element:
.LFB14:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	DWORD PTR -36[rbp], edx
	mov	edi, 32
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L38
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR [rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -36[rbp]
	mov	DWORD PTR 16[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 24[rax], 0
.L38:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE14:
	.size	make_aggr_element, .-make_aggr_element
	.globl	_type_void
	.bss
	.align 32
	.type	_type_void, @object
	.size	_type_void, 48
_type_void:
	.zero	48
	.globl	_type_char
	.data
	.align 32
	.type	_type_char, @object
	.size	_type_char, 48
_type_char:
	.long	1
	.long	1
	.quad	0
	.zero	32
	.globl	_type_int
	.align 32
	.type	_type_int, @object
	.size	_type_int, 48
_type_int:
	.long	2
	.long	4
	.quad	0
	.zero	32
	.text
	.globl	type_void
	.type	type_void, @function
type_void:
.LFB15:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	lea	rax, _type_void[rip]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE15:
	.size	type_void, .-type_void
	.globl	type_char
	.type	type_char, @function
type_char:
.LFB16:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	lea	rax, _type_char[rip]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE16:
	.size	type_char, .-type_char
	.globl	type_int
	.type	type_int, @function
type_int:
.LFB17:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	lea	rax, _type_int[rip]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE17:
	.size	type_int, .-type_int
	.globl	type_is_arithmetic
	.type	type_is_arithmetic, @function
type_is_arithmetic:
.LFB18:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 8
	mov	QWORD PTR -8[rbp], rdi
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -8[rbp], rax
	je	.L47
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -8[rbp], rax
	jne	.L48
.L47:
	mov	eax, 1
	jmp	.L50
.L48:
	mov	eax, 0
.L50:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE18:
	.size	type_is_arithmetic, .-type_is_arithmetic
	.globl	type_ptr_cache
	.bss
	.align 32
	.type	type_ptr_cache, @object
	.size	type_ptr_cache, 4800
type_ptr_cache:
	.zero	4800
	.globl	type_ptr_cache_count
	.align 4
	.type	type_ptr_cache_count, @object
	.size	type_ptr_cache_count, 4
type_ptr_cache_count:
	.zero	4
	.text
	.globl	type_ptr
	.type	type_ptr, @function
type_ptr:
.LFB19:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	DWORD PTR -12[rbp], 0
	jmp	.L52
.L55:
	mov	eax, DWORD PTR -12[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	mov	rdx, rax
	lea	rax, type_ptr_cache[rip+8]
	mov	rax, QWORD PTR [rdx+rax]
	cmp	QWORD PTR -24[rbp], rax
	jne	.L53
	mov	eax, DWORD PTR -12[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	lea	rdx, type_ptr_cache[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	jmp	.L54
.L53:
	add	DWORD PTR -12[rbp], 1
.L52:
	mov	eax, DWORD PTR type_ptr_cache_count[rip]
	cmp	DWORD PTR -12[rbp], eax
	jl	.L55
.L54:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L56
	mov	eax, DWORD PTR type_ptr_cache_count[rip]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	lea	rdx, type_ptr_cache[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	mov	eax, DWORD PTR type_ptr_cache_count[rip]
	add	eax, 1
	mov	DWORD PTR type_ptr_cache_count[rip], eax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 3
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 4[rax], 4
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rax], rdx
.L56:
	mov	rax, QWORD PTR -8[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE19:
	.size	type_ptr, .-type_ptr
	.globl	type_func
	.type	type_func, @function
type_func:
.LFB20:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	edi, 48
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L59
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 5
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 24[rax], rdx
.L59:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE20:
	.size	type_func, .-type_func
	.globl	type_array_cache
	.bss
	.align 32
	.type	type_array_cache, @object
	.size	type_array_cache, 4800
type_array_cache:
	.zero	4800
	.globl	type_array_cache_count
	.align 4
	.type	type_array_cache_count, @object
	.size	type_array_cache_count, 4
type_array_cache_count:
	.zero	4
	.text
	.globl	type_array
	.type	type_array, @function
type_array:
.LFB21:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	DWORD PTR -28[rbp], esi
	mov	QWORD PTR -8[rbp], 0
	mov	DWORD PTR -12[rbp], 0
	jmp	.L62
.L65:
	mov	eax, DWORD PTR -12[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	mov	rdx, rax
	lea	rax, type_array_cache[rip+8]
	mov	rax, QWORD PTR [rdx+rax]
	cmp	QWORD PTR -24[rbp], rax
	jne	.L63
	mov	eax, DWORD PTR -12[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	mov	rdx, rax
	lea	rax, type_array_cache[rip+16]
	mov	eax, DWORD PTR [rdx+rax]
	cmp	DWORD PTR -28[rbp], eax
	jne	.L63
	mov	eax, DWORD PTR -12[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	lea	rdx, type_array_cache[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	jmp	.L64
.L63:
	add	DWORD PTR -12[rbp], 1
.L62:
	mov	eax, DWORD PTR type_array_cache_count[rip]
	cmp	DWORD PTR -12[rbp], eax
	jl	.L65
.L64:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L66
	mov	eax, DWORD PTR type_array_cache_count[rip]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	lea	rdx, type_array_cache[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	mov	eax, DWORD PTR type_array_cache_count[rip]
	add	eax, 1
	mov	DWORD PTR type_array_cache_count[rip], eax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 4
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -28[rbp]
	mov	DWORD PTR 16[rax], edx
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	imul	eax, DWORD PTR -28[rbp]
	mov	edx, eax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 4[rax], edx
.L66:
	mov	rax, QWORD PTR -8[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE21:
	.size	type_array, .-type_array
	.globl	type_struct_cache
	.bss
	.align 32
	.type	type_struct_cache, @object
	.size	type_struct_cache, 4800
type_struct_cache:
	.zero	4800
	.globl	type_struct_cache_count
	.align 4
	.type	type_struct_cache_count, @object
	.size	type_struct_cache_count, 4
type_struct_cache_count:
	.zero	4
	.section	.rodata
.LC1:
	.string	"Cannot redefine a structure"
.LC2:
	.string	"Invalid structure member type"
.LC3:
	.string	"the_stack_data/56122.c"
.LC4:
	.string	"res->size"
	.text
	.globl	type_struct
	.type	type_struct, @function
type_struct:
.LFB22:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	mov	QWORD PTR -48[rbp], rsi
	mov	QWORD PTR -16[rbp], 0
	mov	DWORD PTR -20[rbp], 0
	jmp	.L69
.L72:
	mov	eax, DWORD PTR -20[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	mov	rdx, rax
	lea	rax, type_struct_cache[rip+32]
	mov	rax, QWORD PTR [rdx+rax]
	cmp	QWORD PTR -40[rbp], rax
	jne	.L70
	mov	eax, DWORD PTR -20[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	lea	rdx, type_struct_cache[rip]
	add	rax, rdx
	mov	QWORD PTR -16[rbp], rax
	jmp	.L71
.L70:
	add	DWORD PTR -20[rbp], 1
.L69:
	mov	eax, DWORD PTR type_struct_cache_count[rip]
	cmp	DWORD PTR -20[rbp], eax
	jl	.L72
.L71:
	cmp	QWORD PTR -16[rbp], 0
	jne	.L73
	mov	eax, DWORD PTR type_struct_cache_count[rip]
	movsx	rdx, eax
	mov	rax, rdx
	add	rax, rax
	add	rax, rdx
	sal	rax, 4
	lea	rdx, type_struct_cache[rip]
	add	rax, rdx
	mov	QWORD PTR -16[rbp], rax
	mov	eax, DWORD PTR type_struct_cache_count[rip]
	add	eax, 1
	mov	DWORD PTR type_struct_cache_count[rip], eax
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR [rax], 6
	mov	rax, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 32[rax], rdx
	jmp	.L74
.L73:
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 40[rax]
	test	rax, rax
	je	.L74
	cmp	QWORD PTR -48[rbp], 0
	je	.L74
	lea	rdi, .LC1[rip]
	mov	eax, 0
	call	fatal
.L74:
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 40[rax]
	test	rax, rax
	jne	.L75
	cmp	QWORD PTR -48[rbp], 0
	je	.L75
	mov	rax, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 40[rax], rdx
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR 4[rax], 0
	mov	rax, QWORD PTR -48[rbp]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L76
.L80:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	test	eax, eax
	jne	.L77
	lea	rdi, .LC2[rip]
	mov	eax, 0
	call	fatal
.L77:
	mov	rax, QWORD PTR -16[rbp]
	mov	ecx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	test	eax, eax
	jle	.L78
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	esi, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	mov	edx, eax
	mov	eax, 4
	sub	eax, edx
	add	eax, esi
	jmp	.L79
.L78:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
.L79:
	lea	edx, [rax+rcx]
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR 4[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -8[rbp], rax
.L76:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L80
	mov	rax, QWORD PTR -16[rbp]
	mov	eax, DWORD PTR 4[rax]
	test	eax, eax
	jne	.L75
	lea	rcx, __PRETTY_FUNCTION__.16[rip]
	mov	edx, 460
	lea	rsi, .LC3[rip]
	lea	rdi, .LC4[rip]
	call	__assert_fail@PLT
.L75:
	mov	rax, QWORD PTR -16[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE22:
	.size	type_struct, .-type_struct
	.globl	get_struct_member
	.type	get_struct_member, @function
get_struct_member:
.LFB23:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -16[rbp], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 40[rax]
	test	rax, rax
	je	.L83
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L84
.L86:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR [rax]
	cmp	QWORD PTR -32[rbp], rax
	jne	.L85
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR -16[rbp], rax
	jmp	.L83
.L85:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -8[rbp], rax
.L84:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L86
.L83:
	mov	rax, QWORD PTR -16[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE23:
	.size	get_struct_member, .-get_struct_member
	.globl	get_struct_member_offset
	.type	get_struct_member_offset, @function
get_struct_member_offset:
.LFB24:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	DWORD PTR -12[rbp], -1
	mov	rdx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L89
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 16[rax]
	mov	DWORD PTR -12[rbp], eax
.L89:
	mov	eax, DWORD PTR -12[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE24:
	.size	get_struct_member_offset, .-get_struct_member_offset
	.globl	label_table
	.bss
	.align 32
	.type	label_table, @object
	.size	label_table, 16000
label_table:
	.zero	16000
	.globl	label_table_count
	.align 4
	.type	label_table_count, @object
	.size	label_table_count, 4
label_table_count:
	.zero	4
	.text
	.globl	label_add
	.type	label_add, @function
label_add:
.LFB25:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	eax, DWORD PTR label_table_count[rip]
	cdqe
	sal	rax, 4
	mov	rdx, rax
	lea	rax, label_table[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	mov	eax, DWORD PTR label_table_count[rip]
	add	eax, 1
	mov	DWORD PTR label_table_count[rip], eax
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 0
	mov	rax, QWORD PTR -8[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE25:
	.size	label_add, .-label_add
	.globl	label_get
	.type	label_get, @function
label_get:
.LFB26:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	DWORD PTR -12[rbp], 0
	jmp	.L94
.L97:
	mov	eax, DWORD PTR -12[rbp]
	cdqe
	sal	rax, 4
	mov	rdx, rax
	lea	rax, label_table[rip+8]
	mov	rax, QWORD PTR [rdx+rax]
	cmp	QWORD PTR -24[rbp], rax
	jne	.L95
	mov	eax, DWORD PTR -12[rbp]
	cdqe
	sal	rax, 4
	mov	rdx, rax
	lea	rax, label_table[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	jmp	.L96
.L95:
	add	DWORD PTR -12[rbp], 1
.L94:
	mov	eax, DWORD PTR label_table_count[rip]
	cmp	DWORD PTR -12[rbp], eax
	jl	.L97
.L96:
	mov	rax, QWORD PTR -8[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE26:
	.size	label_get, .-label_get
	.globl	label_get_or_add
	.type	label_get_or_add, @function
label_get_or_add:
.LFB27:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 24
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	label_get
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	jne	.L100
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	label_add
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 0
.L100:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE27:
	.size	label_get_or_add, .-label_get_or_add
	.globl	sym_table
	.bss
	.align 32
	.type	sym_table, @object
	.size	sym_table, 40000
sym_table:
	.zero	40000
	.globl	sym_table_count
	.align 4
	.type	sym_table_count, @object
	.size	sym_table_count, 4
sym_table_count:
	.zero	4
	.text
	.globl	sym_add
	.type	sym_add, @function
sym_add:
.LFB28:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -8[rbp], 0
	mov	eax, DWORD PTR sym_table_count[rip]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	lea	rdx, sym_table[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	mov	eax, DWORD PTR sym_table_count[rip]
	add	eax, 1
	mov	DWORD PTR sym_table_count[rip], eax
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR [rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 20[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 24[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 32[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 36[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE28:
	.size	sym_add, .-sym_add
	.globl	sym_get
	.type	sym_get, @function
sym_get:
.LFB29:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	eax, DWORD PTR sym_table_count[rip]
	sub	eax, 1
	mov	DWORD PTR -12[rbp], eax
	jmp	.L105
.L108:
	mov	eax, DWORD PTR -12[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	mov	rdx, rax
	lea	rax, sym_table[rip]
	mov	rax, QWORD PTR [rdx+rax]
	cmp	QWORD PTR -24[rbp], rax
	jne	.L106
	mov	eax, DWORD PTR -12[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	lea	rdx, sym_table[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	jmp	.L107
.L106:
	sub	DWORD PTR -12[rbp], 1
.L105:
	cmp	DWORD PTR -12[rbp], 0
	jns	.L108
.L107:
	mov	rax, QWORD PTR -8[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE29:
	.size	sym_get, .-sym_get
	.globl	sym_add_func_param
	.type	sym_add_func_param, @function
sym_add_func_param:
.LFB30:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	DWORD PTR -36[rbp], edx
	mov	QWORD PTR -8[rbp], 0
	mov	eax, DWORD PTR sym_table_count[rip]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	lea	rdx, sym_table[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	mov	eax, DWORD PTR sym_table_count[rip]
	add	eax, 1
	mov	DWORD PTR sym_table_count[rip], eax
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR [rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -36[rbp]
	mov	DWORD PTR 20[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 24[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 32[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 36[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE30:
	.size	sym_add_func_param, .-sym_add_func_param
	.globl	init_builtin_sym
	.type	init_builtin_sym, @function
init_builtin_sym:
.LFB31:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE31:
	.size	init_builtin_sym, .-init_builtin_sym
	.globl	sym_reset
	.type	sym_reset, @function
sym_reset:
.LFB32:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	DWORD PTR sym_table_count[rip], 0
	mov	eax, 0
	call	init_builtin_sym
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE32:
	.size	sym_reset, .-sym_reset
	.globl	dup_expr
	.type	dup_expr, @function
dup_expr:
.LFB33:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	mov	rcx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, 56
	mov	rsi, rcx
	mov	rdi, rax
	call	memcpy@PLT
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE33:
	.size	dup_expr, .-dup_expr
	.globl	make_expr_intlit
	.type	make_expr_intlit, @function
make_expr_intlit:
.LFB34:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L117
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 1
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -20[rbp]
	mov	DWORD PTR 4[rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L117:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE34:
	.size	make_expr_intlit, .-make_expr_intlit
	.globl	make_expr_id
	.type	make_expr_id, @function
make_expr_id:
.LFB35:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L120
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 2
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L120:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE35:
	.size	make_expr_id, .-make_expr_id
	.globl	make_expr_cast
	.type	make_expr_cast, @function
make_expr_cast:
.LFB36:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L123
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 10
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 40[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L123:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE36:
	.size	make_expr_cast, .-make_expr_cast
	.globl	make_expr_member_access
	.type	make_expr_member_access, @function
make_expr_member_access:
.LFB37:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L126
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 5
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L126:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE37:
	.size	make_expr_member_access, .-make_expr_member_access
	.globl	make_expr_member_access_ptr
	.type	make_expr_member_access_ptr, @function
make_expr_member_access_ptr:
.LFB38:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L129
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 6
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L129:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE38:
	.size	make_expr_member_access_ptr, .-make_expr_member_access_ptr
	.globl	make_expr_unary
	.type	make_expr_unary, @function
make_expr_unary:
.LFB39:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L132
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -20[rbp]
	mov	DWORD PTR [rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 24[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L132:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE39:
	.size	make_expr_unary, .-make_expr_unary
	.globl	make_expr_binary
	.type	make_expr_binary, @function
make_expr_binary:
.LFB40:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	DWORD PTR -20[rbp], edi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -40[rbp], rdx
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L135
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -20[rbp]
	mov	DWORD PTR [rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 24[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L135:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE40:
	.size	make_expr_binary, .-make_expr_binary
	.globl	make_expr_ternary
	.type	make_expr_ternary, @function
make_expr_ternary:
.LFB41:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -40[rbp], rdx
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L138
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 24
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 32[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 24[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L138:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE41:
	.size	make_expr_ternary, .-make_expr_ternary
	.globl	make_expr_compound
	.type	make_expr_compound, @function
make_expr_compound:
.LFB42:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 56
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L141
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR [rax], 26
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L141:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE42:
	.size	make_expr_compound, .-make_expr_compound
	.section	.rodata
.LC5:
	.string	"%d - %s => "
	.text
	.globl	print_sym_table
	.type	print_sym_table, @function
print_sym_table:
.LFB43:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	DWORD PTR -12[rbp], 0
	jmp	.L144
.L145:
	mov	eax, DWORD PTR -12[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	lea	rdx, sym_table[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	eax, DWORD PTR -12[rbp]
	mov	esi, eax
	lea	rdi, .LC5[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_type
	mov	edi, 10
	call	putchar@PLT
	add	DWORD PTR -12[rbp], 1
.L144:
	mov	eax, DWORD PTR sym_table_count[rip]
	cmp	DWORD PTR -12[rbp], eax
	jl	.L145
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_type
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE43:
	.size	print_sym_table, .-print_sym_table
	.section	.rodata
.LC6:
	.string	"%s"
.LC7:
	.string	"%d"
.LC8:
	.string	"(call %s)"
.LC9:
	.string	"])"
.LC10:
	.string	".%s)"
.LC11:
	.string	"->%s)"
.LC12:
	.string	"(inc "
.LC13:
	.string	"(dec "
.LC14:
	.string	"(cast ("
.LC15:
	.string	") "
.LC16:
	.string	"(deref "
.LC17:
	.string	"(addrof "
.LC18:
	.string	"(-"
.LC19:
	.string	"*"
.LC20:
	.string	"/"
.LC21:
	.string	"%"
.LC22:
	.string	"+"
.LC23:
	.string	"-"
.LC24:
	.string	"<"
.LC25:
	.string	"<="
.LC26:
	.string	">"
.LC27:
	.string	">="
.LC28:
	.string	" ? "
.LC29:
	.string	" : "
.LC30:
	.string	"="
.LC31:
	.string	", "
.LC32:
	.string	"0"
.LC33:
	.string	"(%s "
	.text
	.globl	print_expr
	.type	print_expr, @function
print_expr:
.LFB44:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 26
	ja	.L178
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L149[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L149[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L149:
	.long	.L178-.L149
	.long	.L172-.L149
	.long	.L171-.L149
	.long	.L170-.L149
	.long	.L169-.L149
	.long	.L168-.L149
	.long	.L167-.L149
	.long	.L166-.L149
	.long	.L165-.L149
	.long	.L164-.L149
	.long	.L163-.L149
	.long	.L162-.L149
	.long	.L161-.L149
	.long	.L178-.L149
	.long	.L160-.L149
	.long	.L159-.L149
	.long	.L158-.L149
	.long	.L157-.L149
	.long	.L156-.L149
	.long	.L155-.L149
	.long	.L154-.L149
	.long	.L153-.L149
	.long	.L152-.L149
	.long	.L178-.L149
	.long	.L151-.L149
	.long	.L150-.L149
	.long	.L148-.L149
	.text
.L171:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC6[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L173
.L172:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	mov	esi, eax
	lea	rdi, .LC7[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L173
.L170:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC8[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L173
.L169:
	mov	edi, 40
	call	putchar@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 91
	call	putchar@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	print_expr
	lea	rdi, .LC9[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L173
.L168:
	mov	edi, 40
	call	putchar@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC10[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L173
.L167:
	mov	edi, 40
	call	putchar@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC11[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L173
.L166:
	lea	rdi, .LC12[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 41
	call	putchar@PLT
	jmp	.L173
.L165:
	lea	rdi, .LC13[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 41
	call	putchar@PLT
	jmp	.L173
.L163:
	lea	rdi, .LC14[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	print_type
	lea	rdi, .LC15[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 41
	call	putchar@PLT
	jmp	.L173
.L162:
	lea	rdi, .LC16[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 41
	call	putchar@PLT
	jmp	.L173
.L161:
	lea	rdi, .LC17[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 41
	call	putchar@PLT
	jmp	.L173
.L164:
	lea	rdi, .LC18[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 41
	call	putchar@PLT
	jmp	.L173
.L160:
	lea	rax, .LC19[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L159:
	lea	rax, .LC20[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L158:
	lea	rax, .LC21[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L157:
	lea	rax, .LC22[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L156:
	lea	rax, .LC23[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L155:
	lea	rax, .LC24[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L154:
	lea	rax, .LC25[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L153:
	lea	rax, .LC26[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L152:
	lea	rax, .LC27[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L151:
	mov	edi, 40
	call	putchar@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	lea	rdi, .LC28[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	print_expr
	lea	rdi, .LC29[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 41
	call	putchar@PLT
	jmp	.L173
.L150:
	lea	rax, .LC30[rip]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L173
.L148:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -24[rbp], rax
	jmp	.L174
.L176:
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	print_expr
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 48[rax]
	test	rax, rax
	je	.L175
	lea	rdi, .LC31[rip]
	mov	eax, 0
	call	printf@PLT
.L175:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -24[rbp], rax
.L174:
	cmp	QWORD PTR -24[rbp], 0
	jne	.L176
	jmp	.L173
.L178:
	lea	rcx, __PRETTY_FUNCTION__.15[rip]
	mov	edx, 1029
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L173:
	cmp	QWORD PTR -8[rbp], 0
	je	.L179
	mov	rax, QWORD PTR -8[rbp]
	mov	rsi, rax
	lea	rdi, .LC33[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 32
	call	putchar@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 41
	call	putchar@PLT
.L179:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE44:
	.size	print_expr, .-print_expr
	.globl	make_decl
	.type	make_decl, @function
make_decl:
.LFB45:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 16
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L181
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR [rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
.L181:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE45:
	.size	make_decl, .-make_decl
	.section	.rodata
.LC34:
	.string	"void"
.LC35:
	.string	"char"
.LC36:
	.string	"int"
.LC37:
	.string	"ptr to "
.LC38:
	.string	"array of %d of "
.LC39:
	.string	"struct %s"
.LC40:
	.string	"func ("
.LC41:
	.string	") => "
.LC42:
	.string	"Invalid type to print"
	.text
	.globl	print_type
	.type	print_type, @function
print_type:
.LFB46:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	eax, 0
	call	type_void
	cmp	QWORD PTR -24[rbp], rax
	jne	.L184
	lea	rdi, .LC34[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L195
.L184:
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -24[rbp], rax
	jne	.L186
	lea	rdi, .LC35[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L195
.L186:
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -24[rbp], rax
	jne	.L187
	lea	rdi, .LC36[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L195
.L187:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L188
	lea	rdi, .LC37[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_type
	jmp	.L195
.L188:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L189
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 16[rax]
	mov	esi, eax
	lea	rdi, .LC38[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_type
	jmp	.L195
.L189:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jne	.L190
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rsi, rax
	lea	rdi, .LC39[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L195
.L190:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 5
	jne	.L191
	lea	rdi, .LC40[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L192
.L194:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_type
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 16[rax]
	test	rax, rax
	je	.L193
	lea	rdi, .LC31[rip]
	mov	eax, 0
	call	printf@PLT
.L193:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -8[rbp], rax
.L192:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L194
	lea	rdi, .LC41[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_type
	jmp	.L195
.L191:
	lea	rdi, .LC42[rip]
	mov	eax, 0
	call	fatal
.L195:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE46:
	.size	print_type, .-print_type
	.section	.rodata
.LC43:
	.string	"(var %s "
	.text
	.globl	print_decl
	.type	print_decl, @function
print_decl:
.LFB47:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC43[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR [rax]
	mov	rdi, rax
	call	print_type
	mov	edi, 41
	call	putchar@PLT
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE47:
	.size	print_decl, .-print_decl
	.globl	make_stmt
	.type	make_stmt, @function
make_stmt:
.LFB48:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 64
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L198
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -20[rbp]
	mov	DWORD PTR [rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 56[rax], 0
.L198:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE48:
	.size	make_stmt, .-make_stmt
	.globl	dup_stmt
	.type	dup_stmt, @function
dup_stmt:
.LFB49:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	edi, 64
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	mov	rcx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, 64
	mov	rsi, rcx
	mov	rdi, rax
	call	memcpy@PLT
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE49:
	.size	dup_stmt, .-dup_stmt
	.globl	make_stmt_decl
	.type	make_stmt_decl, @function
make_stmt_decl:
.LFB50:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 0
	call	make_stmt
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L203
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rax], rdx
.L203:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE50:
	.size	make_stmt_decl, .-make_stmt_decl
	.globl	make_stmt_expr
	.type	make_stmt_expr, @function
make_stmt_expr:
.LFB51:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L206
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rax], rdx
.L206:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE51:
	.size	make_stmt_expr, .-make_stmt_expr
	.globl	make_stmt_if
	.type	make_stmt_if, @function
make_stmt_if:
.LFB52:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -40[rbp], rdx
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 6
	call	make_stmt
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L209
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 24[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 40[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 48[rax], rdx
.L209:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE52:
	.size	make_stmt_if, .-make_stmt_if
	.globl	make_stmt_while
	.type	make_stmt_while, @function
make_stmt_while:
.LFB53:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 7
	call	make_stmt
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L212
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 24[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 40[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L212:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE53:
	.size	make_stmt_while, .-make_stmt_while
	.globl	make_stmt_for
	.type	make_stmt_for, @function
make_stmt_for:
.LFB54:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -40[rbp], rdx
	mov	QWORD PTR -48[rbp], rcx
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 8
	call	make_stmt
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L215
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 24[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 32[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 40[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 48[rax], 0
.L215:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE54:
	.size	make_stmt_for, .-make_stmt_for
	.section	.rodata
.LC44:
	.string	"("
.LC45:
	.string	"  "
.LC46:
	.string	"(ret "
.LC47:
	.string	"(label %s)"
.LC48:
	.string	"(goto %s)"
.LC49:
	.string	"(if "
.LC50:
	.string	" else "
.LC51:
	.string	" goto %s)"
.LC52:
	.string	"(while "
.LC53:
	.string	"(for "
.LC54:
	.string	"Invalid statement to print"
	.text
	.globl	print_stmt
	.type	print_stmt, @function
print_stmt:
.LFB55:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 8
	ja	.L218
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L220[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L220[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L220:
	.long	.L228-.L220
	.long	.L227-.L220
	.long	.L226-.L220
	.long	.L225-.L220
	.long	.L224-.L220
	.long	.L223-.L220
	.long	.L222-.L220
	.long	.L221-.L220
	.long	.L219-.L220
	.text
.L228:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_decl
	jmp	.L229
.L227:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_expr
	jmp	.L229
.L226:
	lea	rdi, .LC44[rip]
	call	puts@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L230
.L231:
	lea	rdi, .LC45[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	print_stmt
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 56[rax]
	mov	QWORD PTR -8[rbp], rax
.L230:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L231
	mov	edi, 41
	call	putchar@PLT
	jmp	.L229
.L225:
	lea	rdi, .LC46[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	test	rax, rax
	je	.L232
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_expr
.L232:
	mov	edi, 41
	call	putchar@PLT
	jmp	.L229
.L224:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC47[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L229
.L223:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC48[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L229
.L222:
	lea	rdi, .LC49[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	print_expr
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 40[rax]
	test	rax, rax
	je	.L233
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	print_stmt
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 48[rax]
	test	rax, rax
	je	.L234
	lea	rdi, .LC50[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	rdi, rax
	call	print_stmt
.L234:
	mov	edi, 41
	call	putchar@PLT
	jmp	.L229
.L233:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC51[rip]
	mov	eax, 0
	call	printf@PLT
	jmp	.L229
.L221:
	lea	rdi, .LC52[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 32
	call	putchar@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	print_stmt
	mov	edi, 41
	call	putchar@PLT
	jmp	.L229
.L219:
	lea	rdi, .LC53[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 32
	call	putchar@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	print_expr
	mov	edi, 32
	call	putchar@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	print_expr
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	print_stmt
	mov	edi, 41
	call	putchar@PLT
	jmp	.L229
.L218:
	lea	rdi, .LC54[rip]
	mov	eax, 0
	call	fatal
	nop
.L229:
	mov	edi, 10
	call	putchar@PLT
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE55:
	.size	print_stmt, .-print_stmt
	.globl	make_glob_decl
	.type	make_glob_decl, @function
make_glob_decl:
.LFB56:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	QWORD PTR -8[rbp], 0
	mov	edi, 40
	call	malloc@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L237
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -20[rbp]
	mov	DWORD PTR [rax], edx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 8[rax], 0
.L237:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE56:
	.size	make_glob_decl, .-make_glob_decl
	.globl	make_glob_decl_var
	.type	make_glob_decl_var, @function
make_glob_decl_var:
.LFB57:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	edi, 0
	call	make_glob_decl
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L240
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 24[rax], rdx
.L240:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE57:
	.size	make_glob_decl_var, .-make_glob_decl_var
	.globl	make_glob_decl_func
	.type	make_glob_decl_func, @function
make_glob_decl_func:
.LFB58:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	QWORD PTR -40[rbp], rdx
	mov	edi, 1
	call	make_glob_decl
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L243
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 16[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 24[rax], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 32[rax], rdx
.L243:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE58:
	.size	make_glob_decl_func, .-make_glob_decl_func
	.section	.rodata
.LC55:
	.string	"(func %s "
.LC56:
	.string	")"
	.align 8
.LC57:
	.string	"Invalid global declaration to print"
	.text
	.globl	print_glob_decl
	.type	print_glob_decl, @function
print_glob_decl:
.LFB59:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR [rax]
	test	eax, eax
	je	.L246
	cmp	eax, 1
	je	.L247
	jmp	.L251
.L246:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rax
	lea	rdi, .LC43[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	print_type
	mov	edi, 41
	call	putchar@PLT
	jmp	.L249
.L247:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rax
	lea	rdi, .LC55[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	print_type
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 32[rax]
	test	rax, rax
	je	.L250
	mov	edi, 10
	call	putchar@PLT
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	print_stmt
.L250:
	lea	rdi, .LC56[rip]
	call	puts@PLT
	jmp	.L249
.L251:
	lea	rdi, .LC57[rip]
	mov	eax, 0
	call	fatal
	nop
.L249:
	mov	edi, 10
	call	putchar@PLT
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE59:
	.size	print_glob_decl, .-print_glob_decl
	.globl	print_unit
	.type	print_unit, @function
print_unit:
.LFB60:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L253
.L254:
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	print_glob_decl
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -8[rbp], rax
.L253:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L254
	nop
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE60:
	.size	print_unit, .-print_unit
	.globl	source
	.bss
	.align 8
	.type	source, @object
	.size	source, 8
source:
	.zero	8
	.globl	source_line
	.align 4
	.type	source_line, @object
	.size	source_line, 4
source_line:
	.zero	4
	.globl	func_var_offset
	.align 4
	.type	func_var_offset, @object
	.size	func_var_offset, 4
func_var_offset:
	.zero	4
	.globl	kword_void
	.align 8
	.type	kword_void, @object
	.size	kword_void, 8
kword_void:
	.zero	8
	.globl	kword_char
	.align 8
	.type	kword_char, @object
	.size	kword_char, 8
kword_char:
	.zero	8
	.globl	kword_int
	.align 8
	.type	kword_int, @object
	.size	kword_int, 8
kword_int:
	.zero	8
	.globl	kword_struct
	.align 8
	.type	kword_struct, @object
	.size	kword_struct, 8
kword_struct:
	.zero	8
	.globl	kword_return
	.align 8
	.type	kword_return, @object
	.size	kword_return, 8
kword_return:
	.zero	8
	.globl	kword_goto
	.align 8
	.type	kword_goto, @object
	.size	kword_goto, 8
kword_goto:
	.zero	8
	.globl	kword_if
	.align 8
	.type	kword_if, @object
	.size	kword_if, 8
kword_if:
	.zero	8
	.globl	kword_else
	.align 8
	.type	kword_else, @object
	.size	kword_else, 8
kword_else:
	.zero	8
	.globl	kword_while
	.align 8
	.type	kword_while, @object
	.size	kword_while, 8
kword_while:
	.zero	8
	.globl	kword_for
	.align 8
	.type	kword_for, @object
	.size	kword_for, 8
kword_for:
	.zero	8
	.section	.rodata
.LC58:
	.string	"[!] SYNTAX ERROR: Line %d: "
	.text
	.globl	syntax_error
	.type	syntax_error, @function
syntax_error:
.LFB61:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 224
	mov	QWORD PTR -216[rbp], rdi
	mov	QWORD PTR -168[rbp], rsi
	mov	QWORD PTR -160[rbp], rdx
	mov	QWORD PTR -152[rbp], rcx
	mov	QWORD PTR -144[rbp], r8
	mov	QWORD PTR -136[rbp], r9
	test	al, al
	je	.L256
	movaps	XMMWORD PTR -128[rbp], xmm0
	movaps	XMMWORD PTR -112[rbp], xmm1
	movaps	XMMWORD PTR -96[rbp], xmm2
	movaps	XMMWORD PTR -80[rbp], xmm3
	movaps	XMMWORD PTR -64[rbp], xmm4
	movaps	XMMWORD PTR -48[rbp], xmm5
	movaps	XMMWORD PTR -32[rbp], xmm6
	movaps	XMMWORD PTR -16[rbp], xmm7
.L256:
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -184[rbp], rax
	xor	eax, eax
	mov	eax, DWORD PTR source_line[rip]
	mov	esi, eax
	lea	rdi, .LC58[rip]
	mov	eax, 0
	call	printf@PLT
	mov	DWORD PTR -208[rbp], 8
	mov	DWORD PTR -204[rbp], 48
	lea	rax, 16[rbp]
	mov	QWORD PTR -200[rbp], rax
	lea	rax, -176[rbp]
	mov	QWORD PTR -192[rbp], rax
	lea	rdx, -208[rbp]
	mov	rax, QWORD PTR -216[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	vprintf@PLT
	mov	edi, 10
	call	putchar@PLT
	nop
	mov	rax, QWORD PTR -184[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L257
	call	__stack_chk_fail@PLT
.L257:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE61:
	.size	syntax_error, .-syntax_error
	.globl	syntax_fatal
	.type	syntax_fatal, @function
syntax_fatal:
.LFB62:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 224
	mov	QWORD PTR -216[rbp], rdi
	mov	QWORD PTR -168[rbp], rsi
	mov	QWORD PTR -160[rbp], rdx
	mov	QWORD PTR -152[rbp], rcx
	mov	QWORD PTR -144[rbp], r8
	mov	QWORD PTR -136[rbp], r9
	test	al, al
	je	.L259
	movaps	XMMWORD PTR -128[rbp], xmm0
	movaps	XMMWORD PTR -112[rbp], xmm1
	movaps	XMMWORD PTR -96[rbp], xmm2
	movaps	XMMWORD PTR -80[rbp], xmm3
	movaps	XMMWORD PTR -64[rbp], xmm4
	movaps	XMMWORD PTR -48[rbp], xmm5
	movaps	XMMWORD PTR -32[rbp], xmm6
	movaps	XMMWORD PTR -16[rbp], xmm7
.L259:
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -184[rbp], rax
	xor	eax, eax
	mov	eax, DWORD PTR source_line[rip]
	mov	esi, eax
	lea	rdi, .LC58[rip]
	mov	eax, 0
	call	printf@PLT
	mov	DWORD PTR -208[rbp], 8
	mov	DWORD PTR -204[rbp], 48
	lea	rax, 16[rbp]
	mov	QWORD PTR -200[rbp], rax
	lea	rax, -176[rbp]
	mov	QWORD PTR -192[rbp], rax
	lea	rdx, -208[rbp]
	mov	rax, QWORD PTR -216[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	vprintf@PLT
	mov	edi, 10
	call	putchar@PLT
	mov	edi, 1
	call	exit@PLT
	.cfi_endproc
.LFE62:
	.size	syntax_fatal, .-syntax_fatal
	.section	.rodata
.LC59:
	.string	"struct"
.LC60:
	.string	"return"
.LC61:
	.string	"goto"
.LC62:
	.string	"if"
.LC63:
	.string	"else"
.LC64:
	.string	"while"
.LC65:
	.string	"for"
	.text
	.globl	parser_init
	.type	parser_init, @function
parser_init:
.LFB63:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR source[rip], rax
	mov	DWORD PTR source_line[rip], 1
	lea	rdi, .LC34[rip]
	call	str_intern
	mov	QWORD PTR kword_void[rip], rax
	lea	rdi, .LC35[rip]
	call	str_intern
	mov	QWORD PTR kword_char[rip], rax
	lea	rdi, .LC36[rip]
	call	str_intern
	mov	QWORD PTR kword_int[rip], rax
	lea	rdi, .LC59[rip]
	call	str_intern
	mov	QWORD PTR kword_struct[rip], rax
	lea	rdi, .LC60[rip]
	call	str_intern
	mov	QWORD PTR kword_return[rip], rax
	lea	rdi, .LC61[rip]
	call	str_intern
	mov	QWORD PTR kword_goto[rip], rax
	lea	rdi, .LC62[rip]
	call	str_intern
	mov	QWORD PTR kword_if[rip], rax
	lea	rdi, .LC63[rip]
	call	str_intern
	mov	QWORD PTR kword_else[rip], rax
	lea	rdi, .LC64[rip]
	call	str_intern
	mov	QWORD PTR kword_while[rip], rax
	lea	rdi, .LC65[rip]
	call	str_intern
	mov	QWORD PTR kword_for[rip], rax
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE63:
	.size	parser_init, .-parser_init
	.globl	putback
	.bss
	.align 16
	.type	putback, @object
	.size	putback, 16
putback:
	.zero	16
	.text
	.globl	tok_putback
	.type	tok_putback, @function
tok_putback:
.LFB64:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	rax, rdi
	mov	rcx, rsi
	mov	rdx, rcx
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	rax, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR -8[rbp]
	mov	QWORD PTR putback[rip], rax
	mov	QWORD PTR putback[rip+8], rdx
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE64:
	.size	tok_putback, .-tok_putback
	.section	.rodata
.LC66:
	.string	"buffsize < MAX_ID_LEN"
.LC67:
	.string	"Invalid token"
	.text
	.globl	_tok_next
	.type	_tok_next, @function
_tok_next:
.LFB65:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 96
	mov	DWORD PTR -84[rbp], edi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	rax, QWORD PTR source[rip]
	mov	QWORD PTR -72[rbp], rax
	mov	eax, DWORD PTR source_line[rip]
	mov	DWORD PTR -80[rbp], eax
	mov	eax, DWORD PTR putback[rip]
	test	eax, eax
	je	.L264
	mov	rax, QWORD PTR putback[rip]
	mov	rdx, QWORD PTR putback[rip+8]
	mov	QWORD PTR -64[rbp], rax
	mov	QWORD PTR -56[rbp], rdx
	cmp	DWORD PTR -84[rbp], 0
	je	.L265
	mov	DWORD PTR putback[rip], 0
.L265:
	mov	rax, QWORD PTR -64[rbp]
	mov	rdx, QWORD PTR -56[rbp]
	jmp	.L316
.L264:
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	test	al, al
	jne	.L269
	mov	DWORD PTR -64[rbp], 0
	jmp	.L268
.L271:
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 10
	jne	.L270
	add	DWORD PTR -80[rbp], 1
.L270:
	add	QWORD PTR -72[rbp], 1
.L269:
	call	__ctype_b_loc@PLT
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	movsx	rax, al
	add	rax, rax
	add	rax, rdx
	movzx	eax, WORD PTR [rax]
	movzx	eax, ax
	and	eax, 8192
	test	eax, eax
	jne	.L271
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	movsx	eax, al
	sub	eax, 37
	cmp	eax, 88
	ja	.L272
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L274[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L274[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L274:
	.long	.L295-.L274
	.long	.L294-.L274
	.long	.L272-.L274
	.long	.L293-.L274
	.long	.L292-.L274
	.long	.L291-.L274
	.long	.L290-.L274
	.long	.L289-.L274
	.long	.L288-.L274
	.long	.L287-.L274
	.long	.L286-.L274
	.long	.L285-.L274
	.long	.L285-.L274
	.long	.L285-.L274
	.long	.L285-.L274
	.long	.L285-.L274
	.long	.L285-.L274
	.long	.L285-.L274
	.long	.L285-.L274
	.long	.L285-.L274
	.long	.L285-.L274
	.long	.L284-.L274
	.long	.L283-.L274
	.long	.L282-.L274
	.long	.L281-.L274
	.long	.L280-.L274
	.long	.L279-.L274
	.long	.L272-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L278-.L274
	.long	.L272-.L274
	.long	.L277-.L274
	.long	.L272-.L274
	.long	.L276-.L274
	.long	.L272-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L276-.L274
	.long	.L275-.L274
	.long	.L272-.L274
	.long	.L273-.L274
	.text
.L276:
	mov	DWORD PTR -76[rbp], 0
	mov	DWORD PTR -64[rbp], 1
	jmp	.L296
.L297:
	mov	eax, DWORD PTR -76[rbp]
	lea	edx, 1[rax]
	mov	DWORD PTR -76[rbp], edx
	mov	rdx, QWORD PTR -72[rbp]
	movzx	edx, BYTE PTR [rdx]
	cdqe
	mov	BYTE PTR -48[rbp+rax], dl
	add	QWORD PTR -72[rbp], 1
	cmp	DWORD PTR -76[rbp], 32
	jle	.L296
	lea	rcx, __PRETTY_FUNCTION__.14[rip]
	mov	edx, 1666
	lea	rsi, .LC3[rip]
	lea	rdi, .LC66[rip]
	call	__assert_fail@PLT
.L296:
	call	__ctype_b_loc@PLT
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	movsx	rax, al
	add	rax, rax
	add	rax, rdx
	movzx	eax, WORD PTR [rax]
	movzx	eax, ax
	and	eax, 8
	test	eax, eax
	jne	.L297
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 95
	je	.L297
	mov	eax, DWORD PTR -76[rbp]
	cdqe
	mov	BYTE PTR -48[rbp+rax], 0
	lea	rax, -48[rbp]
	mov	rdi, rax
	call	str_intern
	mov	QWORD PTR -56[rbp], rax
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_void[rip]
	cmp	rdx, rax
	jne	.L298
	mov	DWORD PTR -64[rbp], 29
	jmp	.L318
.L298:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_char[rip]
	cmp	rdx, rax
	jne	.L300
	mov	DWORD PTR -64[rbp], 30
	jmp	.L318
.L300:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_int[rip]
	cmp	rdx, rax
	jne	.L301
	mov	DWORD PTR -64[rbp], 31
	jmp	.L318
.L301:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_struct[rip]
	cmp	rdx, rax
	jne	.L302
	mov	DWORD PTR -64[rbp], 32
	jmp	.L318
.L302:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_return[rip]
	cmp	rdx, rax
	jne	.L303
	mov	DWORD PTR -64[rbp], 33
	jmp	.L318
.L303:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_goto[rip]
	cmp	rdx, rax
	jne	.L304
	mov	DWORD PTR -64[rbp], 34
	jmp	.L318
.L304:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_if[rip]
	cmp	rdx, rax
	jne	.L305
	mov	DWORD PTR -64[rbp], 35
	jmp	.L318
.L305:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_else[rip]
	cmp	rdx, rax
	jne	.L306
	mov	DWORD PTR -64[rbp], 36
	jmp	.L318
.L306:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_while[rip]
	cmp	rdx, rax
	jne	.L307
	mov	DWORD PTR -64[rbp], 37
	jmp	.L318
.L307:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR kword_for[rip]
	cmp	rdx, rax
	jne	.L318
	mov	DWORD PTR -64[rbp], 38
	jmp	.L318
.L285:
	mov	DWORD PTR -64[rbp], 2
	mov	DWORD PTR -60[rbp], 0
	jmp	.L308
.L309:
	mov	edx, DWORD PTR -60[rbp]
	mov	eax, edx
	sal	eax, 2
	add	eax, edx
	add	eax, eax
	mov	edx, eax
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	movsx	eax, al
	sub	eax, 48
	add	eax, edx
	mov	DWORD PTR -60[rbp], eax
	add	QWORD PTR -72[rbp], 1
.L308:
	call	__ctype_b_loc@PLT
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	movsx	rax, al
	add	rax, rax
	add	rax, rdx
	movzx	eax, WORD PTR [rax]
	movzx	eax, ax
	and	eax, 2048
	test	eax, eax
	jne	.L309
	jmp	.L268
.L293:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 3
	jmp	.L268
.L292:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 4
	jmp	.L268
.L278:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 5
	jmp	.L268
.L277:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 6
	jmp	.L268
.L275:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 7
	jmp	.L268
.L273:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 8
	jmp	.L268
.L283:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 9
	jmp	.L268
.L284:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 10
	jmp	.L268
.L289:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 11
	jmp	.L268
.L287:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 12
	jmp	.L268
.L279:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 13
	jmp	.L268
.L294:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 14
	jmp	.L268
.L291:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 18
	jmp	.L268
.L286:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 19
	jmp	.L268
.L295:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 20
	jmp	.L268
.L290:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 21
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 43
	jne	.L319
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 16
	jmp	.L319
.L288:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 22
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 45
	jne	.L311
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 17
	jmp	.L320
.L311:
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 62
	jne	.L320
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 15
	jmp	.L320
.L282:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 23
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 61
	jne	.L321
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 24
	jmp	.L321
.L280:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 25
	mov	rax, QWORD PTR -72[rbp]
	movzx	eax, BYTE PTR [rax]
	cmp	al, 61
	jne	.L322
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 26
	jmp	.L322
.L281:
	add	QWORD PTR -72[rbp], 1
	mov	DWORD PTR -64[rbp], 28
	jmp	.L268
.L272:
	lea	rdi, .LC67[rip]
	mov	eax, 0
	call	syntax_fatal
	jmp	.L268
.L318:
	nop
	jmp	.L268
.L319:
	nop
	jmp	.L268
.L320:
	nop
	jmp	.L268
.L321:
	nop
	jmp	.L268
.L322:
	nop
.L268:
	cmp	DWORD PTR -84[rbp], 0
	je	.L315
	mov	rax, QWORD PTR -72[rbp]
	mov	QWORD PTR source[rip], rax
	mov	eax, DWORD PTR -80[rbp]
	mov	DWORD PTR source_line[rip], eax
.L315:
	mov	rax, QWORD PTR -64[rbp]
	mov	rdx, QWORD PTR -56[rbp]
.L316:
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L317
	call	__stack_chk_fail@PLT
.L317:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE65:
	.size	_tok_next, .-_tok_next
	.globl	tok_peek
	.type	tok_peek, @function
tok_peek:
.LFB66:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	edi, 0
	call	_tok_next
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE66:
	.size	tok_peek, .-tok_peek
	.globl	tok_next
	.type	tok_next, @function
tok_next:
.LFB67:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	edi, 1
	call	_tok_next
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE67:
	.size	tok_next, .-tok_next
	.section	.rodata
.LC68:
	.string	"Expected token %d, found %d\n"
.LC69:
	.string	"tok.kind == tok_kind"
	.text
	.globl	tok_expect
	.type	tok_expect, @function
tok_expect:
.LFB68:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	eax, 0
	call	tok_next
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	DWORD PTR -20[rbp], eax
	je	.L328
	mov	edx, DWORD PTR -16[rbp]
	mov	eax, DWORD PTR -20[rbp]
	mov	esi, eax
	lea	rdi, .LC68[rip]
	mov	eax, 0
	call	syntax_fatal
.L328:
	mov	eax, DWORD PTR -16[rbp]
	cmp	DWORD PTR -20[rbp], eax
	je	.L329
	lea	rcx, __PRETTY_FUNCTION__.13[rip]
	mov	edx, 1804
	lea	rsi, .LC3[rip]
	lea	rdi, .LC69[rip]
	call	__assert_fail@PLT
.L329:
	mov	rax, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE68:
	.size	tok_expect, .-tok_expect
	.globl	tok_is_type
	.type	tok_is_type, @function
tok_is_type:
.LFB69:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	rax, rdi
	mov	rcx, rsi
	mov	rdx, rcx
	mov	QWORD PTR -32[rbp], rax
	mov	QWORD PTR -24[rbp], rdx
	mov	DWORD PTR -4[rbp], 0
	mov	eax, DWORD PTR -32[rbp]
	sub	eax, 29
	cmp	eax, 2
	ja	.L332
	mov	DWORD PTR -4[rbp], 1
	jmp	.L333
.L332:
	mov	DWORD PTR -4[rbp], 0
	nop
.L333:
	mov	eax, DWORD PTR -4[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE69:
	.size	tok_is_type, .-tok_is_type
	.globl	op_precedence_table
	.data
	.align 32
	.type	op_precedence_table, @object
	.size	op_precedence_table, 36
op_precedence_table:
	.long	3
	.long	3
	.long	3
	.long	4
	.long	4
	.long	6
	.long	6
	.long	6
	.long	6
	.section	.rodata
.LC70:
	.string	"Invalid symbol '%s'"
	.text
	.globl	expr_is_const
	.type	expr_is_const, @function
expr_is_const:
.LFB70:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	DWORD PTR -12[rbp], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 24
	jle	.L336
	mov	DWORD PTR -12[rbp], 0
	jmp	.L337
.L336:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 1
	jne	.L338
	mov	DWORD PTR -12[rbp], 1
	jmp	.L337
.L338:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	jne	.L339
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	sym_get
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	jne	.L340
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC70[rip]
	mov	eax, 0
	call	fatal
.L340:
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 32[rax]
	mov	DWORD PTR -12[rbp], eax
	jmp	.L337
.L339:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jle	.L341
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 13
	jg	.L341
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 9
	jne	.L342
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	expr_is_const
	mov	DWORD PTR -12[rbp], eax
	jmp	.L343
.L342:
	mov	DWORD PTR -12[rbp], 0
	nop
.L343:
	jmp	.L337
.L341:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 13
	jle	.L344
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 23
	jg	.L344
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	sub	eax, 14
	cmp	eax, 8
	ja	.L345
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	expr_is_const
	mov	DWORD PTR -12[rbp], eax
	cmp	DWORD PTR -12[rbp], 0
	je	.L346
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	expr_is_const
	test	eax, eax
	je	.L346
	mov	eax, 1
	jmp	.L347
.L346:
	mov	eax, 0
.L347:
	mov	DWORD PTR -12[rbp], eax
	jmp	.L348
.L345:
	mov	DWORD PTR -12[rbp], 0
	nop
.L348:
	jmp	.L337
.L344:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 24
	jne	.L337
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	expr_is_const
	mov	DWORD PTR -12[rbp], eax
	cmp	DWORD PTR -12[rbp], 0
	je	.L349
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	expr_is_const
	test	eax, eax
	je	.L349
	mov	eax, 1
	jmp	.L350
.L349:
	mov	eax, 0
.L350:
	mov	DWORD PTR -12[rbp], eax
	cmp	DWORD PTR -12[rbp], 0
	je	.L351
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	expr_is_const
	test	eax, eax
	je	.L351
	mov	eax, 1
	jmp	.L352
.L351:
	mov	eax, 0
.L352:
	mov	DWORD PTR -12[rbp], eax
.L337:
	mov	eax, DWORD PTR -12[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE70:
	.size	expr_is_const, .-expr_is_const
	.section	.rodata
.LC71:
	.string	"sym->is_const"
	.text
	.globl	eval_expr
	.type	eval_expr, @function
eval_expr:
.LFB71:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	mov	DWORD PTR -24[rbp], 0
	mov	DWORD PTR -20[rbp], 0
	mov	DWORD PTR -16[rbp], 0
	mov	DWORD PTR -12[rbp], 0
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 24
	jle	.L355
	lea	rcx, __PRETTY_FUNCTION__.12[rip]
	mov	edx, 1954
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L355:
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 1
	jne	.L356
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR 4[rax]
	mov	DWORD PTR -24[rbp], eax
	jmp	.L357
.L356:
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	jne	.L358
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	sym_get
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	jne	.L359
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC70[rip]
	mov	eax, 0
	call	fatal
.L359:
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 32[rax]
	test	eax, eax
	jne	.L360
	lea	rcx, __PRETTY_FUNCTION__.12[rip]
	mov	edx, 1968
	lea	rsi, .LC3[rip]
	lea	rdi, .LC71[rip]
	call	__assert_fail@PLT
.L360:
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 36[rax]
	mov	DWORD PTR -24[rbp], eax
	jmp	.L357
.L358:
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jle	.L361
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 13
	jg	.L361
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 9
	jne	.L362
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	eval_expr
	neg	eax
	mov	DWORD PTR -24[rbp], eax
	nop
	jmp	.L357
.L362:
	lea	rcx, __PRETTY_FUNCTION__.12[rip]
	mov	edx, 1982
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L361:
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 13
	jle	.L364
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 23
	jg	.L364
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	eval_expr
	mov	DWORD PTR -20[rbp], eax
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	eval_expr
	mov	DWORD PTR -16[rbp], eax
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	sub	eax, 14
	cmp	eax, 8
	ja	.L380
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L367[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L367[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L367:
	.long	.L375-.L367
	.long	.L374-.L367
	.long	.L373-.L367
	.long	.L372-.L367
	.long	.L371-.L367
	.long	.L370-.L367
	.long	.L369-.L367
	.long	.L368-.L367
	.long	.L366-.L367
	.text
.L375:
	mov	eax, DWORD PTR -20[rbp]
	imul	eax, DWORD PTR -16[rbp]
	mov	DWORD PTR -24[rbp], eax
	jmp	.L376
.L374:
	mov	eax, DWORD PTR -20[rbp]
	cdq
	idiv	DWORD PTR -16[rbp]
	mov	DWORD PTR -24[rbp], eax
	jmp	.L376
.L373:
	mov	eax, DWORD PTR -20[rbp]
	cdq
	idiv	DWORD PTR -16[rbp]
	mov	DWORD PTR -24[rbp], edx
	jmp	.L376
.L372:
	mov	edx, DWORD PTR -20[rbp]
	mov	eax, DWORD PTR -16[rbp]
	add	eax, edx
	mov	DWORD PTR -24[rbp], eax
	jmp	.L376
.L371:
	mov	eax, DWORD PTR -20[rbp]
	sub	eax, DWORD PTR -16[rbp]
	mov	DWORD PTR -24[rbp], eax
	jmp	.L376
.L370:
	mov	eax, DWORD PTR -20[rbp]
	cmp	eax, DWORD PTR -16[rbp]
	setl	al
	movzx	eax, al
	mov	DWORD PTR -24[rbp], eax
	jmp	.L376
.L369:
	mov	eax, DWORD PTR -20[rbp]
	cmp	eax, DWORD PTR -16[rbp]
	setle	al
	movzx	eax, al
	mov	DWORD PTR -24[rbp], eax
	jmp	.L376
.L368:
	mov	eax, DWORD PTR -20[rbp]
	cmp	eax, DWORD PTR -16[rbp]
	setg	al
	movzx	eax, al
	mov	DWORD PTR -24[rbp], eax
	jmp	.L376
.L366:
	mov	eax, DWORD PTR -20[rbp]
	cmp	eax, DWORD PTR -16[rbp]
	setge	al
	movzx	eax, al
	mov	DWORD PTR -24[rbp], eax
	jmp	.L376
.L380:
	lea	rcx, __PRETTY_FUNCTION__.12[rip]
	mov	edx, 2005
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L376:
	jmp	.L357
.L364:
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 24
	jne	.L377
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	eval_expr
	mov	DWORD PTR -20[rbp], eax
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	eval_expr
	mov	DWORD PTR -12[rbp], eax
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	eval_expr
	mov	DWORD PTR -16[rbp], eax
	cmp	DWORD PTR -20[rbp], 0
	je	.L378
	mov	eax, DWORD PTR -12[rbp]
	mov	DWORD PTR -24[rbp], eax
	jmp	.L357
.L378:
	mov	eax, DWORD PTR -16[rbp]
	mov	DWORD PTR -24[rbp], eax
	jmp	.L357
.L377:
	lea	rcx, __PRETTY_FUNCTION__.12[rip]
	mov	edx, 2025
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L357:
	mov	eax, DWORD PTR -24[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE71:
	.size	eval_expr, .-eval_expr
	.section	.rodata
.LC72:
	.string	"Invalid base expression"
	.text
	.globl	parse_expr_base
	.type	parse_expr_base, @function
parse_expr_base:
.LFB72:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], 0
	mov	eax, 0
	call	tok_next
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 3
	je	.L382
	cmp	eax, 3
	jg	.L383
	cmp	eax, 1
	je	.L384
	cmp	eax, 2
	jne	.L383
	mov	eax, DWORD PTR -12[rbp]
	mov	edi, eax
	call	make_expr_intlit
	mov	QWORD PTR -24[rbp], rax
	jmp	.L385
.L384:
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	QWORD PTR -24[rbp], rax
	jmp	.L385
.L382:
	mov	eax, 0
	call	parse_expr
	mov	QWORD PTR -24[rbp], rax
	mov	edi, 4
	call	tok_expect
	jmp	.L385
.L383:
	lea	rdi, .LC72[rip]
	mov	eax, 0
	call	syntax_fatal
	nop
.L385:
	mov	rax, QWORD PTR -24[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE72:
	.size	parse_expr_base, .-parse_expr_base
	.globl	reverse_args_list
	.type	reverse_args_list, @function
reverse_args_list:
.LFB73:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -8[rbp], 0
	cmp	QWORD PTR -24[rbp], 0
	je	.L388
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 48[rax]
	test	rax, rax
	jne	.L389
.L388:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L390
.L389:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	rdi, rax
	call	reverse_args_list
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 48[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 48[rax], 0
.L390:
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE73:
	.size	reverse_args_list, .-reverse_args_list
	.globl	parse_expr_first_level
	.type	parse_expr_first_level, @function
parse_expr_first_level:
.LFB74:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], 0
	mov	QWORD PTR -32[rbp], 0
	mov	QWORD PTR -24[rbp], 0
	mov	eax, 0
	call	parse_expr_base
	mov	QWORD PTR -40[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 15
	je	.L393
	cmp	eax, 15
	jg	.L394
	cmp	eax, 12
	je	.L395
	cmp	eax, 12
	jg	.L394
	cmp	eax, 3
	je	.L396
	cmp	eax, 5
	je	.L397
	jmp	.L394
.L396:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 4
	je	.L398
.L402:
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 11
	jne	.L399
	mov	eax, 0
	call	tok_next
.L399:
	cmp	QWORD PTR -24[rbp], 0
	je	.L400
	mov	eax, 0
	call	parse_expr_assign
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 48[rdx], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -24[rbp], rax
	jmp	.L401
.L400:
	mov	eax, 0
	call	parse_expr_assign
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -32[rbp], rax
.L401:
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 11
	je	.L402
.L398:
	mov	edi, 4
	call	tok_expect
	cmp	QWORD PTR -32[rbp], 0
	je	.L403
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	reverse_args_list
	mov	QWORD PTR -32[rbp], rax
.L403:
	mov	rdx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -40[rbp]
	mov	rsi, rax
	mov	edi, 3
	call	make_expr_binary
	mov	QWORD PTR -40[rbp], rax
	jmp	.L394
.L397:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr
	mov	rdx, rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rsi, rax
	mov	edi, 4
	call	make_expr_binary
	mov	QWORD PTR -40[rbp], rax
	mov	edi, 6
	call	tok_expect
	jmp	.L394
.L395:
	mov	eax, 0
	call	tok_next
	mov	edi, 1
	call	tok_expect
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	rdx, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR -40[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	make_expr_member_access
	mov	QWORD PTR -40[rbp], rax
	jmp	.L394
.L393:
	mov	eax, 0
	call	tok_next
	mov	edi, 1
	call	tok_expect
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	rdx, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR -40[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	make_expr_member_access_ptr
	mov	QWORD PTR -40[rbp], rax
	nop
.L394:
	mov	rax, QWORD PTR -40[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE74:
	.size	parse_expr_first_level, .-parse_expr_first_level
	.globl	parse_expr_unary
	.type	parse_expr_unary, @function
parse_expr_unary:
.LFB75:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -32[rbp], 0
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	sub	eax, 3
	cmp	eax, 19
	ja	.L406
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L408[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L408[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L408:
	.long	.L414-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L413-.L408
	.long	.L406-.L408
	.long	.L412-.L408
	.long	.L411-.L408
	.long	.L410-.L408
	.long	.L406-.L408
	.long	.L406-.L408
	.long	.L409-.L408
	.long	.L407-.L408
	.text
.L412:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr_unary
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 7
	call	make_expr_unary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L415
.L411:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr_unary
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 8
	call	make_expr_unary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L415
.L409:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr_unary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L415
.L407:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr_unary
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 9
	call	make_expr_unary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L415
.L414:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	rdx, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rdx
	mov	rsi, rax
	call	tok_is_type
	test	eax, eax
	je	.L416
	mov	edi, 0
	call	parse_type
	mov	QWORD PTR -24[rbp], rax
	mov	edi, 4
	call	tok_expect
	mov	eax, 0
	call	parse_expr_unary
	mov	rdx, rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rax
	mov	rdi, rdx
	call	make_expr_cast
	mov	QWORD PTR -32[rbp], rax
	jmp	.L415
.L416:
	mov	eax, 0
	call	parse_expr
	mov	QWORD PTR -32[rbp], rax
	mov	edi, 4
	call	tok_expect
	jmp	.L415
.L410:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr_unary
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 11
	call	make_expr_unary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L415
.L413:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr_unary
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 12
	call	make_expr_unary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L415
.L406:
	mov	eax, 0
	call	parse_expr_first_level
	mov	QWORD PTR -32[rbp], rax
	nop
.L415:
	mov	rax, QWORD PTR -32[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE75:
	.size	parse_expr_unary, .-parse_expr_unary
	.section	.rodata
.LC73:
	.string	"Invalid binary expression"
	.text
	.globl	parse_expr_binary
	.type	parse_expr_binary, @function
parse_expr_binary:
.LFB76:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	DWORD PTR -52[rbp], edi
	mov	QWORD PTR -32[rbp], 0
	mov	QWORD PTR -24[rbp], 0
	mov	eax, 0
	call	parse_expr_unary
	mov	QWORD PTR -32[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	jmp	.L420
.L436:
	mov	eax, DWORD PTR -16[rbp]
	sub	eax, 18
	cdqe
	lea	rdx, 0[0+rax*4]
	lea	rax, op_precedence_table[rip]
	mov	eax, DWORD PTR [rdx+rax]
	mov	DWORD PTR -36[rbp], eax
	mov	eax, DWORD PTR -36[rbp]
	cmp	eax, DWORD PTR -52[rbp]
	jge	.L438
	mov	eax, 0
	call	tok_next
	mov	eax, DWORD PTR -36[rbp]
	mov	edi, eax
	call	parse_expr_binary
	mov	QWORD PTR -24[rbp], rax
	mov	eax, DWORD PTR -16[rbp]
	sub	eax, 18
	cmp	eax, 8
	ja	.L424
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L426[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L426[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L426:
	.long	.L434-.L426
	.long	.L433-.L426
	.long	.L432-.L426
	.long	.L431-.L426
	.long	.L430-.L426
	.long	.L429-.L426
	.long	.L428-.L426
	.long	.L427-.L426
	.long	.L425-.L426
	.text
.L434:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 14
	call	make_expr_binary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L435
.L433:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 15
	call	make_expr_binary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L435
.L432:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 16
	call	make_expr_binary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L435
.L431:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L435
.L430:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 18
	call	make_expr_binary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L435
.L429:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 19
	call	make_expr_binary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L435
.L428:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 20
	call	make_expr_binary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L435
.L427:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 21
	call	make_expr_binary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L435
.L425:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rax
	mov	edi, 22
	call	make_expr_binary
	mov	QWORD PTR -32[rbp], rax
	jmp	.L435
.L424:
	lea	rdi, .LC73[rip]
	mov	eax, 0
	call	syntax_fatal
	nop
.L435:
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
.L420:
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 17
	jle	.L423
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 26
	jle	.L436
	jmp	.L423
.L438:
	nop
.L423:
	mov	rax, QWORD PTR -32[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE76:
	.size	parse_expr_binary, .-parse_expr_binary
	.globl	parse_expr_ternary
	.type	parse_expr_ternary, @function
parse_expr_ternary:
.LFB77:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	edi, 999
	call	parse_expr_binary
	mov	QWORD PTR -40[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 13
	jne	.L440
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr
	mov	QWORD PTR -32[rbp], rax
	mov	edi, 10
	call	tok_expect
	mov	eax, 0
	call	parse_expr_ternary
	mov	QWORD PTR -24[rbp], rax
	mov	rdx, QWORD PTR -24[rbp]
	mov	rcx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -40[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	make_expr_ternary
	mov	QWORD PTR -40[rbp], rax
.L440:
	mov	rax, QWORD PTR -40[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE77:
	.size	parse_expr_ternary, .-parse_expr_ternary
	.globl	parse_expr_assign
	.type	parse_expr_assign, @function
parse_expr_assign:
.LFB78:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	eax, 0
	call	parse_expr_ternary
	mov	QWORD PTR -24[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 28
	jne	.L443
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr_assign
	mov	rdx, rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	QWORD PTR -24[rbp], rax
.L443:
	mov	rax, QWORD PTR -24[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE78:
	.size	parse_expr_assign, .-parse_expr_assign
	.globl	parse_expr
	.type	parse_expr, @function
parse_expr:
.LFB79:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -32[rbp], 0
	mov	QWORD PTR -24[rbp], 0
	mov	eax, 0
	call	parse_expr_assign
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	QWORD PTR -24[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	jmp	.L446
.L447:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr_assign
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 48[rdx], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -24[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
.L446:
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 11
	je	.L447
	mov	rax, QWORD PTR -32[rbp]
	cmp	rax, QWORD PTR -24[rbp]
	je	.L448
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_compound
	mov	QWORD PTR -32[rbp], rax
.L448:
	mov	rax, QWORD PTR -32[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE79:
	.size	parse_expr, .-parse_expr
	.section	.rodata
.LC74:
	.string	"Invalid struct definition"
	.text
	.globl	parse_struct_def
	.type	parse_struct_def, @function
parse_struct_def:
.LFB80:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	QWORD PTR -48[rbp], 0
	mov	QWORD PTR -40[rbp], 0
	mov	edi, 7
	call	tok_expect
	mov	DWORD PTR -52[rbp], 0
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	jmp	.L451
.L456:
	mov	edi, 0
	call	parse_type
	mov	QWORD PTR -32[rbp], rax
	mov	edi, 1
	call	tok_expect
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR -24[rbp], rax
	cmp	QWORD PTR -40[rbp], 0
	je	.L452
	mov	edx, DWORD PTR -52[rbp]
	mov	rcx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	make_aggr_element
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 24[rdx], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L453
.L452:
	mov	edx, DWORD PTR -52[rbp]
	mov	rcx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	make_aggr_element
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	QWORD PTR -48[rbp], rax
.L453:
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	test	eax, eax
	jle	.L454
	mov	rax, QWORD PTR -32[rbp]
	mov	ecx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	mov	edx, eax
	mov	eax, 4
	sub	eax, edx
	add	eax, ecx
	jmp	.L455
.L454:
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR 4[rax]
.L455:
	add	DWORD PTR -52[rbp], eax
	mov	edi, 9
	call	tok_expect
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
.L451:
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 8
	jne	.L456
	mov	edi, 8
	call	tok_expect
	cmp	QWORD PTR -48[rbp], 0
	jne	.L457
	lea	rdi, .LC74[rip]
	mov	eax, 0
	call	syntax_fatal
.L457:
	mov	rax, QWORD PTR -48[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE80:
	.size	parse_struct_def, .-parse_struct_def
	.globl	parse_base_type
	.type	parse_base_type, @function
parse_base_type:
.LFB81:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], 0
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 32
	je	.L460
	cmp	eax, 32
	jg	.L461
	cmp	eax, 31
	je	.L462
	cmp	eax, 31
	jg	.L461
	cmp	eax, 29
	je	.L463
	cmp	eax, 30
	je	.L464
	jmp	.L461
.L463:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	type_void
	mov	QWORD PTR -40[rbp], rax
	jmp	.L461
.L464:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	type_char
	mov	QWORD PTR -40[rbp], rax
	jmp	.L461
.L462:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	type_int
	mov	QWORD PTR -40[rbp], rax
	jmp	.L461
.L460:
	mov	eax, 0
	call	tok_next
	mov	edi, 1
	call	tok_expect
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR -24[rbp], rax
	mov	QWORD PTR -32[rbp], 0
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 7
	jne	.L465
	mov	eax, 0
	call	parse_struct_def
	mov	QWORD PTR -32[rbp], rax
.L465:
	mov	rdx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	type_struct
	mov	QWORD PTR -40[rbp], rax
	nop
.L461:
	mov	rax, QWORD PTR -40[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE81:
	.size	parse_base_type, .-parse_base_type
	.globl	parse_type
	.type	parse_type, @function
parse_type:
.LFB82:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	mov	QWORD PTR -24[rbp], 0
	cmp	QWORD PTR -40[rbp], 0
	jne	.L468
	mov	eax, 0
	call	parse_base_type
	mov	QWORD PTR -40[rbp], rax
.L468:
	mov	rax, QWORD PTR -40[rbp]
	mov	QWORD PTR -24[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	jmp	.L469
.L470:
	mov	eax, 0
	call	tok_next
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	type_ptr
	mov	QWORD PTR -24[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
.L469:
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 18
	je	.L470
	mov	rax, QWORD PTR -24[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE82:
	.size	parse_type, .-parse_type
	.section	.rodata
	.align 8
.LC75:
	.string	"Invalid type for variable declaration"
	.align 8
.LC76:
	.string	"Invalid constant expression for array length"
	.text
	.globl	parse_decl
	.type	parse_decl, @function
parse_decl:
.LFB83:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	eax, 0
	call	parse_base_type
	mov	QWORD PTR -48[rbp], rax
	cmp	QWORD PTR -48[rbp], 0
	jne	.L473
	lea	rdi, .LC75[rip]
	mov	eax, 0
	call	syntax_fatal
.L473:
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	parse_type
	mov	QWORD PTR -48[rbp], rax
	mov	edi, 1
	call	tok_expect
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR -40[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 5
	jne	.L474
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_expr
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	expr_is_const
	test	eax, eax
	jne	.L475
	lea	rdi, .LC76[rip]
	mov	eax, 0
	call	syntax_fatal
.L475:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	eval_expr
	mov	DWORD PTR -52[rbp], eax
	mov	edx, DWORD PTR -52[rbp]
	mov	rax, QWORD PTR -48[rbp]
	mov	esi, edx
	mov	rdi, rax
	call	type_array
	mov	QWORD PTR -48[rbp], rax
	mov	edi, 6
	call	tok_expect
.L474:
	mov	rdx, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR -48[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	make_decl
	mov	QWORD PTR -24[rbp], rax
	mov	edi, 9
	call	tok_expect
	mov	rax, QWORD PTR -24[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE83:
	.size	parse_decl, .-parse_decl
	.globl	parse_stmt_block
	.type	parse_stmt_block, @function
parse_stmt_block:
.LFB84:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	edi, 7
	call	tok_expect
	mov	edi, 2
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	QWORD PTR -32[rbp], 0
	jmp	.L478
.L481:
	cmp	QWORD PTR -32[rbp], 0
	je	.L479
	mov	eax, 0
	call	parse_stmt
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 56[rdx], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 56[rax]
	mov	QWORD PTR -32[rbp], rax
	jmp	.L480
.L479:
	mov	eax, 0
	call	parse_stmt
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
.L480:
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
.L478:
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 8
	jne	.L481
	mov	edi, 8
	call	tok_expect
	mov	rax, QWORD PTR -24[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE84:
	.size	parse_stmt_block, .-parse_stmt_block
	.globl	parse_stmt
	.type	parse_stmt, @function
parse_stmt:
.LFB85:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 96
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -32[rbp], rax
	mov	QWORD PTR -24[rbp], rdx
	jmp	.L484
.L485:
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -32[rbp], rax
	mov	QWORD PTR -24[rbp], rdx
.L484:
	mov	eax, DWORD PTR -32[rbp]
	cmp	eax, 9
	je	.L485
	mov	rdx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rdx
	mov	rsi, rax
	call	tok_is_type
	test	eax, eax
	je	.L486
	mov	edi, 0
	call	make_stmt
	mov	QWORD PTR -96[rbp], rax
	mov	eax, 0
	call	parse_decl
	mov	rdx, QWORD PTR -96[rbp]
	mov	QWORD PTR 8[rdx], rax
	jmp	.L487
.L486:
	mov	eax, DWORD PTR -32[rbp]
	cmp	eax, 38
	ja	.L488
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L490[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L490[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L490:
	.long	.L488-.L490
	.long	.L496-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L495-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L488-.L490
	.long	.L494-.L490
	.long	.L493-.L490
	.long	.L492-.L490
	.long	.L488-.L490
	.long	.L491-.L490
	.long	.L489-.L490
	.text
.L496:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -40[rbp], rax
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 10
	jne	.L497
	mov	eax, 0
	call	tok_next
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -96[rbp], rax
	mov	rax, QWORD PTR -96[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 8[rax], rdx
	jmp	.L487
.L497:
	mov	rdx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rdx
	mov	rsi, rax
	call	tok_putback
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -96[rbp], rax
	mov	eax, 0
	call	parse_expr
	mov	rdx, QWORD PTR -96[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	edi, 9
	call	tok_expect
	jmp	.L487
.L495:
	mov	eax, 0
	call	parse_stmt_block
	mov	QWORD PTR -96[rbp], rax
	jmp	.L487
.L494:
	mov	eax, 0
	call	tok_next
	mov	edi, 3
	call	make_stmt
	mov	QWORD PTR -96[rbp], rax
	mov	rax, QWORD PTR -96[rbp]
	mov	QWORD PTR 8[rax], 0
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -32[rbp], rax
	mov	QWORD PTR -24[rbp], rdx
	mov	eax, DWORD PTR -32[rbp]
	cmp	eax, 9
	je	.L499
	mov	eax, 0
	call	parse_expr
	mov	rdx, QWORD PTR -96[rbp]
	mov	QWORD PTR 8[rdx], rax
.L499:
	mov	edi, 9
	call	tok_expect
	jmp	.L487
.L493:
	mov	eax, 0
	call	tok_next
	mov	edi, 1
	call	tok_expect
	mov	QWORD PTR -32[rbp], rax
	mov	QWORD PTR -24[rbp], rdx
	mov	edi, 5
	call	make_stmt
	mov	QWORD PTR -96[rbp], rax
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -96[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	edi, 9
	call	tok_expect
	jmp	.L487
.L492:
	mov	eax, 0
	call	tok_next
	mov	edi, 3
	call	tok_expect
	mov	eax, 0
	call	parse_expr
	mov	QWORD PTR -48[rbp], rax
	mov	edi, 4
	call	tok_expect
	mov	eax, 0
	call	parse_stmt
	mov	QWORD PTR -56[rbp], rax
	mov	QWORD PTR -88[rbp], 0
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -32[rbp], rax
	mov	QWORD PTR -24[rbp], rdx
	mov	eax, DWORD PTR -32[rbp]
	cmp	eax, 36
	jne	.L500
	mov	eax, 0
	call	tok_next
	mov	eax, 0
	call	parse_stmt
	mov	QWORD PTR -88[rbp], rax
.L500:
	mov	rdx, QWORD PTR -88[rbp]
	mov	rcx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR -48[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	make_stmt_if
	mov	QWORD PTR -96[rbp], rax
	jmp	.L487
.L491:
	mov	eax, 0
	call	tok_next
	mov	edi, 3
	call	tok_expect
	mov	eax, 0
	call	parse_expr
	mov	QWORD PTR -48[rbp], rax
	mov	edi, 4
	call	tok_expect
	mov	eax, 0
	call	parse_stmt
	mov	QWORD PTR -56[rbp], rax
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR -48[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	make_stmt_while
	mov	QWORD PTR -96[rbp], rax
	jmp	.L487
.L489:
	mov	eax, 0
	call	tok_next
	mov	edi, 3
	call	tok_expect
	mov	eax, 0
	call	parse_expr
	mov	QWORD PTR -80[rbp], rax
	mov	edi, 9
	call	tok_expect
	mov	eax, 0
	call	parse_expr
	mov	QWORD PTR -72[rbp], rax
	mov	edi, 9
	call	tok_expect
	mov	eax, 0
	call	parse_expr
	mov	QWORD PTR -64[rbp], rax
	mov	edi, 4
	call	tok_expect
	mov	eax, 0
	call	parse_stmt
	mov	QWORD PTR -56[rbp], rax
	mov	rcx, QWORD PTR -56[rbp]
	mov	rdx, QWORD PTR -64[rbp]
	mov	rsi, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR -80[rbp]
	mov	rdi, rax
	call	make_stmt_for
	mov	QWORD PTR -96[rbp], rax
	jmp	.L487
.L488:
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -96[rbp], rax
	mov	eax, 0
	call	parse_expr
	mov	rdx, QWORD PTR -96[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	edi, 9
	call	tok_expect
	nop
.L487:
	mov	rax, QWORD PTR -96[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE85:
	.size	parse_stmt, .-parse_stmt
	.globl	parse_func_param
	.type	parse_func_param, @function
parse_func_param:
.LFB86:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	edi, 0
	call	parse_type
	mov	QWORD PTR -40[rbp], rax
	mov	edi, 1
	call	tok_expect
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR -32[rbp], rax
	mov	rdx, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	make_func_param
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE86:
	.size	parse_func_param, .-parse_func_param
	.section	.rodata
	.align 8
.LC77:
	.string	"Invalid type for global declaration"
	.text
	.globl	parse_glob_decl
	.type	parse_glob_decl, @function
parse_glob_decl:
.LFB87:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	QWORD PTR -64[rbp], 0
	mov	eax, 0
	call	parse_base_type
	mov	QWORD PTR -32[rbp], rax
	cmp	QWORD PTR -32[rbp], 0
	jne	.L505
	lea	rdi, .LC77[rip]
	mov	eax, 0
	call	syntax_fatal
.L505:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	parse_type
	mov	QWORD PTR -32[rbp], rax
	mov	edi, 1
	call	tok_expect
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR -24[rbp], rax
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 9
	jne	.L506
	mov	edi, 9
	call	tok_expect
	mov	rdx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	make_glob_decl_var
	mov	QWORD PTR -64[rbp], rax
	jmp	.L507
.L506:
	mov	QWORD PTR -56[rbp], 0
	mov	QWORD PTR -48[rbp], 0
	mov	edi, 3
	call	tok_expect
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	jmp	.L508
.L513:
	cmp	QWORD PTR -48[rbp], 0
	je	.L509
	mov	eax, 0
	call	parse_func_param
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 16[rdx], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -48[rbp], rax
	jmp	.L510
.L509:
	mov	eax, 0
	call	parse_func_param
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	QWORD PTR 16[rax], 0
	mov	rax, QWORD PTR -48[rbp]
	mov	QWORD PTR -56[rbp], rax
.L510:
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 11
	jne	.L517
	mov	eax, 0
	call	tok_next
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
.L508:
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 4
	jne	.L513
	jmp	.L512
.L517:
	nop
.L512:
	mov	edi, 4
	call	tok_expect
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	reverse_func_params_list
	mov	QWORD PTR -56[rbp], rax
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR -32[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	type_func
	mov	QWORD PTR -32[rbp], rax
	mov	QWORD PTR -40[rbp], 0
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	mov	eax, DWORD PTR -16[rbp]
	cmp	eax, 7
	jne	.L514
	mov	eax, 0
	call	parse_stmt_block
	mov	QWORD PTR -40[rbp], rax
	jmp	.L515
.L514:
	mov	edi, 9
	call	tok_expect
.L515:
	mov	rdx, QWORD PTR -40[rbp]
	mov	rcx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	make_glob_decl_func
	mov	QWORD PTR -64[rbp], rax
.L507:
	mov	rax, QWORD PTR -64[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE87:
	.size	parse_glob_decl, .-parse_glob_decl
	.globl	parse_unit
	.type	parse_unit, @function
parse_unit:
.LFB88:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -32[rbp], 0
	mov	QWORD PTR -24[rbp], 0
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
	jmp	.L519
.L523:
	cmp	QWORD PTR -24[rbp], 0
	je	.L520
	mov	eax, 0
	call	parse_glob_decl
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -24[rbp], rax
	jmp	.L521
.L520:
	mov	eax, 0
	call	parse_glob_decl
	mov	QWORD PTR -24[rbp], rax
.L521:
	cmp	QWORD PTR -32[rbp], 0
	jne	.L522
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -32[rbp], rax
.L522:
	mov	eax, 0
	call	tok_peek
	mov	QWORD PTR -16[rbp], rax
	mov	QWORD PTR -8[rbp], rdx
.L519:
	mov	eax, DWORD PTR -16[rbp]
	test	eax, eax
	jne	.L523
	mov	rax, QWORD PTR -32[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE88:
	.size	parse_unit, .-parse_unit
	.section	.rodata
.LC78:
	.string	"[!] SEMANTIC ERROR: "
	.text
	.globl	semantic_error
	.type	semantic_error, @function
semantic_error:
.LFB89:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 224
	mov	QWORD PTR -216[rbp], rdi
	mov	QWORD PTR -168[rbp], rsi
	mov	QWORD PTR -160[rbp], rdx
	mov	QWORD PTR -152[rbp], rcx
	mov	QWORD PTR -144[rbp], r8
	mov	QWORD PTR -136[rbp], r9
	test	al, al
	je	.L526
	movaps	XMMWORD PTR -128[rbp], xmm0
	movaps	XMMWORD PTR -112[rbp], xmm1
	movaps	XMMWORD PTR -96[rbp], xmm2
	movaps	XMMWORD PTR -80[rbp], xmm3
	movaps	XMMWORD PTR -64[rbp], xmm4
	movaps	XMMWORD PTR -48[rbp], xmm5
	movaps	XMMWORD PTR -32[rbp], xmm6
	movaps	XMMWORD PTR -16[rbp], xmm7
.L526:
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -184[rbp], rax
	xor	eax, eax
	lea	rdi, .LC78[rip]
	mov	eax, 0
	call	printf@PLT
	mov	DWORD PTR -208[rbp], 8
	mov	DWORD PTR -204[rbp], 48
	lea	rax, 16[rbp]
	mov	QWORD PTR -200[rbp], rax
	lea	rax, -176[rbp]
	mov	QWORD PTR -192[rbp], rax
	lea	rdx, -208[rbp]
	mov	rax, QWORD PTR -216[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	vprintf@PLT
	mov	edi, 10
	call	putchar@PLT
	nop
	mov	rax, QWORD PTR -184[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L527
	call	__stack_chk_fail@PLT
.L527:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE89:
	.size	semantic_error, .-semantic_error
	.globl	semantic_fatal
	.type	semantic_fatal, @function
semantic_fatal:
.LFB90:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 224
	mov	QWORD PTR -216[rbp], rdi
	mov	QWORD PTR -168[rbp], rsi
	mov	QWORD PTR -160[rbp], rdx
	mov	QWORD PTR -152[rbp], rcx
	mov	QWORD PTR -144[rbp], r8
	mov	QWORD PTR -136[rbp], r9
	test	al, al
	je	.L529
	movaps	XMMWORD PTR -128[rbp], xmm0
	movaps	XMMWORD PTR -112[rbp], xmm1
	movaps	XMMWORD PTR -96[rbp], xmm2
	movaps	XMMWORD PTR -80[rbp], xmm3
	movaps	XMMWORD PTR -64[rbp], xmm4
	movaps	XMMWORD PTR -48[rbp], xmm5
	movaps	XMMWORD PTR -32[rbp], xmm6
	movaps	XMMWORD PTR -16[rbp], xmm7
.L529:
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -184[rbp], rax
	xor	eax, eax
	lea	rdi, .LC78[rip]
	mov	eax, 0
	call	printf@PLT
	mov	DWORD PTR -208[rbp], 8
	mov	DWORD PTR -204[rbp], 48
	lea	rax, 16[rbp]
	mov	QWORD PTR -200[rbp], rax
	lea	rax, -176[rbp]
	mov	QWORD PTR -192[rbp], rax
	lea	rdx, -208[rbp]
	mov	rax, QWORD PTR -216[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	vprintf@PLT
	mov	edi, 10
	call	putchar@PLT
	mov	edi, 1
	call	exit@PLT
	.cfi_endproc
.LFE90:
	.size	semantic_fatal, .-semantic_fatal
	.globl	curr_func
	.bss
	.align 8
	.type	curr_func, @object
	.size	curr_func, 8
curr_func:
	.zero	8
	.section	.rodata
.LC79:
	.string	"\n"
	.align 8
.LC80:
	.string	"Invalid symbol %s in expression"
	.align 8
.LC81:
	.string	"Cannot operate array subscription on non-array or non-ptr"
	.align 8
.LC82:
	.string	"Cannot access a member of a non-struct"
	.align 8
.LC83:
	.string	"Cannot access a member of an undefined struct"
	.align 8
.LC84:
	.string	"Tried to access an invalid struct member"
	.align 8
.LC85:
	.string	"Cannot access a member of a non-pointer-to-struct"
	.align 8
.LC86:
	.string	"Cannot operate on 2 different types"
	.align 8
.LC87:
	.string	"Type mismatch in ternary expression"
	.align 8
.LC88:
	.string	"Cannot assign a different type"
.LC89:
	.string	"Invalid expression type"
	.text
	.globl	resolve_expr_type
	.type	resolve_expr_type, @function
resolve_expr_type:
.LFB91:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 80
	mov	QWORD PTR -72[rbp], rdi
	mov	QWORD PTR -80[rbp], rsi
	mov	QWORD PTR -56[rbp], 0
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	ja	.L532
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L534[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L534[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L534:
	.long	.L532-.L534
	.long	.L539-.L534
	.long	.L538-.L534
	.long	.L537-.L534
	.long	.L536-.L534
	.long	.L535-.L534
	.long	.L533-.L534
	.text
.L539:
	cmp	QWORD PTR -80[rbp], 0
	je	.L540
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -80[rbp], rax
	jne	.L540
	mov	eax, 0
	call	type_char
	mov	QWORD PTR -56[rbp], rax
	nop
	jmp	.L542
.L540:
	mov	eax, 0
	call	type_int
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L538:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	sym_get
	mov	QWORD PTR -32[rbp], rax
	cmp	QWORD PTR -32[rbp], 0
	jne	.L543
	mov	eax, 0
	call	print_sym_table
	lea	rdi, .LC79[rip]
	call	puts@PLT
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC80[rip]
	mov	eax, 0
	call	semantic_fatal
.L543:
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L537:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L536:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	cmp	QWORD PTR -56[rbp], 0
	je	.L544
	mov	rax, QWORD PTR -56[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	je	.L545
	mov	rax, QWORD PTR -56[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	je	.L545
.L544:
	lea	rdi, .LC81[rip]
	mov	eax, 0
	call	semantic_fatal
.L545:
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L535:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	cmp	QWORD PTR -56[rbp], 0
	je	.L546
	mov	rax, QWORD PTR -56[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	je	.L547
.L546:
	lea	rdi, .LC82[rip]
	mov	eax, 0
	call	semantic_fatal
.L547:
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 40[rax]
	test	rax, rax
	jne	.L548
	lea	rdi, .LC83[rip]
	mov	eax, 0
	call	semantic_fatal
.L548:
	mov	rax, QWORD PTR -72[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -56[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member
	mov	QWORD PTR -40[rbp], rax
	mov	QWORD PTR -56[rbp], 0
	cmp	QWORD PTR -40[rbp], 0
	je	.L549
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -56[rbp], rax
.L549:
	cmp	QWORD PTR -56[rbp], 0
	jne	.L581
	lea	rdi, .LC84[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L581
.L533:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	cmp	QWORD PTR -56[rbp], 0
	je	.L551
	mov	rax, QWORD PTR -56[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L551
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	je	.L552
.L551:
	lea	rdi, .LC85[rip]
	mov	eax, 0
	call	semantic_fatal
.L552:
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rax, QWORD PTR 40[rax]
	test	rax, rax
	jne	.L553
	lea	rdi, .LC83[rip]
	mov	eax, 0
	call	semantic_fatal
.L553:
	mov	rax, QWORD PTR -72[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member
	mov	QWORD PTR -40[rbp], rax
	mov	QWORD PTR -56[rbp], 0
	cmp	QWORD PTR -40[rbp], 0
	je	.L554
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -56[rbp], rax
.L554:
	cmp	QWORD PTR -56[rbp], 0
	jne	.L582
	lea	rdi, .LC84[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L582
.L532:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L556
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L556:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 10
	jne	.L558
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L558:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 11
	jne	.L559
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L559:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 12
	jne	.L560
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	type_ptr
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L560:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jle	.L561
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 12
	jg	.L561
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	jmp	.L557
.L561:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 13
	jle	.L562
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 22
	jg	.L562
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L563
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -16[rbp], rax
	je	.L564
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -16[rbp], rax
	jne	.L563
.L564:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L565
.L563:
	mov	rax, QWORD PTR -16[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L566
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -24[rbp], rax
	je	.L567
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -24[rbp], rax
	jne	.L566
.L567:
	mov	rax, QWORD PTR -16[rbp]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L565
.L566:
	mov	rax, QWORD PTR -24[rbp]
	cmp	rax, QWORD PTR -16[rbp]
	je	.L565
	lea	rdi, .LC86[rip]
	mov	eax, 0
	call	semantic_fatal
.L565:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L557
.L562:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 24
	jne	.L568
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdx, QWORD PTR -8[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	cmp	rax, QWORD PTR -16[rbp]
	je	.L569
	lea	rdi, .LC87[rip]
	mov	eax, 0
	call	semantic_fatal
.L569:
	mov	rax, QWORD PTR -16[rbp]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L568:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 25
	jne	.L570
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L571
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -16[rbp], rax
	je	.L572
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -16[rbp], rax
	jne	.L571
.L572:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	expr_is_const
	test	eax, eax
	je	.L571
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	eval_expr
	test	eax, eax
	jne	.L571
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -16[rbp], rax
	jmp	.L573
.L571:
	mov	rax, QWORD PTR -24[rbp]
	cmp	rax, QWORD PTR -16[rbp]
	je	.L573
	lea	rdi, .LC88[rip]
	mov	eax, 0
	call	semantic_fatal
.L573:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L542
.L570:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 26
	jne	.L574
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -48[rbp], rax
	jmp	.L575
.L576:
	mov	rax, QWORD PTR -48[rbp]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -48[rbp], rax
.L575:
	cmp	QWORD PTR -48[rbp], 0
	jne	.L576
	jmp	.L542
.L574:
	lea	rcx, __PRETTY_FUNCTION__.11[rip]
	mov	edx, 3094
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L557:
	jmp	.L542
.L581:
	nop
	jmp	.L542
.L582:
	nop
.L542:
	cmp	QWORD PTR -56[rbp], 0
	jne	.L577
	lea	rdi, .LC89[rip]
	mov	eax, 0
	call	semantic_fatal
.L577:
	cmp	QWORD PTR -56[rbp], 0
	je	.L578
	cmp	QWORD PTR -80[rbp], 0
	je	.L578
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -56[rbp], rax
	jne	.L578
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -80[rbp], rax
	jne	.L578
	mov	eax, 0
	call	type_int
	mov	QWORD PTR -56[rbp], rax
.L578:
	mov	rax, QWORD PTR -56[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L579
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 12
	je	.L579
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	QWORD PTR -56[rbp], rax
.L579:
	mov	rax, QWORD PTR -56[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE91:
	.size	resolve_expr_type, .-resolve_expr_type
	.globl	check_lvalue
	.type	check_lvalue, @function
check_lvalue:
.LFB92:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	DWORD PTR -4[rbp], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	jne	.L584
	mov	DWORD PTR -4[rbp], 1
	jmp	.L585
.L584:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 11
	jne	.L586
	mov	DWORD PTR -4[rbp], 1
	jmp	.L585
.L586:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L587
	mov	DWORD PTR -4[rbp], 1
	jmp	.L585
.L587:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 5
	jne	.L588
	mov	DWORD PTR -4[rbp], 1
	jmp	.L585
.L588:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jne	.L585
	mov	DWORD PTR -4[rbp], 1
.L585:
	mov	eax, DWORD PTR -4[rbp]
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE92:
	.size	check_lvalue, .-check_lvalue
	.section	.rodata
.LC90:
	.string	"Invalid function call"
	.align 8
.LC91:
	.string	"Invalid number of arguments in function call"
	.align 8
.LC92:
	.string	"Invalid type of argument in function call"
	.align 8
.LC93:
	.string	"Array subscription used to non-array and non-pointer"
	.align 8
.LC94:
	.string	"Subscription on a void pointer"
	.align 8
.LC95:
	.string	"Array subscription operand must be an integer"
	.align 8
.LC96:
	.string	"Invalid lvalue (operand of pre-increment '++')"
	.align 8
.LC97:
	.string	"Invalid lvalue (operand of pre-decrement '--')"
	.align 8
.LC98:
	.string	"Invalid arithmetic expression operand"
	.align 8
.LC99:
	.string	"Invalid pointer for dereference"
	.align 8
.LC100:
	.string	"Invalid lvalue (operand of unary '&')"
	.align 8
.LC101:
	.string	"Cannot add or subtract 2 pointers"
	.align 8
.LC102:
	.string	"Pointer can added or subtracted only with integers or chars"
	.align 8
.LC103:
	.string	"Invalid condition for ternary expression"
	.align 8
.LC104:
	.string	"Invalid lvalue (left operand of assignment)"
	.align 8
.LC105:
	.string	"Cannot assign to an array variable (only to its elements)"
	.align 8
.LC106:
	.string	"Invalid assignment expression (types mismatch)"
	.text
	.globl	check_expr
	.type	check_expr, @function
check_expr:
.LFB93:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 88
	.cfi_offset 3, -24
	mov	QWORD PTR -88[rbp], rdi
	mov	rax, QWORD PTR -88[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 26
	ja	.L657
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L593[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L593[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L593:
	.long	.L657-.L593
	.long	.L658-.L593
	.long	.L658-.L593
	.long	.L607-.L593
	.long	.L606-.L593
	.long	.L605-.L593
	.long	.L604-.L593
	.long	.L603-.L593
	.long	.L602-.L593
	.long	.L601-.L593
	.long	.L600-.L593
	.long	.L599-.L593
	.long	.L598-.L593
	.long	.L657-.L593
	.long	.L596-.L593
	.long	.L596-.L593
	.long	.L596-.L593
	.long	.L597-.L593
	.long	.L597-.L593
	.long	.L596-.L593
	.long	.L596-.L593
	.long	.L596-.L593
	.long	.L596-.L593
	.long	.L657-.L593
	.long	.L595-.L593
	.long	.L594-.L593
	.long	.L592-.L593
	.text
.L607:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 5
	je	.L610
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	je	.L610
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 5
	je	.L610
	lea	rdi, .LC90[rip]
	mov	eax, 0
	call	semantic_fatal
.L610:
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L611
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -72[rbp], rax
.L611:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -48[rbp], rax
	cmp	QWORD PTR -56[rbp], 0
	je	.L612
	cmp	QWORD PTR -48[rbp], 0
	je	.L613
.L612:
	cmp	QWORD PTR -56[rbp], 0
	jne	.L615
	cmp	QWORD PTR -48[rbp], 0
	je	.L615
.L613:
	lea	rdi, .LC91[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L615
.L619:
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -64[rbp], rax
	mov	rdx, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR -56[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	cmp	rax, QWORD PTR -32[rbp]
	je	.L616
	lea	rdi, .LC92[rip]
	mov	eax, 0
	call	semantic_fatal
.L616:
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -48[rbp], rax
	cmp	QWORD PTR -56[rbp], 0
	je	.L617
	cmp	QWORD PTR -48[rbp], 0
	je	.L618
.L617:
	cmp	QWORD PTR -56[rbp], 0
	jne	.L615
	cmp	QWORD PTR -48[rbp], 0
	je	.L615
.L618:
	lea	rdi, .LC91[rip]
	mov	eax, 0
	call	semantic_fatal
.L615:
	cmp	QWORD PTR -56[rbp], 0
	jne	.L619
	jmp	.L609
.L606:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	je	.L620
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	je	.L620
	lea	rdi, .LC93[rip]
	mov	eax, 0
	call	semantic_fatal
.L620:
	mov	rax, QWORD PTR -64[rbp]
	mov	rbx, QWORD PTR 8[rax]
	mov	eax, 0
	call	type_void
	cmp	rbx, rax
	jne	.L621
	lea	rdi, .LC94[rip]
	mov	eax, 0
	call	semantic_fatal
.L621:
	mov	eax, 0
	call	type_int
	mov	rdx, rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -32[rbp], rax
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -32[rbp], rax
	je	.L659
	lea	rdi, .LC95[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L659
.L605:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -64[rbp], rax
	cmp	QWORD PTR -64[rbp], 0
	je	.L623
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	je	.L624
.L623:
	lea	rdi, .LC82[rip]
	mov	eax, 0
	call	semantic_fatal
.L624:
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR 40[rax]
	test	rax, rax
	jne	.L625
	lea	rdi, .LC83[rip]
	mov	eax, 0
	call	semantic_fatal
.L625:
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	QWORD PTR -40[rbp], rax
	mov	QWORD PTR -64[rbp], 0
	jmp	.L626
.L629:
	mov	rax, QWORD PTR -40[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 8[rax]
	cmp	rdx, rax
	jne	.L627
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -64[rbp], rax
	jmp	.L628
.L627:
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -40[rbp], rax
.L626:
	cmp	QWORD PTR -40[rbp], 0
	jne	.L629
.L628:
	cmp	QWORD PTR -64[rbp], 0
	jne	.L660
	lea	rdi, .LC84[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L660
.L604:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -64[rbp], rax
	cmp	QWORD PTR -64[rbp], 0
	je	.L631
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L631
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	je	.L632
.L631:
	lea	rdi, .LC85[rip]
	mov	eax, 0
	call	semantic_fatal
.L632:
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rax, QWORD PTR 40[rax]
	test	rax, rax
	jne	.L633
	lea	rdi, .LC83[rip]
	mov	eax, 0
	call	semantic_fatal
.L633:
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rax, QWORD PTR 40[rax]
	mov	QWORD PTR -40[rbp], rax
	mov	QWORD PTR -64[rbp], 0
	jmp	.L634
.L637:
	mov	rax, QWORD PTR -40[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 8[rax]
	cmp	rdx, rax
	jne	.L635
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -64[rbp], rax
	jmp	.L636
.L635:
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -40[rbp], rax
.L634:
	cmp	QWORD PTR -40[rbp], 0
	jne	.L637
.L636:
	cmp	QWORD PTR -64[rbp], 0
	jne	.L661
	lea	rdi, .LC84[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L661
.L603:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	check_lvalue
	test	eax, eax
	jne	.L662
	lea	rdi, .LC96[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L662
.L602:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	check_lvalue
	test	eax, eax
	jne	.L663
	lea	rdi, .LC97[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L663
.L601:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	type_is_arithmetic
	test	eax, eax
	jne	.L664
	lea	rdi, .LC98[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L664
.L600:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -64[rbp], rax
	jmp	.L609
.L599:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	je	.L665
	lea	rdi, .LC99[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L665
.L598:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	check_lvalue
	test	eax, eax
	jne	.L666
	lea	rdi, .LC100[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L666
.L597:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdx, QWORD PTR -64[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L644
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L644
	lea	rdi, .LC101[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L645
.L644:
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L646
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -32[rbp], rax
	je	.L646
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -32[rbp], rax
	je	.L646
	lea	rdi, .LC102[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L645
.L646:
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L667
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -64[rbp], rax
	je	.L667
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -64[rbp], rax
	je	.L667
	lea	rdi, .LC102[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L667
.L645:
	jmp	.L667
.L596:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdx, QWORD PTR -64[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	type_is_arithmetic
	test	eax, eax
	jne	.L647
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L648
.L647:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	type_is_arithmetic
	test	eax, eax
	jne	.L668
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	je	.L668
.L648:
	lea	rdi, .LC98[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L668
.L595:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -64[rbp], rax
	mov	eax, 0
	call	type_char
	cmp	QWORD PTR -64[rbp], rax
	je	.L650
	mov	eax, 0
	call	type_int
	cmp	QWORD PTR -64[rbp], rax
	je	.L650
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	je	.L650
	lea	rdi, .LC103[rip]
	mov	eax, 0
	call	semantic_fatal
.L650:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdx, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	cmp	rax, QWORD PTR -32[rbp]
	je	.L669
	lea	rdi, .LC87[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L669
.L594:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	check_lvalue
	test	eax, eax
	jne	.L652
	lea	rdi, .LC104[rip]
	mov	eax, 0
	call	semantic_fatal
.L652:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L653
	lea	rdi, .LC105[rip]
	mov	eax, 0
	call	semantic_fatal
.L653:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdx, QWORD PTR -64[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	cmp	rax, QWORD PTR -32[rbp]
	je	.L670
	lea	rdi, .LC106[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L670
.L592:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L655
.L656:
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	check_expr
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -56[rbp], rax
.L655:
	cmp	QWORD PTR -56[rbp], 0
	jne	.L656
	jmp	.L609
.L657:
	lea	rcx, __PRETTY_FUNCTION__.10[rip]
	mov	edx, 3415
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L658:
	nop
	jmp	.L609
.L659:
	nop
	jmp	.L609
.L660:
	nop
	jmp	.L609
.L661:
	nop
	jmp	.L609
.L662:
	nop
	jmp	.L609
.L663:
	nop
	jmp	.L609
.L664:
	nop
	jmp	.L609
.L665:
	nop
	jmp	.L609
.L666:
	nop
	jmp	.L609
.L667:
	nop
	jmp	.L609
.L668:
	nop
	jmp	.L609
.L669:
	nop
	jmp	.L609
.L670:
	nop
.L609:
	mov	rax, QWORD PTR -88[rbp]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	nop
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE93:
	.size	check_expr, .-check_expr
	.section	.rodata
	.align 8
.LC107:
	.string	"You cannot declare a void type variable"
	.align 8
.LC108:
	.string	"Return expression does not match function return type"
	.align 8
.LC109:
	.string	"Cannot redefine the label '%s'"
	.text
	.globl	check_stmt
	.type	check_stmt, @function
check_stmt:
.LFB94:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 72
	.cfi_offset 3, -24
	mov	QWORD PTR -72[rbp], rdi
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 8
	ja	.L693
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L674[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L674[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L674:
	.long	.L682-.L674
	.long	.L681-.L674
	.long	.L680-.L674
	.long	.L679-.L674
	.long	.L678-.L674
	.long	.L677-.L674
	.long	.L676-.L674
	.long	.L675-.L674
	.long	.L673-.L674
	.text
.L682:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rbx, QWORD PTR [rax]
	mov	eax, 0
	call	type_void
	cmp	rbx, rax
	jne	.L683
	lea	rdi, .LC107[rip]
	mov	eax, 0
	call	semantic_fatal
.L683:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	sym_add
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	edx, DWORD PTR func_var_offset[rip]
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR [rax]
	mov	ecx, DWORD PTR 4[rax]
	mov	eax, edx
	sub	eax, ecx
	mov	DWORD PTR func_var_offset[rip], eax
	mov	edx, DWORD PTR func_var_offset[rip]
	mov	rax, QWORD PTR -24[rbp]
	mov	DWORD PTR 20[rax], edx
	jmp	.L684
.L681:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	check_expr
	jmp	.L684
.L680:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -48[rbp], rax
	jmp	.L685
.L686:
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	check_stmt
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 56[rax]
	mov	QWORD PTR -48[rbp], rax
.L685:
	cmp	QWORD PTR -48[rbp], 0
	jne	.L686
	jmp	.L684
.L679:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	test	rax, rax
	je	.L687
	mov	rax, QWORD PTR curr_func[rip]
	mov	rax, QWORD PTR 8[rax]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -56[rbp], rax
	jmp	.L688
.L687:
	mov	eax, 0
	call	type_void
	mov	QWORD PTR -56[rbp], rax
.L688:
	mov	rax, QWORD PTR curr_func[rip]
	mov	rax, QWORD PTR 8[rax]
	mov	rax, QWORD PTR 8[rax]
	cmp	QWORD PTR -56[rbp], rax
	je	.L694
	lea	rdi, .LC108[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L694
.L678:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	label_get
	mov	QWORD PTR -40[rbp], rax
	cmp	QWORD PTR -40[rbp], 0
	je	.L690
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 1
	jne	.L695
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC109[rip]
	mov	eax, 0
	call	semantic_fatal
	jmp	.L695
.L690:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	label_add
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	DWORD PTR [rax], 1
	jmp	.L695
.L677:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	label_get_or_add
	jmp	.L684
.L676:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	check_expr
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	check_stmt
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 48[rax]
	test	rax, rax
	je	.L696
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	rdi, rax
	call	check_stmt
	jmp	.L696
.L675:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	check_expr
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	check_stmt
	jmp	.L684
.L673:
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	check_expr
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	check_expr
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	check_expr
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	check_stmt
	jmp	.L684
.L693:
	lea	rcx, __PRETTY_FUNCTION__.9[rip]
	mov	edx, 3528
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L694:
	nop
	jmp	.L697
.L695:
	nop
	jmp	.L697
.L696:
	nop
.L684:
.L697:
	nop
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE94:
	.size	check_stmt, .-check_stmt
	.section	.rodata
	.align 8
.LC110:
	.string	"Global variable '%s' already declared"
	.align 8
.LC111:
	.string	"Function '%s' already declared"
	.text
	.globl	check_glob_decl
	.type	check_glob_decl, @function
check_glob_decl:
.LFB95:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	mov	rax, QWORD PTR -40[rbp]
	mov	eax, DWORD PTR [rax]
	test	eax, eax
	je	.L699
	cmp	eax, 1
	je	.L700
	jmp	.L710
.L699:
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	sym_get
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L702
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rax
	lea	rdi, .LC110[rip]
	mov	eax, 0
	call	semantic_fatal
.L702:
	mov	rax, QWORD PTR -40[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	sym_add
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 1
	jmp	.L703
.L700:
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	sym_get
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	je	.L704
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rax
	lea	rdi, .LC111[rip]
	mov	eax, 0
	call	semantic_fatal
.L704:
	mov	rax, QWORD PTR -40[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	sym_add
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 1
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR curr_func[rip], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 32[rax]
	test	rax, rax
	je	.L711
	mov	DWORD PTR func_var_offset[rip], -4
	mov	eax, DWORD PTR sym_table_count[rip]
	mov	DWORD PTR -20[rbp], eax
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -16[rbp], rax
	mov	DWORD PTR -24[rbp], 8
	jmp	.L706
.L709:
	mov	rax, QWORD PTR -16[rbp]
	mov	rcx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR [rax]
	mov	edx, DWORD PTR -24[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	sym_add_func_param
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	test	eax, eax
	jle	.L707
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	ecx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	mov	edx, eax
	mov	eax, 4
	sub	eax, edx
	add	eax, ecx
	jmp	.L708
.L707:
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
.L708:
	add	DWORD PTR -24[rbp], eax
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -16[rbp], rax
.L706:
	cmp	QWORD PTR -16[rbp], 0
	jne	.L709
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	check_stmt
	mov	eax, DWORD PTR -20[rbp]
	mov	DWORD PTR sym_table_count[rip], eax
	jmp	.L711
.L710:
	lea	rcx, __PRETTY_FUNCTION__.8[rip]
	mov	edx, 3590
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L711:
	nop
.L703:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE95:
	.size	check_glob_decl, .-check_glob_decl
	.section	.rodata
	.align 8
.LC112:
	.string	"Label '%s' used but not defined"
	.text
	.globl	check_unit
	.type	check_unit, @function
check_unit:
.LFB96:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	mov	eax, 0
	call	sym_reset
	mov	rax, QWORD PTR -40[rbp]
	mov	QWORD PTR -16[rbp], rax
	jmp	.L713
.L714:
	mov	rax, QWORD PTR -16[rbp]
	mov	rdi, rax
	call	check_glob_decl
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -16[rbp], rax
.L713:
	cmp	QWORD PTR -16[rbp], 0
	jne	.L714
	mov	DWORD PTR -20[rbp], 0
	jmp	.L715
.L717:
	mov	eax, DWORD PTR -20[rbp]
	cdqe
	sal	rax, 4
	mov	rdx, rax
	lea	rax, label_table[rip]
	add	rax, rdx
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 1
	je	.L716
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC112[rip]
	mov	eax, 0
	call	semantic_error
.L716:
	add	DWORD PTR -20[rbp], 1
.L715:
	mov	eax, DWORD PTR label_table_count[rip]
	cmp	DWORD PTR -20[rbp], eax
	jl	.L717
	nop
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE96:
	.size	check_unit, .-check_unit
	.globl	lbl_count
	.bss
	.align 4
	.type	lbl_count, @object
	.size	lbl_count, 4
lbl_count:
	.zero	4
	.text
	.globl	lbl_gen
	.type	lbl_gen, @function
lbl_gen:
.LFB97:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 160
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	BYTE PTR -144[rbp], 95
	mov	BYTE PTR -143[rbp], 95
	mov	BYTE PTR -142[rbp], 95
	mov	BYTE PTR -141[rbp], 76
	mov	edx, DWORD PTR lbl_count[rip]
	lea	rax, -144[rbp]
	add	rax, 4
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	sprintf@PLT
	mov	DWORD PTR -156[rbp], eax
	mov	eax, DWORD PTR -156[rbp]
	add	eax, 4
	cdqe
	mov	BYTE PTR -144[rbp+rax], 0
	mov	eax, DWORD PTR lbl_count[rip]
	add	eax, 1
	mov	DWORD PTR lbl_count[rip], eax
	lea	rax, -144[rbp]
	mov	rdi, rax
	call	str_intern
	mov	QWORD PTR -152[rbp], rax
	mov	rax, QWORD PTR -152[rbp]
	mov	rcx, QWORD PTR -8[rbp]
	sub	rcx, QWORD PTR fs:40
	je	.L720
	call	__stack_chk_fail@PLT
.L720:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE97:
	.size	lbl_gen, .-lbl_gen
	.globl	tmp_var_buff
	.bss
	.align 32
	.type	tmp_var_buff, @object
	.size	tmp_var_buff, 64
tmp_var_buff:
	.zero	64
	.globl	tmp_vars_count
	.align 4
	.type	tmp_vars_count, @object
	.size	tmp_vars_count, 4
tmp_vars_count:
	.zero	4
	.text
	.globl	tmp_var
	.type	tmp_var, @function
tmp_var:
.LFB98:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	BYTE PTR tmp_var_buff[rip], 95
	mov	BYTE PTR tmp_var_buff[rip+1], 95
	mov	BYTE PTR tmp_var_buff[rip+2], 95
	mov	BYTE PTR tmp_var_buff[rip+3], 116
	mov	eax, DWORD PTR tmp_vars_count[rip]
	lea	rcx, tmp_var_buff[rip+4]
	mov	edx, eax
	lea	rsi, .LC7[rip]
	mov	rdi, rcx
	mov	eax, 0
	call	sprintf@PLT
	mov	DWORD PTR -4[rbp], eax
	mov	eax, DWORD PTR -4[rbp]
	add	eax, 4
	cdqe
	lea	rdx, tmp_var_buff[rip]
	mov	BYTE PTR [rax+rdx], 0
	mov	eax, DWORD PTR tmp_vars_count[rip]
	add	eax, 1
	mov	DWORD PTR tmp_vars_count[rip], eax
	lea	rdi, tmp_var_buff[rip]
	call	str_intern
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE98:
	.size	tmp_var, .-tmp_var
	.globl	curr_block
	.bss
	.align 8
	.type	curr_block, @object
	.size	curr_block, 8
curr_block:
	.zero	8
	.text
	.globl	add_stmt
	.type	add_stmt, @function
add_stmt:
.LFB99:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	rax, QWORD PTR curr_block[rip]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L724
.L726:
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 56[rax]
	mov	QWORD PTR -8[rbp], rax
.L724:
	cmp	QWORD PTR -8[rbp], 0
	je	.L725
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 56[rax]
	test	rax, rax
	jne	.L726
.L725:
	cmp	QWORD PTR -8[rbp], 0
	je	.L727
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], rdx
	jmp	.L729
.L727:
	mov	rax, QWORD PTR curr_block[rip]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rax], rdx
.L729:
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE99:
	.size	add_stmt, .-add_stmt
	.globl	tmp_vars_pool
	.bss
	.align 32
	.type	tmp_vars_pool, @object
	.size	tmp_vars_pool, 4000
tmp_vars_pool:
	.zero	4000
	.globl	tmp_vars_pool_count
	.align 4
	.type	tmp_vars_pool_count, @object
	.size	tmp_vars_pool_count, 4
tmp_vars_pool_count:
	.zero	4
	.text
	.globl	tmp_vars_pool_reset
	.type	tmp_vars_pool_reset, @function
tmp_vars_pool_reset:
.LFB100:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	DWORD PTR tmp_vars_pool_count[rip], 0
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE100:
	.size	tmp_vars_pool_reset, .-tmp_vars_pool_reset
	.globl	tmp_vars_free
	.type	tmp_vars_free, @function
tmp_vars_free:
.LFB101:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	eax, DWORD PTR tmp_vars_pool_count[rip]
	sub	eax, 1
	mov	DWORD PTR -4[rbp], eax
	jmp	.L732
.L733:
	mov	eax, DWORD PTR -4[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	mov	rdx, rax
	lea	rax, tmp_vars_pool[rip+36]
	mov	DWORD PTR [rdx+rax], 0
	sub	DWORD PTR -4[rbp], 1
.L732:
	cmp	DWORD PTR -4[rbp], 0
	jns	.L733
	nop
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE101:
	.size	tmp_vars_free, .-tmp_vars_free
	.section	.rodata
.LC113:
	.string	"type"
	.text
	.globl	declare_tmp_var
	.type	declare_tmp_var, @function
declare_tmp_var:
.LFB102:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	mov	QWORD PTR -16[rbp], 0
	mov	eax, DWORD PTR tmp_vars_pool_count[rip]
	sub	eax, 1
	mov	DWORD PTR -28[rbp], eax
	jmp	.L735
.L737:
	mov	eax, DWORD PTR -28[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	mov	rdx, rax
	lea	rax, tmp_vars_pool[rip+8]
	mov	rax, QWORD PTR [rdx+rax]
	cmp	QWORD PTR -40[rbp], rax
	jne	.L736
	mov	eax, DWORD PTR -28[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	mov	rdx, rax
	lea	rax, tmp_vars_pool[rip+36]
	mov	eax, DWORD PTR [rdx+rax]
	test	eax, eax
	jne	.L736
	mov	eax, DWORD PTR -28[rbp]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	lea	rdx, tmp_vars_pool[rip]
	add	rax, rdx
	mov	QWORD PTR -16[rbp], rax
.L736:
	sub	DWORD PTR -28[rbp], 1
.L735:
	cmp	DWORD PTR -28[rbp], 0
	jns	.L737
	cmp	QWORD PTR -16[rbp], 0
	je	.L738
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR [rax]
	mov	QWORD PTR -24[rbp], rax
	jmp	.L739
.L738:
	mov	eax, 0
	call	tmp_var
	mov	QWORD PTR -24[rbp], rax
	cmp	QWORD PTR -40[rbp], 0
	jne	.L740
	lea	rcx, __PRETTY_FUNCTION__.7[rip]
	mov	edx, 3756
	lea	rsi, .LC3[rip]
	lea	rdi, .LC113[rip]
	call	__assert_fail@PLT
.L740:
	mov	rdx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -40[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	make_decl
	mov	rdi, rax
	call	make_stmt_decl
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, DWORD PTR tmp_vars_pool_count[rip]
	movsx	rdx, eax
	mov	rax, rdx
	sal	rax, 2
	add	rax, rdx
	sal	rax, 3
	lea	rdx, tmp_vars_pool[rip]
	add	rax, rdx
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR [rax], rdx
	mov	rax, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	eax, DWORD PTR tmp_vars_pool_count[rip]
	add	eax, 1
	mov	DWORD PTR tmp_vars_pool_count[rip], eax
.L739:
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR 36[rax], 1
	mov	rax, QWORD PTR -24[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE102:
	.size	declare_tmp_var, .-declare_tmp_var
	.globl	expr_is_atom
	.type	expr_is_atom, @function
expr_is_atom:
.LFB103:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -8[rbp], rdi
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 1
	je	.L743
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	jne	.L744
.L743:
	mov	eax, 1
	jmp	.L745
.L744:
	mov	eax, 0
.L745:
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE103:
	.size	expr_is_atom, .-expr_is_atom
	.section	.rodata
.LC114:
	.string	"lt->kind == TYPE_STRUCT"
.LC115:
	.string	"aggr_el"
	.align 8
.LC116:
	.string	"lt->kind == TYPE_PTR && lt->base_type->kind == TYPE_STRUCT"
	.text
	.globl	store_expr_temp_var
	.type	store_expr_temp_var, @function
store_expr_temp_var:
.LFB104:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 184
	.cfi_offset 3, -24
	mov	QWORD PTR -184[rbp], rdi
	mov	rax, QWORD PTR -184[rbp]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -136[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	jne	.L747
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L747
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	QWORD PTR -136[rbp], rax
.L747:
	mov	rax, QWORD PTR -136[rbp]
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -120[rbp], rax
	mov	QWORD PTR -176[rbp], 0
	mov	rax, QWORD PTR -184[rbp]
	mov	rdi, rax
	call	expr_is_atom
	test	eax, eax
	je	.L748
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	jne	.L749
	mov	rax, QWORD PTR -184[rbp]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -128[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L750
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	make_expr_id
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L750:
	mov	rax, QWORD PTR -184[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L749:
	mov	rax, QWORD PTR -184[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L748:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L752
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	QWORD PTR -144[rbp], 0
	mov	QWORD PTR -152[rbp], 0
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -160[rbp], rax
	jmp	.L753
.L756:
	mov	rax, QWORD PTR -160[rbp]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 48[rax], 0
	cmp	QWORD PTR -152[rbp], 0
	je	.L754
	mov	rax, QWORD PTR -152[rbp]
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 48[rax], rdx
	mov	rax, QWORD PTR -152[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -152[rbp], rax
	jmp	.L755
.L754:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR -152[rbp], rax
	mov	rax, QWORD PTR -152[rbp]
	mov	QWORD PTR -144[rbp], rax
.L755:
	mov	rax, QWORD PTR -160[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -160[rbp], rax
.L753:
	cmp	QWORD PTR -160[rbp], 0
	jne	.L756
	mov	rdx, QWORD PTR -144[rbp]
	mov	rax, QWORD PTR -168[rbp]
	mov	rsi, rax
	mov	edi, 3
	call	make_expr_binary
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L752:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L757
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -128[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	store_expr_temp_var
	mov	QWORD PTR -56[rbp], rax
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	mov	edi, eax
	call	make_expr_intlit
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 14
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -112[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	store_expr_temp_var
	mov	QWORD PTR -48[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -40[rbp], rax
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -112[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rbx, rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -112[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -112[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rax
	mov	edi, 11
	call	make_expr_unary
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L757:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 5
	jne	.L758
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -128[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	je	.L759
	lea	rcx, __PRETTY_FUNCTION__.6[rip]
	mov	edx, 3925
	lea	rsi, .LC3[rip]
	lea	rdi, .LC114[rip]
	call	__assert_fail@PLT
.L759:
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -168[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	rsi, rax
	mov	edi, 12
	call	make_expr_unary
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -48[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -184[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -128[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member_offset
	mov	edi, eax
	call	make_expr_intlit
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -184[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -128[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member
	mov	QWORD PTR -32[rbp], rax
	cmp	QWORD PTR -32[rbp], 0
	jne	.L760
	lea	rcx, __PRETTY_FUNCTION__.6[rip]
	mov	edx, 3954
	lea	rsi, .LC3[rip]
	lea	rdi, .LC115[rip]
	call	__assert_fail@PLT
.L760:
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rax
	mov	edi, 11
	call	make_expr_unary
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L758:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jne	.L761
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -128[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L762
	mov	rax, QWORD PTR -128[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	je	.L783
.L762:
	lea	rcx, __PRETTY_FUNCTION__.6[rip]
	mov	edx, 3969
	lea	rsi, .LC3[rip]
	lea	rdi, .LC116[rip]
	call	__assert_fail@PLT
.L783:
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -56[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -168[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -184[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -128[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member_offset
	mov	edi, eax
	call	make_expr_intlit
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -184[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -128[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member
	mov	QWORD PTR -32[rbp], rax
	cmp	QWORD PTR -32[rbp], 0
	jne	.L764
	lea	rcx, __PRETTY_FUNCTION__.6[rip]
	mov	edx, 3990
	lea	rsi, .LC3[rip]
	lea	rdi, .LC115[rip]
	call	__assert_fail@PLT
.L764:
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rax
	mov	edi, 11
	call	make_expr_unary
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L761:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jle	.L765
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 12
	jg	.L765
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	mov	rdx, QWORD PTR -168[rbp]
	mov	rsi, rdx
	mov	edi, eax
	call	make_expr_unary
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L765:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 17
	je	.L766
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 18
	jne	.L767
.L766:
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -128[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	je	.L768
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L769
.L768:
	mov	rax, QWORD PTR -128[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L770
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -160[rbp], rax
	jmp	.L771
.L770:
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -160[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	QWORD PTR -128[rbp], rax
.L771:
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -48[rbp], rax
	mov	eax, 0
	call	type_int
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -128[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	mov	edi, eax
	call	make_expr_intlit
	mov	rbx, rax
	mov	rax, QWORD PTR -160[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 14
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -168[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rax
	mov	rax, QWORD PTR -128[rbp]
	mov	rsi, rax
	mov	rdi, rdx
	call	make_expr_cast
	mov	QWORD PTR -176[rbp], rax
	nop
	jmp	.L751
.L769:
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -160[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	mov	rdx, QWORD PTR -160[rbp]
	mov	rcx, QWORD PTR -168[rbp]
	mov	rsi, rcx
	mov	edi, eax
	call	make_expr_binary
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L767:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 13
	jle	.L773
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 22
	jg	.L773
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -160[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	mov	rdx, QWORD PTR -160[rbp]
	mov	rcx, QWORD PTR -168[rbp]
	mov	rsi, rcx
	mov	edi, eax
	call	make_expr_binary
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L773:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 24
	jne	.L774
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -104[rbp], rax
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -96[rbp], rax
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -88[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	rax, QWORD PTR -168[rbp]
	mov	edx, 0
	mov	esi, 0
	mov	rdi, rax
	call	make_stmt_if
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdx, QWORD PTR -104[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 5
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdx, QWORD PTR -96[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdx, QWORD PTR -104[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -80[rbp], rax
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -120[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rcx, rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, rax
	mov	rsi, rcx
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -112[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 5
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdx, QWORD PTR -88[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdx, QWORD PTR -96[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -160[rbp], rax
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -120[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rcx, rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, rax
	mov	rsi, rcx
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -112[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdx, QWORD PTR -88[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -112[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	jmp	.L751
.L774:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 25
	jne	.L775
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -168[rbp], rax
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -160[rbp], rax
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rdx, QWORD PTR -160[rbp]
	mov	rax, QWORD PTR -168[rbp]
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -112[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -168[rbp]
	mov	QWORD PTR -176[rbp], rax
	jmp	.L751
.L775:
	mov	rax, QWORD PTR -184[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 26
	jne	.L776
	mov	rax, QWORD PTR -184[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -168[rbp], rax
	jmp	.L777
.L780:
	mov	rax, QWORD PTR -168[rbp]
	mov	rax, QWORD PTR 48[rax]
	test	rax, rax
	je	.L778
	mov	rax, QWORD PTR -168[rbp]
	mov	rdi, rax
	call	expr_to_irc
	jmp	.L779
.L778:
	mov	rax, QWORD PTR -168[rbp]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -176[rbp], rax
.L779:
	mov	rax, QWORD PTR -168[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -168[rbp], rax
.L777:
	cmp	QWORD PTR -168[rbp], 0
	jne	.L780
	jmp	.L751
.L776:
	lea	rcx, __PRETTY_FUNCTION__.6[rip]
	mov	edx, 4152
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L751:
	cmp	QWORD PTR -176[rbp], 0
	je	.L781
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -120[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rcx, rax
	mov	rax, QWORD PTR -176[rbp]
	mov	rdx, rax
	mov	rsi, rcx
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -112[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	add_stmt
.L781:
	mov	rax, QWORD PTR -120[rbp]
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE104:
	.size	store_expr_temp_var, .-store_expr_temp_var
	.section	.rodata
.LC117:
	.string	"res"
	.text
	.globl	reduce_expr_to_atom
	.type	reduce_expr_to_atom, @function
reduce_expr_to_atom:
.LFB105:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 88
	.cfi_offset 3, -24
	mov	QWORD PTR -88[rbp], rdi
	mov	QWORD PTR -80[rbp], 0
	mov	rax, QWORD PTR -88[rbp]
	mov	rdi, rax
	call	expr_is_atom
	test	eax, eax
	je	.L785
	mov	rax, QWORD PTR -88[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	QWORD PTR -80[rbp], rax
	jmp	.L786
.L785:
	mov	rax, QWORD PTR -88[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 11
	jne	.L787
	mov	rax, QWORD PTR -88[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	QWORD PTR -80[rbp], rax
	jmp	.L786
.L787:
	mov	rax, QWORD PTR -88[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L788
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	store_expr_temp_var
	mov	QWORD PTR -56[rbp], rax
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	mov	edi, eax
	call	make_expr_intlit
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 14
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	store_expr_temp_var
	mov	QWORD PTR -32[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -24[rbp], rax
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -48[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rbx, rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rax
	mov	edi, 11
	call	make_expr_unary
	mov	QWORD PTR -80[rbp], rax
	jmp	.L786
.L788:
	mov	rax, QWORD PTR -88[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 5
	jne	.L789
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	je	.L790
	lea	rcx, __PRETTY_FUNCTION__.5[rip]
	mov	edx, 4238
	lea	rsi, .LC3[rip]
	lea	rdi, .LC114[rip]
	call	__assert_fail@PLT
.L790:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	rsi, rax
	mov	edi, 12
	call	make_expr_unary
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -32[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -88[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member_offset
	mov	edi, eax
	call	make_expr_intlit
	mov	rbx, rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -88[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member
	mov	QWORD PTR -40[rbp], rax
	cmp	QWORD PTR -40[rbp], 0
	jne	.L791
	lea	rcx, __PRETTY_FUNCTION__.5[rip]
	mov	edx, 4267
	lea	rsi, .LC3[rip]
	lea	rdi, .LC115[rip]
	call	__assert_fail@PLT
.L791:
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rax
	mov	edi, 11
	call	make_expr_unary
	mov	QWORD PTR -80[rbp], rax
	jmp	.L786
.L789:
	mov	rax, QWORD PTR -88[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jne	.L792
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L793
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	je	.L798
.L793:
	lea	rcx, __PRETTY_FUNCTION__.5[rip]
	mov	edx, 4282
	lea	rsi, .LC3[rip]
	lea	rdi, .LC116[rip]
	call	__assert_fail@PLT
.L798:
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -64[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -56[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -88[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member_offset
	mov	edi, eax
	call	make_expr_intlit
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -88[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	get_struct_member
	mov	QWORD PTR -40[rbp], rax
	cmp	QWORD PTR -40[rbp], 0
	jne	.L795
	lea	rcx, __PRETTY_FUNCTION__.5[rip]
	mov	edx, 4303
	lea	rsi, .LC3[rip]
	lea	rdi, .LC115[rip]
	call	__assert_fail@PLT
.L795:
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rax
	mov	edi, 11
	call	make_expr_unary
	mov	QWORD PTR -80[rbp], rax
	jmp	.L786
.L792:
	mov	rax, QWORD PTR -88[rbp]
	mov	rdi, rax
	call	store_expr_temp_var
	mov	rdi, rax
	call	make_expr_id
	mov	QWORD PTR -80[rbp], rax
.L786:
	cmp	QWORD PTR -80[rbp], 0
	jne	.L796
	lea	rcx, __PRETTY_FUNCTION__.5[rip]
	mov	edx, 4320
	lea	rsi, .LC3[rip]
	lea	rdi, .LC117[rip]
	call	__assert_fail@PLT
.L796:
	mov	rax, QWORD PTR -80[rbp]
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE105:
	.size	reduce_expr_to_atom, .-reduce_expr_to_atom
	.section	.rodata
.LC118:
	.string	"expr->l->kind == EXPR_ID"
.LC119:
	.string	"lt->size % 4 == 0"
	.text
	.globl	expr_to_irc
	.type	expr_to_irc, @function
expr_to_irc:
.LFB106:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 136
	.cfi_offset 3, -24
	mov	QWORD PTR -136[rbp], rdi
	mov	QWORD PTR -104[rbp], 0
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 1
	je	.L800
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	je	.L800
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 3
	jne	.L801
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -120[rbp], rax
	mov	QWORD PTR -88[rbp], 0
	mov	QWORD PTR -96[rbp], 0
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -112[rbp], rax
	jmp	.L802
.L805:
	mov	edi, 65
	call	putchar@PLT
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 48[rax], 0
	cmp	QWORD PTR -96[rbp], 0
	je	.L803
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	rdx, QWORD PTR -96[rbp]
	mov	QWORD PTR 48[rdx], rax
	mov	rax, QWORD PTR -96[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -96[rbp], rax
	jmp	.L804
.L803:
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	QWORD PTR -96[rbp], rax
	mov	rax, QWORD PTR -96[rbp]
	mov	QWORD PTR -88[rbp], rax
.L804:
	mov	rax, QWORD PTR -112[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -112[rbp], rax
.L802:
	cmp	QWORD PTR -112[rbp], 0
	jne	.L805
	mov	rdx, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR -120[rbp]
	mov	rsi, rax
	mov	edi, 3
	call	make_expr_binary
	mov	QWORD PTR -104[rbp], rax
	jmp	.L800
.L801:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L806
	mov	rax, QWORD PTR -136[rbp]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -104[rbp], rax
	jmp	.L800
.L806:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 5
	jne	.L807
	mov	rax, QWORD PTR -136[rbp]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -104[rbp], rax
	jmp	.L800
.L807:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jne	.L808
	mov	rax, QWORD PTR -136[rbp]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -104[rbp], rax
	jmp	.L800
.L808:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 7
	je	.L809
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 8
	jne	.L810
.L809:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 7
	jne	.L811
	mov	DWORD PTR -128[rbp], 17
	jmp	.L812
.L811:
	mov	DWORD PTR -128[rbp], 18
.L812:
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -120[rbp], rax
	mov	edi, 1
	call	make_expr_intlit
	mov	rdx, rax
	mov	rcx, QWORD PTR -120[rbp]
	mov	eax, DWORD PTR -128[rbp]
	mov	rsi, rcx
	mov	edi, eax
	call	make_expr_binary
	mov	rdx, rax
	mov	rax, QWORD PTR -120[rbp]
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	QWORD PTR -104[rbp], rax
	jmp	.L800
.L810:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jle	.L813
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 12
	jg	.L813
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -120[rbp], rax
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	mov	rdx, QWORD PTR -120[rbp]
	mov	rsi, rdx
	mov	edi, eax
	call	make_expr_unary
	mov	QWORD PTR -104[rbp], rax
	jmp	.L800
.L813:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 13
	jle	.L814
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 22
	jg	.L814
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -120[rbp], rax
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	mov	rdx, QWORD PTR -112[rbp]
	mov	rcx, QWORD PTR -120[rbp]
	mov	rsi, rcx
	mov	edi, eax
	call	make_expr_binary
	mov	QWORD PTR -104[rbp], rax
	jmp	.L800
.L814:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 24
	jne	.L815
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -120[rbp], rax
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -112[rbp], rax
	mov	rdx, QWORD PTR -112[rbp]
	mov	rcx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR -120[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	make_expr_ternary
	mov	QWORD PTR -104[rbp], rax
	jmp	.L800
.L815:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 25
	jne	.L816
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -80[rbp], rax
	mov	rax, QWORD PTR -80[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	jne	.L817
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	je	.L818
	lea	rcx, __PRETTY_FUNCTION__.4[rip]
	mov	edx, 4430
	lea	rsi, .LC3[rip]
	lea	rdi, .LC118[rip]
	call	__assert_fail@PLT
.L818:
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -120[rbp], rax
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -64[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -56[rbp], rax
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -120[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	rsi, rax
	mov	edi, 12
	call	make_expr_unary
	mov	rbx, rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -112[rbp]
	mov	rdi, rax
	call	dup_expr
	mov	rsi, rax
	mov	edi, 12
	call	make_expr_unary
	mov	rbx, rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, 0
	call	type_char
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, 0
	call	type_int
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -72[rbp], rax
	mov	eax, 0
	call	type_int
	mov	rdi, rax
	call	type_ptr
	mov	rdi, rax
	call	declare_tmp_var
	mov	QWORD PTR -64[rbp], rax
	mov	eax, 0
	call	type_int
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, 0
	call	type_int
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -80[rbp]
	mov	eax, DWORD PTR 4[rax]
	and	eax, 3
	test	eax, eax
	je	.L819
	lea	rcx, __PRETTY_FUNCTION__.4[rip]
	mov	edx, 4479
	lea	rsi, .LC3[rip]
	lea	rdi, .LC119[rip]
	call	__assert_fail@PLT
.L819:
	mov	DWORD PTR -124[rbp], 0
	jmp	.L820
.L821:
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rax
	mov	edi, 11
	call	make_expr_unary
	mov	rbx, rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rax
	mov	edi, 11
	call	make_expr_unary
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_expr_intlit
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_expr_intlit
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 17
	call	make_expr_binary
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, 0
	call	type_int
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	eax, 0
	call	type_int
	mov	rdi, rax
	call	type_ptr
	mov	rbx, rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rsi, rbx
	mov	rdi, rax
	call	make_expr_cast
	mov	rbx, rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	make_expr_id
	mov	rdx, rbx
	mov	rsi, rax
	mov	edi, 25
	call	make_expr_binary
	mov	rdi, rax
	call	make_stmt_expr
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
	add	DWORD PTR -124[rbp], 1
.L820:
	mov	rax, QWORD PTR -80[rbp]
	mov	eax, DWORD PTR 4[rax]
	lea	edx, 3[rax]
	test	eax, eax
	cmovs	eax, edx
	sar	eax, 2
	cmp	DWORD PTR -124[rbp], eax
	jl	.L821
	jmp	.L800
.L817:
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -120[rbp], rax
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -112[rbp], rax
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	mov	rdx, QWORD PTR -112[rbp]
	mov	rcx, QWORD PTR -120[rbp]
	mov	rsi, rcx
	mov	edi, eax
	call	make_expr_binary
	mov	QWORD PTR -104[rbp], rax
	jmp	.L800
.L816:
	mov	rax, QWORD PTR -136[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 26
	jne	.L822
	mov	rax, QWORD PTR -136[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -120[rbp], rax
	jmp	.L823
.L824:
	mov	rax, QWORD PTR -120[rbp]
	mov	rdi, rax
	call	expr_to_irc
	mov	rax, QWORD PTR -120[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -120[rbp], rax
.L823:
	cmp	QWORD PTR -120[rbp], 0
	jne	.L824
	jmp	.L800
.L822:
	lea	rcx, __PRETTY_FUNCTION__.4[rip]
	mov	edx, 4539
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L800:
	cmp	QWORD PTR -104[rbp], 0
	je	.L826
	mov	edi, 1
	call	make_stmt
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rdx, QWORD PTR -104[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	add_stmt
.L826:
	nop
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE106:
	.size	expr_to_irc, .-expr_to_irc
	.globl	stmt_to_irc
	.type	stmt_to_irc, @function
stmt_to_irc:
.LFB107:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	QWORD PTR -56[rbp], rdi
	mov	rax, QWORD PTR -56[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 8
	ja	.L847
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L830[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L830[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L830:
	.long	.L838-.L830
	.long	.L837-.L830
	.long	.L836-.L830
	.long	.L835-.L830
	.long	.L834-.L830
	.long	.L833-.L830
	.long	.L832-.L830
	.long	.L831-.L830
	.long	.L829-.L830
	.text
.L838:
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	dup_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	sym_add
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	edx, DWORD PTR func_var_offset[rip]
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rax, QWORD PTR [rax]
	mov	ecx, DWORD PTR 4[rax]
	mov	eax, edx
	sub	eax, ecx
	mov	DWORD PTR func_var_offset[rip], eax
	mov	edx, DWORD PTR func_var_offset[rip]
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 20[rax], edx
	jmp	.L839
.L837:
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	expr_to_irc
	jmp	.L839
.L836:
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	block_to_irc
	jmp	.L839
.L835:
	mov	edi, 3
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	test	rax, rax
	je	.L840
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	expr_is_atom
	test	eax, eax
	je	.L841
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	dup_expr
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rdx], rax
	jmp	.L842
.L841:
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	rdx, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rdx], rax
	jmp	.L842
.L840:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 8[rax], 0
.L842:
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	jmp	.L839
.L834:
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	dup_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	jmp	.L839
.L833:
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	dup_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	jmp	.L839
.L832:
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -40[rbp], rax
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 48[rax]
	test	rax, rax
	je	.L843
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -48[rbp], rax
.L843:
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	edx, 0
	mov	esi, 0
	mov	rdi, rax
	call	make_stmt_if
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 5
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	stmt_to_irc
	mov	edi, 5
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 48[rax]
	test	rax, rax
	je	.L844
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rax], rdx
	jmp	.L845
.L844:
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
.L845:
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 48[rax]
	test	rax, rax
	je	.L848
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	rdi, rax
	call	stmt_to_irc
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	jmp	.L848
.L831:
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -40[rbp], rax
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -32[rbp], rax
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -48[rbp], rax
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	edx, 0
	mov	esi, 0
	mov	rdi, rax
	call	make_stmt_if
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 5
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	stmt_to_irc
	mov	edi, 5
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	jmp	.L839
.L829:
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -40[rbp], rax
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -32[rbp], rax
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdi, rax
	call	expr_to_irc
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rdi, rax
	call	reduce_expr_to_atom
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	edx, 0
	mov	esi, 0
	mov	rdi, rax
	call	make_stmt_if
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 5
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	rdi, rax
	call	stmt_to_irc
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	expr_to_irc
	mov	edi, 5
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	mov	edi, 4
	call	make_stmt
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR -48[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -24[rbp]
	mov	QWORD PTR 56[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	add_stmt
	jmp	.L839
.L847:
	lea	rcx, __PRETTY_FUNCTION__.3[rip]
	mov	edx, 4762
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L848:
	nop
.L839:
	mov	eax, 0
	call	tmp_vars_free
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE107:
	.size	stmt_to_irc, .-stmt_to_irc
	.globl	block_to_irc
	.type	block_to_irc, @function
block_to_irc:
.LFB108:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	eax, DWORD PTR tmp_vars_pool_count[rip]
	mov	DWORD PTR -12[rbp], eax
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L850
.L851:
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	stmt_to_irc
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 56[rax]
	mov	QWORD PTR -8[rbp], rax
.L850:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L851
	mov	eax, DWORD PTR -12[rbp]
	mov	DWORD PTR tmp_vars_pool_count[rip], eax
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE108:
	.size	block_to_irc, .-block_to_irc
	.globl	func_def_to_irc
	.type	func_def_to_irc, @function
func_def_to_irc:
.LFB109:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	mov	eax, DWORD PTR tmp_vars_pool_count[rip]
	mov	DWORD PTR -28[rbp], eax
	mov	edi, 2
	call	make_stmt
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	QWORD PTR 8[rax], 0
	mov	rax, QWORD PTR curr_block[rip]
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -16[rbp]
	mov	QWORD PTR curr_block[rip], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -24[rbp], rax
	jmp	.L853
.L854:
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	stmt_to_irc
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 56[rax]
	mov	QWORD PTR -24[rbp], rax
.L853:
	cmp	QWORD PTR -24[rbp], 0
	jne	.L854
	mov	rax, QWORD PTR -8[rbp]
	mov	QWORD PTR curr_block[rip], rax
	mov	eax, DWORD PTR -28[rbp]
	mov	DWORD PTR tmp_vars_pool_count[rip], eax
	mov	rax, QWORD PTR -16[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE109:
	.size	func_def_to_irc, .-func_def_to_irc
	.section	.rodata
.LC120:
	.string	"invalid global declaration"
	.text
	.globl	unit_to_irc
	.type	unit_to_irc, @function
unit_to_irc:
.LFB110:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	QWORD PTR -56[rbp], rdi
	mov	eax, 0
	call	sym_reset
	mov	eax, 0
	call	tmp_vars_pool_reset
	mov	QWORD PTR -40[rbp], 0
	mov	QWORD PTR -32[rbp], 0
	mov	rax, QWORD PTR -56[rbp]
	mov	QWORD PTR -24[rbp], rax
	jmp	.L857
.L869:
	cmp	QWORD PTR -40[rbp], 0
	je	.L858
	mov	edi, 40
	call	malloc@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], rdx
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rcx, QWORD PTR -24[rbp]
	mov	edx, 40
	mov	rsi, rcx
	mov	rdi, rax
	call	memcpy@PLT
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rdx], rax
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -32[rbp], rax
	jmp	.L859
.L858:
	mov	edi, 40
	call	malloc@PLT
	mov	QWORD PTR -40[rbp], rax
	mov	rcx, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR -40[rbp]
	mov	edx, 40
	mov	rsi, rcx
	mov	rdi, rax
	call	memcpy@PLT
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	QWORD PTR -32[rbp], rax
.L859:
	mov	rax, QWORD PTR -32[rbp]
	mov	QWORD PTR 8[rax], 0
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR [rax]
	test	eax, eax
	je	.L860
	cmp	eax, 1
	je	.L861
	jmp	.L871
.L860:
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	sym_add
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 1
	jmp	.L863
.L861:
	mov	rax, QWORD PTR -24[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	sym_add
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 1
	mov	eax, DWORD PTR sym_table_count[rip]
	mov	DWORD PTR -44[rbp], eax
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -16[rbp], rax
	mov	DWORD PTR -48[rbp], 8
	jmp	.L864
.L867:
	mov	rax, QWORD PTR -16[rbp]
	mov	rcx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR [rax]
	mov	edx, DWORD PTR -48[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	sym_add_func_param
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	test	eax, eax
	jle	.L865
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	ecx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	mov	edx, eax
	mov	eax, 4
	sub	eax, edx
	add	eax, ecx
	jmp	.L866
.L865:
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
.L866:
	add	DWORD PTR -48[rbp], eax
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -16[rbp], rax
.L864:
	cmp	QWORD PTR -16[rbp], 0
	jne	.L867
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 32[rax]
	test	rax, rax
	je	.L868
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 32[rax]
	mov	rdi, rax
	call	func_def_to_irc
	mov	rdx, QWORD PTR -32[rbp]
	mov	QWORD PTR 32[rdx], rax
.L868:
	mov	eax, DWORD PTR -44[rbp]
	mov	DWORD PTR sym_table_count[rip], eax
	jmp	.L863
.L871:
	lea	rdi, .LC120[rip]
	mov	eax, 0
	call	semantic_fatal
	nop
.L863:
	mov	rax, QWORD PTR -24[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -24[rbp], rax
.L857:
	cmp	QWORD PTR -24[rbp], 0
	jne	.L869
	mov	rax, QWORD PTR -40[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE110:
	.size	unit_to_irc, .-unit_to_irc
	.section	.rodata
.LC121:
	.string	"Invalid symbol %s"
.LC122:
	.string	"\tmovl %s,%%eax\n"
.LC123:
	.string	"\tmovl %%ebp,%%eax\n"
.LC124:
	.string	"\taddl $%d,%%eax\n"
.LC125:
	.string	"\tmovl (%%eax),%%eax\n"
	.text
	.globl	compile_lvalue
	.type	compile_lvalue, @function
compile_lvalue:
.LFB111:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	je	.L873
	cmp	eax, 11
	je	.L874
	jmp	.L880
.L873:
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	sym_get
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], 0
	jne	.L876
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC121[rip]
	mov	eax, 0
	call	fatal
.L876:
	mov	rax, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR 16[rax]
	test	eax, eax
	je	.L877
	mov	rax, QWORD PTR -8[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC122[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L879
.L877:
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC123[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR 20[rax]
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC124[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L879
.L874:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_lvalue
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC125[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L879
.L880:
	lea	rcx, __PRETTY_FUNCTION__.2[rip]
	mov	edx, 4926
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L879:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE111:
	.size	compile_lvalue, .-compile_lvalue
	.section	.rodata
.LC126:
	.string	"\tmovl $%d,%%eax\n"
.LC127:
	.string	"movzbl"
.LC128:
	.string	"movzwl"
.LC129:
	.string	"movl"
.LC130:
	.string	"\tmovl %s,%%ebx\n"
.LC131:
	.string	"\t%s (%%ebx),%%eax\n"
.LC132:
	.string	"\t%s %d(%%ebp),%%eax\n"
.LC133:
	.string	"sym->type->kind == TYPE_FUNC"
.LC134:
	.string	"\tpushl %%eax\n"
.LC135:
	.string	"\tcall %s\n"
.LC136:
	.string	"\taddl $%d,%%esp\n"
	.align 8
.LC137:
	.string	"We don't handle \"complex\" function calls"
.LC138:
	.string	"\tnegl %%eax\n"
.LC139:
	.string	"movzbw"
.LC140:
	.string	"\t%s %%eax,%%eax\n"
.LC141:
	.string	"\tmovl %%eax,%%ecx\n"
.LC142:
	.string	"\timull %%ecx\n"
.LC143:
	.string	"\tcltd\n"
.LC144:
	.string	"\tidivl %%ecx\n"
.LC145:
	.string	"\taddl %%ecx,%%eax\n"
.LC146:
	.string	"\tsubl %%ecx,%%eax\n"
.LC147:
	.string	"jl"
.LC148:
	.string	"jle"
.LC149:
	.string	"jg"
.LC150:
	.string	"jge"
.LC151:
	.string	"ins"
.LC152:
	.string	"\tcmpl %%ecx,%%eax\n"
.LC153:
	.string	"\t%s %s\n"
.LC154:
	.string	"\tmovl $0,%%eax\n"
.LC155:
	.string	"\tjmp %s\n"
.LC156:
	.string	"%s:\n"
.LC157:
	.string	"\tmovl $1,%%eax\n"
.LC158:
	.string	"movb"
.LC159:
	.string	"movw"
.LC160:
	.string	"\t%s %%ecx,(%%eax)\n"
	.text
	.globl	compile_expr
	.type	compile_expr, @function
compile_expr:
.LFB112:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 80
	mov	QWORD PTR -72[rbp], rdi
	mov	QWORD PTR -80[rbp], rsi
	mov	QWORD PTR -32[rbp], 0
	mov	QWORD PTR -40[rbp], 0
	mov	rax, QWORD PTR -80[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 26
	ja	.L933
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L884[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L884[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L884:
	.long	.L933-.L884
	.long	.L897-.L884
	.long	.L896-.L884
	.long	.L895-.L884
	.long	.L933-.L884
	.long	.L933-.L884
	.long	.L933-.L884
	.long	.L933-.L884
	.long	.L933-.L884
	.long	.L894-.L884
	.long	.L893-.L884
	.long	.L892-.L884
	.long	.L891-.L884
	.long	.L933-.L884
	.long	.L890-.L884
	.long	.L889-.L884
	.long	.L933-.L884
	.long	.L888-.L884
	.long	.L887-.L884
	.long	.L886-.L884
	.long	.L886-.L884
	.long	.L886-.L884
	.long	.L886-.L884
	.long	.L933-.L884
	.long	.L933-.L884
	.long	.L885-.L884
	.long	.L883-.L884
	.text
.L897:
	mov	rax, QWORD PTR -80[rbp]
	mov	edx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC126[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L896:
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	sym_get
	mov	QWORD PTR -32[rbp], rax
	cmp	QWORD PTR -32[rbp], 0
	jne	.L899
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC121[rip]
	mov	eax, 0
	call	fatal
.L899:
	mov	rax, QWORD PTR -80[rbp]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 1
	jne	.L900
	lea	rax, .LC127[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L901
.L900:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 2
	jne	.L902
	lea	rax, .LC128[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L901
.L902:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 4
	jne	.L903
	lea	rax, .LC129[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L901
.L903:
	lea	rcx, __PRETTY_FUNCTION__.1[rip]
	mov	edx, 4974
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L901:
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 4
	jne	.L904
	mov	rdx, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_lvalue
	jmp	.L898
.L904:
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR 16[rax]
	test	eax, eax
	je	.L906
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC130[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rdx, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC131[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L906:
	mov	rax, QWORD PTR -32[rbp]
	mov	ecx, DWORD PTR 20[rax]
	mov	rdx, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC132[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L895:
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 2
	jne	.L907
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rax, QWORD PTR 8[rax]
	mov	rdi, rax
	call	sym_get
	mov	QWORD PTR -32[rbp], rax
	cmp	QWORD PTR -32[rbp], 0
	jne	.L908
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rax
	lea	rdi, .LC121[rip]
	mov	eax, 0
	call	fatal
.L908:
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 5
	je	.L909
	lea	rcx, __PRETTY_FUNCTION__.1[rip]
	mov	edx, 5002
	lea	rsi, .LC3[rip]
	lea	rdi, .LC133[rip]
	call	__assert_fail@PLT
.L909:
	mov	DWORD PTR -64[rbp], 0
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -56[rbp], rax
	mov	DWORD PTR -60[rbp], 0
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -48[rbp], rax
	jmp	.L910
.L913:
	add	DWORD PTR -64[rbp], 1
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC134[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	test	eax, eax
	jle	.L911
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	ecx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	mov	edx, eax
	mov	eax, 4
	sub	eax, edx
	add	eax, ecx
	jmp	.L912
.L911:
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
.L912:
	add	DWORD PTR -60[rbp], eax
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -48[rbp], rax
.L910:
	cmp	QWORD PTR -56[rbp], 0
	jne	.L913
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC135[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L914
.L915:
	mov	edx, DWORD PTR -60[rbp]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC136[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	sub	DWORD PTR -64[rbp], 1
.L914:
	cmp	DWORD PTR -64[rbp], 0
	jg	.L915
	jmp	.L898
.L907:
	lea	rdi, .LC137[rip]
	mov	eax, 0
	call	fatal
	jmp	.L898
.L892:
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC125[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L891:
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_lvalue
	jmp	.L898
.L894:
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC138[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L893:
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	edx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	eax, DWORD PTR 4[rax]
	cmp	edx, eax
	jge	.L917
	mov	rax, QWORD PTR -24[rbp]
	mov	edx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	eax, DWORD PTR 4[rax]
	cmp	edx, eax
	jge	.L917
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 1
	jne	.L918
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 2
	jne	.L918
	lea	rax, .LC139[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L917
.L918:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 1
	jne	.L919
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 4
	jne	.L919
	lea	rax, .LC127[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L917
.L919:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 2
	jne	.L920
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 40[rax]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 4
	jne	.L920
	lea	rax, .LC128[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L917
.L920:
	lea	rcx, __PRETTY_FUNCTION__.1[rip]
	mov	edx, 5073
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L917:
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	cmp	QWORD PTR -40[rbp], 0
	je	.L934
	mov	rdx, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC140[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L934
.L890:
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC141[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC142[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L889:
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC141[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	mov	rcx, rax
	mov	edx, 6
	mov	esi, 1
	lea	rdi, .LC143[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC144[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L888:
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC141[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC145[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L887:
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC141[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC146[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L886:
	mov	rax, QWORD PTR -80[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 19
	jne	.L922
	lea	rax, .LC147[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L923
.L922:
	mov	rax, QWORD PTR -80[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 20
	jne	.L924
	lea	rax, .LC148[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L923
.L924:
	mov	rax, QWORD PTR -80[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 21
	jne	.L925
	lea	rax, .LC149[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L923
.L925:
	mov	rax, QWORD PTR -80[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 22
	jne	.L923
	lea	rax, .LC150[rip]
	mov	QWORD PTR -40[rbp], rax
.L923:
	cmp	QWORD PTR -40[rbp], 0
	jne	.L926
	lea	rcx, __PRETTY_FUNCTION__.1[rip]
	mov	edx, 5139
	lea	rsi, .LC3[rip]
	lea	rdi, .LC151[rip]
	call	__assert_fail@PLT
.L926:
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -16[rbp], rax
	mov	eax, 0
	call	lbl_gen
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC141[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC152[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rcx, QWORD PTR -16[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC153[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC154[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rdx, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC155[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rdx, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC156[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC157[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rdx, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC156[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L885:
	mov	rax, QWORD PTR -80[rbp]
	mov	esi, 0
	mov	rdi, rax
	call	resolve_expr_type
	mov	QWORD PTR -24[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 1
	jne	.L927
	lea	rax, .LC158[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L928
.L927:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 2
	jne	.L929
	lea	rax, .LC159[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L928
.L929:
	mov	rax, QWORD PTR -24[rbp]
	mov	eax, DWORD PTR 4[rax]
	cmp	eax, 4
	jne	.L930
	lea	rax, .LC129[rip]
	mov	QWORD PTR -40[rbp], rax
	jmp	.L928
.L930:
	lea	rcx, __PRETTY_FUNCTION__.1[rip]
	mov	edx, 5173
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L928:
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC141[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -80[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_lvalue
	mov	rdx, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR -72[rbp]
	lea	rsi, .LC160[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L898
.L883:
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -56[rbp], rax
	jmp	.L931
.L932:
	mov	rdx, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR -72[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR 48[rax]
	mov	QWORD PTR -56[rbp], rax
.L931:
	cmp	QWORD PTR -56[rbp], 0
	jne	.L932
	jmp	.L898
.L933:
	lea	rcx, __PRETTY_FUNCTION__.1[rip]
	mov	edx, 5194
	lea	rsi, .LC3[rip]
	lea	rdi, .LC32[rip]
	call	__assert_fail@PLT
.L934:
	nop
.L898:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE112:
	.size	compile_expr, .-compile_expr
	.section	.rodata
	.align 8
.LC161:
	.string	"decl->type && decl->type->size > 0"
.LC162:
	.string	"\tsubl $%d,%%esp\n"
	.text
	.globl	compile_decl
	.type	compile_decl, @function
compile_decl:
.LFB113:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR [rax]
	test	rax, rax
	je	.L936
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR [rax]
	mov	eax, DWORD PTR 4[rax]
	test	eax, eax
	jg	.L940
.L936:
	lea	rcx, __PRETTY_FUNCTION__.0[rip]
	mov	edx, 5205
	lea	rsi, .LC3[rip]
	lea	rdi, .LC161[rip]
	call	__assert_fail@PLT
.L940:
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR [rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	test	eax, eax
	jle	.L938
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR [rax]
	mov	ecx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR [rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	mov	edx, eax
	mov	eax, 4
	sub	eax, edx
	add	eax, ecx
	jmp	.L939
.L938:
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR [rax]
	mov	eax, DWORD PTR 4[rax]
.L939:
	mov	DWORD PTR -12[rbp], eax
	mov	edx, DWORD PTR -12[rbp]
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC162[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	sym_add
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	edx, DWORD PTR func_var_offset[rip]
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR [rax]
	mov	ecx, DWORD PTR 4[rax]
	mov	eax, edx
	sub	eax, ecx
	mov	DWORD PTR func_var_offset[rip], eax
	mov	edx, DWORD PTR func_var_offset[rip]
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 20[rax], edx
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE113:
	.size	compile_decl, .-compile_decl
	.section	.rodata
.LC163:
	.string	"\tpopl %%ebx\n"
.LC164:
	.string	"\tleave\n"
.LC165:
	.string	"\tret\n"
.LC166:
	.string	"\tcmpl $0,%%eax\n"
.LC167:
	.string	"\tjne %s\n"
.LC168:
	.string	"Invalid statement"
	.text
	.globl	compile_stmt
	.type	compile_stmt, @function
compile_stmt:
.LFB114:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	rax, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR [rax]
	cmp	eax, 6
	ja	.L942
	mov	eax, eax
	lea	rdx, 0[0+rax*4]
	lea	rax, .L944[rip]
	mov	eax, DWORD PTR [rdx+rax]
	cdqe
	lea	rdx, .L944[rip]
	add	rax, rdx
	notrack jmp	rax
	.section	.rodata
	.align 4
	.align 4
.L944:
	.long	.L950-.L944
	.long	.L949-.L944
	.long	.L948-.L944
	.long	.L947-.L944
	.long	.L946-.L944
	.long	.L945-.L944
	.long	.L943-.L944
	.text
.L950:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_decl
	jmp	.L951
.L949:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	jmp	.L951
.L948:
	mov	eax, DWORD PTR sym_table_count[rip]
	mov	DWORD PTR -12[rbp], eax
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L952
.L953:
	mov	rdx, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_stmt
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 56[rax]
	mov	QWORD PTR -8[rbp], rax
.L952:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L953
	mov	eax, DWORD PTR -12[rbp]
	mov	DWORD PTR sym_table_count[rip], eax
	jmp	.L951
.L947:
	mov	rax, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR 8[rax]
	test	rax, rax
	je	.L954
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
.L954:
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC163[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rcx, rax
	mov	edx, 7
	mov	esi, 1
	lea	rdi, .LC164[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rcx, rax
	mov	edx, 5
	mov	esi, 1
	lea	rdi, .LC165[rip]
	call	fwrite@PLT
	jmp	.L951
.L946:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC156[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L951
.L945:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC155[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L951
.L943:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_expr
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC166[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC167[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L951
.L942:
	lea	rdi, .LC168[rip]
	mov	eax, 0
	call	fatal
	nop
.L951:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE114:
	.size	compile_stmt, .-compile_stmt
	.section	.rodata
.LC169:
	.string	"\t.zero $%d\n"
.LC170:
	.string	"\tpushl %%ebp\n"
.LC171:
	.string	"\tmovl %%esp,%%ebp\n"
.LC172:
	.string	"\tpushl %%ebx\n"
.LC173:
	.string	"Invalid global declaration"
	.text
	.globl	compile_glob_decl
	.type	compile_glob_decl, @function
compile_glob_decl:
.LFB115:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	QWORD PTR -40[rbp], rdi
	mov	QWORD PTR -48[rbp], rsi
	mov	rax, QWORD PTR -48[rbp]
	mov	eax, DWORD PTR [rax]
	test	eax, eax
	je	.L956
	cmp	eax, 1
	je	.L957
	jmp	.L967
.L956:
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	test	eax, eax
	jle	.L959
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	ecx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	mov	edx, eax
	mov	eax, 4
	sub	eax, edx
	add	eax, ecx
	jmp	.L960
.L959:
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	eax, DWORD PTR 4[rax]
.L960:
	mov	DWORD PTR -20[rbp], eax
	mov	rax, QWORD PTR -48[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -40[rbp]
	lea	rsi, .LC156[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	edx, DWORD PTR -20[rbp]
	mov	rax, QWORD PTR -40[rbp]
	lea	rsi, .LC169[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -48[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	sym_add
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 1
	jmp	.L961
.L957:
	mov	DWORD PTR func_var_offset[rip], -4
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 32[rax]
	test	rax, rax
	je	.L962
	mov	rax, QWORD PTR -48[rbp]
	mov	rdx, QWORD PTR 16[rax]
	mov	rax, QWORD PTR -40[rbp]
	lea	rsi, .LC156[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -40[rbp]
	lea	rsi, .LC170[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -40[rbp]
	lea	rsi, .LC171[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -40[rbp]
	lea	rsi, .LC172[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	eax, DWORD PTR sym_table_count[rip]
	mov	DWORD PTR -24[rbp], eax
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 24[rax]
	mov	rax, QWORD PTR 24[rax]
	mov	QWORD PTR -16[rbp], rax
	mov	DWORD PTR -28[rbp], 8
	jmp	.L963
.L966:
	mov	rax, QWORD PTR -16[rbp]
	mov	rcx, QWORD PTR 8[rax]
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR [rax]
	mov	edx, DWORD PTR -28[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	sym_add_func_param
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	test	eax, eax
	jle	.L964
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	ecx, DWORD PTR 4[rax]
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
	cdq
	shr	edx, 30
	add	eax, edx
	and	eax, 3
	sub	eax, edx
	mov	edx, eax
	mov	eax, 4
	sub	eax, edx
	add	eax, ecx
	jmp	.L965
.L964:
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	eax, DWORD PTR 4[rax]
.L965:
	add	DWORD PTR -28[rbp], eax
	mov	rax, QWORD PTR -16[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	QWORD PTR -16[rbp], rax
.L963:
	cmp	QWORD PTR -16[rbp], 0
	jne	.L966
	mov	rax, QWORD PTR -48[rbp]
	mov	rdx, QWORD PTR 32[rax]
	mov	rax, QWORD PTR -40[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_stmt
	mov	rax, QWORD PTR -40[rbp]
	lea	rsi, .LC163[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -40[rbp]
	mov	rcx, rax
	mov	edx, 7
	mov	esi, 1
	lea	rdi, .LC164[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR -40[rbp]
	mov	rcx, rax
	mov	edx, 5
	mov	esi, 1
	lea	rdi, .LC165[rip]
	call	fwrite@PLT
	mov	eax, DWORD PTR -24[rbp]
	mov	DWORD PTR sym_table_count[rip], eax
.L962:
	mov	rax, QWORD PTR -48[rbp]
	mov	rdx, QWORD PTR 24[rax]
	mov	rax, QWORD PTR -48[rbp]
	mov	rax, QWORD PTR 16[rax]
	mov	rsi, rdx
	mov	rdi, rax
	call	sym_add
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	DWORD PTR 16[rax], 1
	jmp	.L961
.L967:
	lea	rdi, .LC173[rip]
	mov	eax, 0
	call	fatal
	nop
.L961:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE115:
	.size	compile_glob_decl, .-compile_glob_decl
	.section	.rodata
.LC174:
	.string	"___entry:\n"
.LC175:
	.string	"\tcall main\n"
.LC176:
	.string	"\tmovl %%eax,%%ebx\n"
.LC177:
	.string	"\tsyscall\n"
	.text
	.globl	compile_unit
	.type	compile_unit, @function
compile_unit:
.LFB116:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	QWORD PTR -24[rbp], rdi
	mov	QWORD PTR -32[rbp], rsi
	mov	eax, 0
	call	sym_reset
	mov	rax, QWORD PTR -24[rbp]
	mov	rcx, rax
	mov	edx, 10
	mov	esi, 1
	lea	rdi, .LC174[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC170[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC171[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rcx, rax
	mov	edx, 11
	mov	esi, 1
	lea	rdi, .LC175[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC176[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -24[rbp]
	lea	rsi, .LC157[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rcx, rax
	mov	edx, 9
	mov	esi, 1
	lea	rdi, .LC177[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rcx, rax
	mov	edx, 7
	mov	esi, 1
	lea	rdi, .LC164[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR -24[rbp]
	mov	rcx, rax
	mov	edx, 5
	mov	esi, 1
	lea	rdi, .LC165[rip]
	call	fwrite@PLT
	mov	rax, QWORD PTR -32[rbp]
	mov	QWORD PTR -8[rbp], rax
	jmp	.L969
.L970:
	mov	rdx, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_glob_decl
	mov	rax, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -8[rbp], rax
.L969:
	cmp	QWORD PTR -8[rbp], 0
	jne	.L970
	nop
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE116:
	.size	compile_unit, .-compile_unit
	.section	.rodata
	.align 8
.LC178:
	.string	"Usage: ./ezc <input_file> [<output_file>]"
.LC179:
	.string	"r"
.LC180:
	.string	"w"
.LC181:
	.string	"a.out.asm"
	.text
	.globl	main
	.type	main, @function
main:
.LFB117:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 64
	mov	DWORD PTR -52[rbp], edi
	mov	QWORD PTR -64[rbp], rsi
	cmp	DWORD PTR -52[rbp], 1
	jg	.L972
	lea	rdi, .LC178[rip]
	call	puts@PLT
	mov	eax, 1
	jmp	.L973
.L972:
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR 8[rax]
	mov	QWORD PTR -48[rbp], rax
	mov	rax, QWORD PTR -48[rbp]
	lea	rsi, .LC179[rip]
	mov	rdi, rax
	call	fopen@PLT
	mov	QWORD PTR -40[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	edx, 2
	mov	esi, 0
	mov	rdi, rax
	call	fseek@PLT
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	ftell@PLT
	mov	QWORD PTR -32[rbp], rax
	mov	rax, QWORD PTR -40[rbp]
	mov	edx, 0
	mov	esi, 0
	mov	rdi, rax
	call	fseek@PLT
	mov	rax, QWORD PTR -32[rbp]
	mov	rdi, rax
	call	malloc@PLT
	mov	QWORD PTR -24[rbp], rax
	mov	rsi, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR -40[rbp]
	mov	rax, QWORD PTR -24[rbp]
	mov	rcx, rdx
	mov	edx, 1
	mov	rdi, rax
	call	fread@PLT
	mov	rax, QWORD PTR -40[rbp]
	mov	rdi, rax
	call	fclose@PLT
	mov	rax, QWORD PTR -32[rbp]
	lea	rdx, -1[rax]
	mov	rax, QWORD PTR -24[rbp]
	add	rax, rdx
	mov	BYTE PTR [rax], 0
	lea	rsi, .LC180[rip]
	lea	rdi, .LC181[rip]
	call	fopen@PLT
	mov	QWORD PTR -16[rbp], rax
	mov	rax, QWORD PTR -24[rbp]
	mov	rdi, rax
	call	parser_init
	mov	eax, 0
	call	parse_unit
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	check_unit
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	unit_to_irc
	mov	QWORD PTR -8[rbp], rax
	mov	rdx, QWORD PTR -8[rbp]
	mov	rax, QWORD PTR -16[rbp]
	mov	rsi, rdx
	mov	rdi, rax
	call	compile_unit
	mov	rax, QWORD PTR -16[rbp]
	mov	rdi, rax
	call	fclose@PLT
	mov	eax, 0
.L973:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE117:
	.size	main, .-main
	.section	.rodata
	.align 8
	.type	__PRETTY_FUNCTION__.16, @object
	.size	__PRETTY_FUNCTION__.16, 12
__PRETTY_FUNCTION__.16:
	.string	"type_struct"
	.align 8
	.type	__PRETTY_FUNCTION__.15, @object
	.size	__PRETTY_FUNCTION__.15, 11
__PRETTY_FUNCTION__.15:
	.string	"print_expr"
	.align 8
	.type	__PRETTY_FUNCTION__.14, @object
	.size	__PRETTY_FUNCTION__.14, 10
__PRETTY_FUNCTION__.14:
	.string	"_tok_next"
	.align 8
	.type	__PRETTY_FUNCTION__.13, @object
	.size	__PRETTY_FUNCTION__.13, 11
__PRETTY_FUNCTION__.13:
	.string	"tok_expect"
	.align 8
	.type	__PRETTY_FUNCTION__.12, @object
	.size	__PRETTY_FUNCTION__.12, 10
__PRETTY_FUNCTION__.12:
	.string	"eval_expr"
	.align 16
	.type	__PRETTY_FUNCTION__.11, @object
	.size	__PRETTY_FUNCTION__.11, 18
__PRETTY_FUNCTION__.11:
	.string	"resolve_expr_type"
	.align 8
	.type	__PRETTY_FUNCTION__.10, @object
	.size	__PRETTY_FUNCTION__.10, 11
__PRETTY_FUNCTION__.10:
	.string	"check_expr"
	.align 8
	.type	__PRETTY_FUNCTION__.9, @object
	.size	__PRETTY_FUNCTION__.9, 11
__PRETTY_FUNCTION__.9:
	.string	"check_stmt"
	.align 16
	.type	__PRETTY_FUNCTION__.8, @object
	.size	__PRETTY_FUNCTION__.8, 16
__PRETTY_FUNCTION__.8:
	.string	"check_glob_decl"
	.align 16
	.type	__PRETTY_FUNCTION__.7, @object
	.size	__PRETTY_FUNCTION__.7, 16
__PRETTY_FUNCTION__.7:
	.string	"declare_tmp_var"
	.align 16
	.type	__PRETTY_FUNCTION__.6, @object
	.size	__PRETTY_FUNCTION__.6, 20
__PRETTY_FUNCTION__.6:
	.string	"store_expr_temp_var"
	.align 16
	.type	__PRETTY_FUNCTION__.5, @object
	.size	__PRETTY_FUNCTION__.5, 20
__PRETTY_FUNCTION__.5:
	.string	"reduce_expr_to_atom"
	.align 8
	.type	__PRETTY_FUNCTION__.4, @object
	.size	__PRETTY_FUNCTION__.4, 12
__PRETTY_FUNCTION__.4:
	.string	"expr_to_irc"
	.align 8
	.type	__PRETTY_FUNCTION__.3, @object
	.size	__PRETTY_FUNCTION__.3, 12
__PRETTY_FUNCTION__.3:
	.string	"stmt_to_irc"
	.align 8
	.type	__PRETTY_FUNCTION__.2, @object
	.size	__PRETTY_FUNCTION__.2, 15
__PRETTY_FUNCTION__.2:
	.string	"compile_lvalue"
	.align 8
	.type	__PRETTY_FUNCTION__.1, @object
	.size	__PRETTY_FUNCTION__.1, 13
__PRETTY_FUNCTION__.1:
	.string	"compile_expr"
	.align 8
	.type	__PRETTY_FUNCTION__.0, @object
	.size	__PRETTY_FUNCTION__.0, 13
__PRETTY_FUNCTION__.0:
	.string	"compile_decl"
	.ident	"GCC: (Ubuntu 10.5.0-1ubuntu1~20.04) 10.5.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	 1f - 0f
	.long	 4f - 1f
	.long	 5
0:
	.string	 "GNU"
1:
	.align 8
	.long	 0xc0000002
	.long	 3f - 2f
2:
	.long	 0x3
3:
	.align 8
4:

	.arch armv5t
	.eabi_attribute 20, 1
	.eabi_attribute 21, 1
	.eabi_attribute 23, 3
	.eabi_attribute 24, 1
	.eabi_attribute 25, 1
	.eabi_attribute 26, 2
	.eabi_attribute 30, 6
	.eabi_attribute 34, 0
	.eabi_attribute 18, 4
	.file	"56122.c"
	.text
	.section	.rodata
	.align	2
.LC0:
	.ascii	"[!] ERROR: \000"
	.align	2
.LC1:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	error
	.syntax unified
	.arm
	.fpu softvfp
	.type	error, %function
error:
	@ args = 4, pretend = 16, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 1
	push	{r0, r1, r2, r3}
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	ldr	r3, [fp, #4]
	str	r3, [fp, #-16]
	ldr	r3, .L3
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r0, .L3+4
	bl	printf
	add	r3, fp, #8
	str	r3, [fp, #-12]
	ldr	r1, [fp, #-12]
	ldr	r0, [fp, #-16]
	bl	vprintf
	mov	r0, #10
	bl	putchar
	nop
	ldr	r3, .L3
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L2
	bl	__stack_chk_fail
.L2:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, lr}
	add	sp, sp, #16
	bx	lr
.L4:
	.align	2
.L3:
	.word	.LC1
	.word	.LC0
	.size	error, .-error
	.section	.rodata
	.align	2
.LC2:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	fatal
	.syntax unified
	.arm
	.fpu softvfp
	.type	fatal, %function
fatal:
	@ args = 4, pretend = 16, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 1
	push	{r0, r1, r2, r3}
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	ldr	r3, [fp, #4]
	str	r3, [fp, #-16]
	ldr	r3, .L7
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r0, .L7+4
	bl	printf
	add	r3, fp, #8
	str	r3, [fp, #-12]
	ldr	r1, [fp, #-12]
	ldr	r0, [fp, #-16]
	bl	vprintf
	mov	r0, #10
	bl	putchar
	mov	r0, #1
	bl	exit
.L8:
	.align	2
.L7:
	.word	.LC2
	.word	.LC0
	.size	fatal, .-fatal
	.comm	str_intern_table,4,4
	.align	2
	.global	str_intern_create
	.syntax unified
	.arm
	.fpu softvfp
	.type	str_intern_create, %function
str_intern_create:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r0, [fp, #-16]
	bl	strlen
	mov	r3, r0
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-12]
	add	r3, r3, #12
	mov	r0, r3
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-12]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	add	r3, r3, #8
	ldr	r1, [fp, #-16]
	mov	r0, r3
	bl	strcpy
	ldr	r2, [fp, #-8]
	ldr	r3, [fp, #-12]
	add	r3, r2, r3
	add	r3, r3, #8
	mov	r2, #0
	strb	r2, [r3]
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	str_intern_create, .-str_intern_create
	.align	2
	.global	str_intern_add
	.syntax unified
	.arm
	.fpu softvfp
	.type	str_intern_add, %function
str_intern_add:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	ldr	r3, .L17
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L12
	ldr	r3, .L17
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	b	.L13
.L14:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	str	r3, [fp, #-8]
.L13:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L14
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	b	.L16
.L12:
	ldr	r2, .L17
	ldr	r3, [fp, #-16]
	str	r3, [r2]
.L16:
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L18:
	.align	2
.L17:
	.word	str_intern_table
	.size	str_intern_add, .-str_intern_add
	.align	2
	.global	str_intern_len
	.syntax unified
	.arm
	.fpu softvfp
	.type	str_intern_len, %function
str_intern_len:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	beq	.L20
	ldr	r3, [fp, #-16]
	sub	r3, r3, #8
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-12]
	b	.L21
.L20:
	mov	r3, #0
	str	r3, [fp, #-12]
.L21:
	ldr	r3, [fp, #-12]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
	.size	str_intern_len, .-str_intern_len
	.align	2
	.global	str_intern
	.syntax unified
	.arm
	.fpu softvfp
	.type	str_intern, %function
str_intern:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-20]
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	beq	.L24
	ldr	r3, [fp, #-24]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	beq	.L24
	mov	r3, #0
	str	r3, [fp, #-16]
	ldr	r3, .L33
	ldr	r3, [r3]
	str	r3, [fp, #-12]
	ldr	r0, [fp, #-24]
	bl	strlen
	mov	r3, r0
	str	r3, [fp, #-8]
	b	.L25
.L29:
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #4]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	bne	.L26
	ldr	r3, [fp, #-12]
	add	r3, r3, #8
	ldr	r1, [fp, #-24]
	mov	r0, r3
	bl	strcmp
	mov	r3, r0
	cmp	r3, #0
	bne	.L26
	mov	r3, #1
	b	.L27
.L26:
	mov	r3, #0
.L27:
	str	r3, [fp, #-16]
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bne	.L25
	ldr	r3, [fp, #-12]
	ldr	r3, [r3]
	str	r3, [fp, #-12]
.L25:
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bne	.L28
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	bne	.L29
.L28:
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bne	.L30
	ldr	r0, [fp, #-24]
	bl	str_intern_create
	str	r0, [fp, #-12]
	ldr	r0, [fp, #-12]
	bl	str_intern_add
.L30:
	ldr	r3, [fp, #-12]
	add	r3, r3, #8
	str	r3, [fp, #-20]
	b	.L31
.L24:
	mov	r3, #0
	str	r3, [fp, #-20]
.L31:
	ldr	r3, [fp, #-20]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L34:
	.align	2
.L33:
	.word	str_intern_table
	.size	str_intern, .-str_intern
	.align	2
	.global	make_func_param
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_func_param, %function
make_func_param:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r0, #12
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L36
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #8]
.L36:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_func_param, .-make_func_param
	.align	2
	.global	reverse_func_params_list
	.syntax unified
	.arm
	.fpu softvfp
	.type	reverse_func_params_list, %function
reverse_func_params_list:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	beq	.L39
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	cmp	r3, #0
	bne	.L40
.L39:
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-8]
	b	.L41
.L40:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	reverse_func_params_list
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #8]
.L41:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	reverse_func_params_list, .-reverse_func_params_list
	.align	2
	.global	make_aggr_element
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_aggr_element, %function
make_aggr_element:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	str	r2, [fp, #-24]
	mov	r0, #16
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L44
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #12]
.L44:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_aggr_element, .-make_aggr_element
	.global	_type_void
	.bss
	.align	2
	.type	_type_void, %object
	.size	_type_void, 28
_type_void:
	.space	28
	.global	_type_char
	.data
	.align	2
	.type	_type_char, %object
	.size	_type_char, 28
_type_char:
	.word	1
	.word	1
	.word	0
	.space	16
	.global	_type_int
	.align	2
	.type	_type_int, %object
	.size	_type_int, 28
_type_int:
	.word	2
	.word	4
	.word	0
	.space	16
	.text
	.align	2
	.global	type_void
	.syntax unified
	.arm
	.fpu softvfp
	.type	type_void, %function
type_void:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	ldr	r3, .L48
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L49:
	.align	2
.L48:
	.word	_type_void
	.size	type_void, .-type_void
	.align	2
	.global	type_char
	.syntax unified
	.arm
	.fpu softvfp
	.type	type_char, %function
type_char:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	ldr	r3, .L52
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L53:
	.align	2
.L52:
	.word	_type_char
	.size	type_char, .-type_char
	.align	2
	.global	type_int
	.syntax unified
	.arm
	.fpu softvfp
	.type	type_int, %function
type_int:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	ldr	r3, .L56
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L57:
	.align	2
.L56:
	.word	_type_int
	.size	type_int, .-type_int
	.align	2
	.global	type_is_arithmetic
	.syntax unified
	.arm
	.fpu softvfp
	.type	type_is_arithmetic, %function
type_is_arithmetic:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	str	r0, [fp, #-8]
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-8]
	cmp	r3, r2
	beq	.L59
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-8]
	cmp	r3, r2
	bne	.L60
.L59:
	mov	r3, #1
	b	.L62
.L60:
	mov	r3, #0
.L62:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	type_is_arithmetic, .-type_is_arithmetic
	.comm	type_ptr_cache,2800,4
	.global	type_ptr_cache_count
	.bss
	.align	2
	.type	type_ptr_cache_count, %object
	.size	type_ptr_cache_count, 4
type_ptr_cache_count:
	.space	4
	.text
	.align	2
	.global	type_ptr
	.syntax unified
	.arm
	.fpu softvfp
	.type	type_ptr, %function
type_ptr:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-12]
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L64
.L67:
	ldr	r1, .L70
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	add	r3, r3, #8
	ldr	r3, [r3]
	ldr	r2, [fp, #-16]
	cmp	r2, r3
	bne	.L65
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L70
	add	r3, r3, r2
	str	r3, [fp, #-12]
	b	.L66
.L65:
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L64:
	ldr	r3, .L70+4
	ldr	r3, [r3]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	blt	.L67
.L66:
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	bne	.L68
	ldr	r3, .L70+4
	ldr	r2, [r3]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L70
	add	r3, r3, r2
	str	r3, [fp, #-12]
	ldr	r3, .L70+4
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L70+4
	str	r3, [r2]
	ldr	r3, [fp, #-12]
	mov	r2, #3
	str	r2, [r3]
	ldr	r3, [fp, #-12]
	mov	r2, #4
	str	r2, [r3, #4]
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #8]
.L68:
	ldr	r3, [fp, #-12]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L71:
	.align	2
.L70:
	.word	type_ptr_cache
	.word	type_ptr_cache_count
	.size	type_ptr, .-type_ptr
	.align	2
	.global	type_func
	.syntax unified
	.arm
	.fpu softvfp
	.type	type_func, %function
type_func:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r0, #28
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L73
	ldr	r3, [fp, #-8]
	mov	r2, #5
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #16]
.L73:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	type_func, .-type_func
	.comm	type_array_cache,2800,4
	.global	type_array_cache_count
	.bss
	.align	2
	.type	type_array_cache_count, %object
	.size	type_array_cache_count, 4
type_array_cache_count:
	.space	4
	.text
	.align	2
	.global	type_array
	.syntax unified
	.arm
	.fpu softvfp
	.type	type_array, %function
type_array:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-12]
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L76
.L79:
	ldr	r1, .L82
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	add	r3, r3, #8
	ldr	r3, [r3]
	ldr	r2, [fp, #-16]
	cmp	r2, r3
	bne	.L77
	ldr	r1, .L82
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	add	r3, r3, #12
	ldr	r3, [r3]
	ldr	r2, [fp, #-20]
	cmp	r2, r3
	bne	.L77
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L82
	add	r3, r3, r2
	str	r3, [fp, #-12]
	b	.L78
.L77:
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L76:
	ldr	r3, .L82+4
	ldr	r3, [r3]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	blt	.L79
.L78:
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	bne	.L80
	ldr	r3, .L82+4
	ldr	r2, [r3]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L82
	add	r3, r3, r2
	str	r3, [fp, #-12]
	ldr	r3, .L82+4
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L82+4
	str	r3, [r2]
	ldr	r3, [fp, #-12]
	mov	r2, #4
	str	r2, [r3]
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	ldr	r2, [fp, #-20]
	mul	r2, r3, r2
	ldr	r3, [fp, #-12]
	str	r2, [r3, #4]
.L80:
	ldr	r3, [fp, #-12]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L83:
	.align	2
.L82:
	.word	type_array_cache
	.word	type_array_cache_count
	.size	type_array, .-type_array
	.comm	type_struct_cache,2800,4
	.global	type_struct_cache_count
	.bss
	.align	2
	.type	type_struct_cache_count, %object
	.size	type_struct_cache_count, 4
type_struct_cache_count:
	.space	4
	.section	.rodata
	.align	2
.LC3:
	.ascii	"Cannot redefine a structure\000"
	.align	2
.LC4:
	.ascii	"Invalid structure member type\000"
	.align	2
.LC5:
	.ascii	"the_stack_data/56122.c\000"
	.align	2
.LC6:
	.ascii	"res->size\000"
	.text
	.align	2
	.global	type_struct
	.syntax unified
	.arm
	.fpu softvfp
	.type	type_struct, %function
type_struct:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-24]
	str	r1, [fp, #-28]
	mov	r3, #0
	str	r3, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L85
.L88:
	ldr	r1, .L98
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	add	r3, r3, #20
	ldr	r3, [r3]
	ldr	r2, [fp, #-24]
	cmp	r2, r3
	bne	.L86
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L98
	add	r3, r3, r2
	str	r3, [fp, #-16]
	b	.L87
.L86:
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L85:
	ldr	r3, .L98+4
	ldr	r3, [r3]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	blt	.L88
.L87:
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bne	.L89
	ldr	r3, .L98+4
	ldr	r2, [r3]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L98
	add	r3, r3, r2
	str	r3, [fp, #-16]
	ldr	r3, .L98+4
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L98+4
	str	r3, [r2]
	ldr	r3, [fp, #-16]
	mov	r2, #6
	str	r2, [r3]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #20]
	b	.L90
.L89:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	beq	.L90
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	beq	.L90
	ldr	r0, .L98+8
	bl	fatal
.L90:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	bne	.L91
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	beq	.L91
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #24]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #4]
	ldr	r3, [fp, #-28]
	str	r3, [fp, #-12]
	b	.L92
.L96:
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	cmp	r3, #0
	bne	.L93
	ldr	r0, .L98+12
	bl	fatal
.L93:
	ldr	r3, [fp, #-16]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r1, r3, #0
	and	r3, r3, #3
	and	r1, r1, #3
	rsbpl	r3, r1, #0
	cmp	r3, #0
	ble	.L94
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #4]
	ldr	r1, [r3, #4]
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r0, r3, #0
	and	r3, r3, #3
	and	r0, r0, #3
	rsbpl	r3, r0, #0
	rsb	r3, r3, #4
	add	r3, r1, r3
	b	.L95
.L94:
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
.L95:
	add	r2, r3, r2
	ldr	r3, [fp, #-16]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-12]
.L92:
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	bne	.L96
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #0
	bne	.L91
	ldr	r3, .L98+16
	mov	r2, #460
	ldr	r1, .L98+20
	ldr	r0, .L98+24
	bl	__assert_fail
.L91:
	ldr	r3, [fp, #-16]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L99:
	.align	2
.L98:
	.word	type_struct_cache
	.word	type_struct_cache_count
	.word	.LC3
	.word	.LC4
	.word	__PRETTY_FUNCTION__.5452
	.word	.LC5
	.word	.LC6
	.size	type_struct, .-type_struct
	.align	2
	.global	get_struct_member
	.syntax unified
	.arm
	.fpu softvfp
	.type	get_struct_member, %function
get_struct_member:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	beq	.L101
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #24]
	str	r3, [fp, #-8]
	b	.L102
.L104:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	ldr	r2, [fp, #-20]
	cmp	r2, r3
	bne	.L103
	ldr	r3, [fp, #-8]
	str	r3, [fp, #-12]
	b	.L101
.L103:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-8]
.L102:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L104
.L101:
	ldr	r3, [fp, #-12]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
	.size	get_struct_member, .-get_struct_member
	.align	2
	.global	get_struct_member_offset
	.syntax unified
	.arm
	.fpu softvfp
	.type	get_struct_member_offset, %function
get_struct_member_offset:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mvn	r3, #0
	str	r3, [fp, #-12]
	ldr	r1, [fp, #-20]
	ldr	r0, [fp, #-16]
	bl	get_struct_member
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L107
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-12]
.L107:
	ldr	r3, [fp, #-12]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	get_struct_member_offset, .-get_struct_member_offset
	.comm	label_table,8000,4
	.global	label_table_count
	.bss
	.align	2
	.type	label_table_count, %object
	.size	label_table_count, 4
label_table_count:
	.space	4
	.text
	.align	2
	.global	label_add
	.syntax unified
	.arm
	.fpu softvfp
	.type	label_add, %function
label_add:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, .L111
	ldr	r3, [r3]
	lsl	r3, r3, #3
	ldr	r2, .L111+4
	add	r3, r3, r2
	str	r3, [fp, #-8]
	ldr	r3, .L111
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L111
	str	r3, [r2]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L112:
	.align	2
.L111:
	.word	label_table_count
	.word	label_table
	.size	label_add, .-label_add
	.align	2
	.global	label_get
	.syntax unified
	.arm
	.fpu softvfp
	.type	label_get, %function
label_get:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-12]
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L114
.L117:
	ldr	r2, .L119
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r3, [r3, #4]
	ldr	r2, [fp, #-16]
	cmp	r2, r3
	bne	.L115
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #3
	ldr	r2, .L119
	add	r3, r3, r2
	str	r3, [fp, #-12]
	b	.L116
.L115:
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L114:
	ldr	r3, .L119+4
	ldr	r3, [r3]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	blt	.L117
.L116:
	ldr	r3, [fp, #-12]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L120:
	.align	2
.L119:
	.word	label_table
	.word	label_table_count
	.size	label_get, .-label_get
	.align	2
	.global	label_get_or_add
	.syntax unified
	.arm
	.fpu softvfp
	.type	label_get_or_add, %function
label_get_or_add:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r0, [fp, #-16]
	bl	label_get
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L122
	ldr	r0, [fp, #-16]
	bl	label_add
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3]
.L122:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	label_get_or_add, .-label_get_or_add
	.comm	sym_table,28000,4
	.global	sym_table_count
	.bss
	.align	2
	.type	sym_table_count, %object
	.size	sym_table_count, 4
sym_table_count:
	.space	4
	.text
	.align	2
	.global	sym_add
	.syntax unified
	.arm
	.fpu softvfp
	.type	sym_add, %function
sym_add:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, .L126
	ldr	r2, [r3]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L126+4
	add	r3, r3, r2
	str	r3, [fp, #-8]
	ldr	r3, .L126
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L126
	str	r3, [r2]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #16]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #20]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #24]
	ldr	r3, [fp, #-8]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L127:
	.align	2
.L126:
	.word	sym_table_count
	.word	sym_table
	.size	sym_add, .-sym_add
	.align	2
	.global	sym_get
	.syntax unified
	.arm
	.fpu softvfp
	.type	sym_get, %function
sym_get:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-12]
	ldr	r3, .L134
	ldr	r3, [r3]
	sub	r3, r3, #1
	str	r3, [fp, #-8]
	b	.L129
.L132:
	ldr	r1, .L134+4
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	ldr	r3, [r3]
	ldr	r2, [fp, #-16]
	cmp	r2, r3
	bne	.L130
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L134+4
	add	r3, r3, r2
	str	r3, [fp, #-12]
	b	.L131
.L130:
	ldr	r3, [fp, #-8]
	sub	r3, r3, #1
	str	r3, [fp, #-8]
.L129:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bge	.L132
.L131:
	ldr	r3, [fp, #-12]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L135:
	.align	2
.L134:
	.word	sym_table_count
	.word	sym_table
	.size	sym_get, .-sym_get
	.align	2
	.global	sym_add_func_param
	.syntax unified
	.arm
	.fpu softvfp
	.type	sym_add_func_param, %function
sym_add_func_param:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #28
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	str	r2, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, .L138
	ldr	r2, [r3]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L138+4
	add	r3, r3, r2
	str	r3, [fp, #-8]
	ldr	r3, .L138
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L138
	str	r3, [r2]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #16]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #20]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #24]
	ldr	r3, [fp, #-8]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L139:
	.align	2
.L138:
	.word	sym_table_count
	.word	sym_table
	.size	sym_add_func_param, .-sym_add_func_param
	.align	2
	.global	init_builtin_sym
	.syntax unified
	.arm
	.fpu softvfp
	.type	init_builtin_sym, %function
init_builtin_sym:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
	.size	init_builtin_sym, .-init_builtin_sym
	.align	2
	.global	sym_reset
	.syntax unified
	.arm
	.fpu softvfp
	.type	sym_reset, %function
sym_reset:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	ldr	r3, .L142
	mov	r2, #0
	str	r2, [r3]
	bl	init_builtin_sym
	nop
	pop	{fp, pc}
.L143:
	.align	2
.L142:
	.word	sym_table_count
	.size	sym_reset, .-sym_reset
	.align	2
	.global	dup_expr
	.syntax unified
	.arm
	.fpu softvfp
	.type	dup_expr, %function
dup_expr:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	mov	r2, #32
	ldr	r1, [fp, #-16]
	ldr	r0, [fp, #-8]
	bl	memcpy
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	dup_expr, .-dup_expr
	.align	2
	.global	make_expr_intlit
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_expr_intlit, %function
make_expr_intlit:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L147
	ldr	r3, [fp, #-8]
	mov	r2, #1
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L147:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_expr_intlit, .-make_expr_intlit
	.align	2
	.global	make_expr_id
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_expr_id, %function
make_expr_id:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L150
	ldr	r3, [fp, #-8]
	mov	r2, #2
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L150:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_expr_id, .-make_expr_id
	.align	2
	.global	make_expr_cast
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_expr_cast, %function
make_expr_cast:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L153
	ldr	r3, [fp, #-8]
	mov	r2, #10
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #24]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L153:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_expr_cast, .-make_expr_cast
	.align	2
	.global	make_expr_member_access
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_expr_member_access, %function
make_expr_member_access:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L156
	ldr	r3, [fp, #-8]
	mov	r2, #5
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L156:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_expr_member_access, .-make_expr_member_access
	.align	2
	.global	make_expr_member_access_ptr
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_expr_member_access_ptr, %function
make_expr_member_access_ptr:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L159
	ldr	r3, [fp, #-8]
	mov	r2, #6
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L159:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_expr_member_access_ptr, .-make_expr_member_access_ptr
	.align	2
	.global	make_expr_unary
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_expr_unary, %function
make_expr_unary:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L162
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #16]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L162:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_expr_unary, .-make_expr_unary
	.align	2
	.global	make_expr_binary
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_expr_binary, %function
make_expr_binary:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	str	r2, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L165
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #16]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L165:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_expr_binary, .-make_expr_binary
	.align	2
	.global	make_expr_ternary
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_expr_ternary, %function
make_expr_ternary:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	str	r2, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L168
	ldr	r3, [fp, #-8]
	mov	r2, #24
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #16]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L168:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_expr_ternary, .-make_expr_ternary
	.align	2
	.global	make_expr_compound
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_expr_compound, %function
make_expr_compound:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L171
	ldr	r3, [fp, #-8]
	mov	r2, #26
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L171:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_expr_compound, .-make_expr_compound
	.section	.rodata
	.align	2
.LC7:
	.ascii	"%d - %s => \000"
	.text
	.align	2
	.global	print_sym_table
	.syntax unified
	.arm
	.fpu softvfp
	.type	print_sym_table, %function
print_sym_table:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	mov	r3, #0
	str	r3, [fp, #-12]
	b	.L174
.L175:
	ldr	r2, [fp, #-12]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L176
	add	r3, r3, r2
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	mov	r2, r3
	ldr	r1, [fp, #-12]
	ldr	r0, .L176+4
	bl	printf
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	print_type
	mov	r0, #10
	bl	putchar
	ldr	r3, [fp, #-12]
	add	r3, r3, #1
	str	r3, [fp, #-12]
.L174:
	ldr	r3, .L176+8
	ldr	r3, [r3]
	ldr	r2, [fp, #-12]
	cmp	r2, r3
	blt	.L175
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	print_type
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L177:
	.align	2
.L176:
	.word	sym_table
	.word	.LC7
	.word	sym_table_count
	.size	print_sym_table, .-print_sym_table
	.section	.rodata
	.align	2
.LC8:
	.ascii	"%s\000"
	.align	2
.LC9:
	.ascii	"%d\000"
	.align	2
.LC10:
	.ascii	"(call %s)\000"
	.align	2
.LC11:
	.ascii	"])\000"
	.align	2
.LC12:
	.ascii	".%s)\000"
	.align	2
.LC13:
	.ascii	"->%s)\000"
	.align	2
.LC14:
	.ascii	"(inc \000"
	.align	2
.LC15:
	.ascii	"(dec \000"
	.align	2
.LC16:
	.ascii	"(cast (\000"
	.align	2
.LC17:
	.ascii	") \000"
	.align	2
.LC18:
	.ascii	"(deref \000"
	.align	2
.LC19:
	.ascii	"(addrof \000"
	.align	2
.LC20:
	.ascii	"(-\000"
	.align	2
.LC21:
	.ascii	"*\000"
	.align	2
.LC22:
	.ascii	"/\000"
	.align	2
.LC23:
	.ascii	"%\000"
	.align	2
.LC24:
	.ascii	"+\000"
	.align	2
.LC25:
	.ascii	"-\000"
	.align	2
.LC26:
	.ascii	"<\000"
	.align	2
.LC27:
	.ascii	"<=\000"
	.align	2
.LC28:
	.ascii	">\000"
	.align	2
.LC29:
	.ascii	">=\000"
	.align	2
.LC30:
	.ascii	" ? \000"
	.align	2
.LC31:
	.ascii	" : \000"
	.align	2
.LC32:
	.ascii	"=\000"
	.align	2
.LC33:
	.ascii	", \000"
	.align	2
.LC34:
	.ascii	"0\000"
	.align	2
.LC35:
	.ascii	"(%s \000"
	.text
	.align	2
	.global	print_expr
	.syntax unified
	.arm
	.fpu softvfp
	.type	print_expr, %function
print_expr:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	sub	r3, r3, #1
	cmp	r3, #25
	ldrls	pc, [pc, r3, asl #2]
	b	.L210
.L181:
	.word	.L204
	.word	.L203
	.word	.L202
	.word	.L201
	.word	.L200
	.word	.L199
	.word	.L198
	.word	.L197
	.word	.L196
	.word	.L195
	.word	.L194
	.word	.L193
	.word	.L210
	.word	.L192
	.word	.L191
	.word	.L190
	.word	.L189
	.word	.L188
	.word	.L187
	.word	.L186
	.word	.L185
	.word	.L184
	.word	.L210
	.word	.L183
	.word	.L182
	.word	.L180
.L203:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L212
	bl	printf
	b	.L205
.L204:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, .L212+4
	bl	printf
	b	.L205
.L202:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L212+8
	bl	printf
	b	.L205
.L201:
	mov	r0, #40
	bl	putchar
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #91
	bl	putchar
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	print_expr
	ldr	r0, .L212+12
	bl	printf
	b	.L205
.L200:
	mov	r0, #40
	bl	putchar
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L212+16
	bl	printf
	b	.L205
.L199:
	mov	r0, #40
	bl	putchar
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L212+20
	bl	printf
	b	.L205
.L198:
	ldr	r0, .L212+24
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #41
	bl	putchar
	b	.L205
.L197:
	ldr	r0, .L212+28
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #41
	bl	putchar
	b	.L205
.L195:
	ldr	r0, .L212+32
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #24]
	mov	r0, r3
	bl	print_type
	ldr	r0, .L212+36
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #41
	bl	putchar
	b	.L205
.L194:
	ldr	r0, .L212+40
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #41
	bl	putchar
	b	.L205
.L193:
	ldr	r0, .L212+44
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #41
	bl	putchar
	b	.L205
.L196:
	ldr	r0, .L212+48
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #41
	bl	putchar
	b	.L205
.L192:
	ldr	r3, .L212+52
	str	r3, [fp, #-8]
	b	.L205
.L191:
	ldr	r3, .L212+56
	str	r3, [fp, #-8]
	b	.L205
.L190:
	ldr	r3, .L212+60
	str	r3, [fp, #-8]
	b	.L205
.L189:
	ldr	r3, .L212+64
	str	r3, [fp, #-8]
	b	.L205
.L188:
	ldr	r3, .L212+68
	str	r3, [fp, #-8]
	b	.L205
.L187:
	ldr	r3, .L212+72
	str	r3, [fp, #-8]
	b	.L205
.L186:
	ldr	r3, .L212+76
	str	r3, [fp, #-8]
	b	.L205
.L185:
	ldr	r3, .L212+80
	str	r3, [fp, #-8]
	b	.L205
.L184:
	ldr	r3, .L212+84
	str	r3, [fp, #-8]
	b	.L205
.L183:
	mov	r0, #40
	bl	putchar
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	ldr	r0, .L212+88
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	print_expr
	ldr	r0, .L212+92
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	print_expr
	mov	r0, #41
	bl	putchar
	b	.L205
.L182:
	ldr	r3, .L212+96
	str	r3, [fp, #-8]
	b	.L205
.L180:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-16]
	b	.L206
.L208:
	ldr	r0, [fp, #-16]
	bl	print_expr
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #28]
	cmp	r3, #0
	beq	.L207
	ldr	r0, .L212+100
	bl	printf
.L207:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-16]
.L206:
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bne	.L208
	b	.L205
.L210:
	ldr	r3, .L212+104
	ldr	r2, .L212+108
	ldr	r1, .L212+112
	ldr	r0, .L212+116
	bl	__assert_fail
.L205:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L211
	ldr	r1, [fp, #-8]
	ldr	r0, .L212+120
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #32
	bl	putchar
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	print_expr
	mov	r0, #41
	bl	putchar
.L211:
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L213:
	.align	2
.L212:
	.word	.LC8
	.word	.LC9
	.word	.LC10
	.word	.LC11
	.word	.LC12
	.word	.LC13
	.word	.LC14
	.word	.LC15
	.word	.LC16
	.word	.LC17
	.word	.LC18
	.word	.LC19
	.word	.LC20
	.word	.LC21
	.word	.LC22
	.word	.LC23
	.word	.LC24
	.word	.LC25
	.word	.LC26
	.word	.LC27
	.word	.LC28
	.word	.LC29
	.word	.LC30
	.word	.LC31
	.word	.LC32
	.word	.LC33
	.word	__PRETTY_FUNCTION__.5659
	.word	1029
	.word	.LC5
	.word	.LC34
	.word	.LC35
	.size	print_expr, .-print_expr
	.align	2
	.global	make_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_decl, %function
make_decl:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #8
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L215
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
.L215:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_decl, .-make_decl
	.section	.rodata
	.align	2
.LC36:
	.ascii	"void\000"
	.align	2
.LC37:
	.ascii	"char\000"
	.align	2
.LC38:
	.ascii	"int\000"
	.align	2
.LC39:
	.ascii	"ptr to \000"
	.align	2
.LC40:
	.ascii	"array of %d of \000"
	.align	2
.LC41:
	.ascii	"struct %s\000"
	.align	2
.LC42:
	.ascii	"func (\000"
	.align	2
.LC43:
	.ascii	") => \000"
	.align	2
.LC44:
	.ascii	"Invalid type to print\000"
	.text
	.align	2
	.global	print_type
	.syntax unified
	.arm
	.fpu softvfp
	.type	print_type, %function
print_type:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	bl	type_void
	mov	r2, r0
	ldr	r3, [fp, #-16]
	cmp	r3, r2
	bne	.L218
	ldr	r0, .L230
	bl	printf
	b	.L229
.L218:
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-16]
	cmp	r3, r2
	bne	.L220
	ldr	r0, .L230+4
	bl	printf
	b	.L229
.L220:
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-16]
	cmp	r3, r2
	bne	.L221
	ldr	r0, .L230+8
	bl	printf
	b	.L229
.L221:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L222
	ldr	r0, .L230+12
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	print_type
	b	.L229
.L222:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L223
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, .L230+16
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	print_type
	b	.L229
.L223:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #6
	bne	.L224
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #20]
	mov	r1, r3
	ldr	r0, .L230+20
	bl	printf
	b	.L229
.L224:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #5
	bne	.L225
	ldr	r0, .L230+24
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-8]
	b	.L226
.L228:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	print_type
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #8]
	cmp	r3, #0
	beq	.L227
	ldr	r0, .L230+28
	bl	printf
.L227:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-8]
.L226:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L228
	ldr	r0, .L230+32
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	print_type
	b	.L229
.L225:
	ldr	r0, .L230+36
	bl	fatal
.L229:
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L231:
	.align	2
.L230:
	.word	.LC36
	.word	.LC37
	.word	.LC38
	.word	.LC39
	.word	.LC40
	.word	.LC41
	.word	.LC42
	.word	.LC33
	.word	.LC43
	.word	.LC44
	.size	print_type, .-print_type
	.section	.rodata
	.align	2
.LC45:
	.ascii	"(var %s \000"
	.text
	.align	2
	.global	print_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	print_decl, %function
print_decl:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, .L233
	bl	printf
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	mov	r0, r3
	bl	print_type
	mov	r0, #41
	bl	putchar
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L234:
	.align	2
.L233:
	.word	.LC45
	.size	print_decl, .-print_decl
	.align	2
	.global	make_stmt
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_stmt, %function
make_stmt:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L236
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
.L236:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_stmt, .-make_stmt
	.align	2
	.global	dup_stmt
	.syntax unified
	.arm
	.fpu softvfp
	.type	dup_stmt, %function
dup_stmt:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r0, #32
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	mov	r2, #32
	ldr	r1, [fp, #-16]
	ldr	r0, [fp, #-8]
	bl	memcpy
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	dup_stmt, .-dup_stmt
	.align	2
	.global	make_stmt_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_stmt_decl, %function
make_stmt_decl:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #0
	bl	make_stmt
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L241
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #4]
.L241:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_stmt_decl, .-make_stmt_decl
	.align	2
	.global	make_stmt_expr
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_stmt_expr, %function
make_stmt_expr:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L244
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #4]
.L244:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_stmt_expr, .-make_stmt_expr
	.align	2
	.global	make_stmt_if
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_stmt_if, %function
make_stmt_if:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	str	r2, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #6
	bl	make_stmt
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L247
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #24]
.L247:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_stmt_if, .-make_stmt_if
	.align	2
	.global	make_stmt_while
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_stmt_while, %function
make_stmt_while:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #7
	bl	make_stmt
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L250
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #24]
.L250:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_stmt_while, .-make_stmt_while
	.align	2
	.global	make_stmt_for
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_stmt_for, %function
make_stmt_for:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	str	r2, [fp, #-24]
	str	r3, [fp, #-28]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #8
	bl	make_stmt
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L253
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #16]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #24]
.L253:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_stmt_for, .-make_stmt_for
	.section	.rodata
	.align	2
.LC46:
	.ascii	"(\000"
	.align	2
.LC47:
	.ascii	"  \000"
	.align	2
.LC48:
	.ascii	"(ret \000"
	.align	2
.LC49:
	.ascii	"(label %s)\000"
	.align	2
.LC50:
	.ascii	"(goto %s)\000"
	.align	2
.LC51:
	.ascii	"(if \000"
	.align	2
.LC52:
	.ascii	" else \000"
	.align	2
.LC53:
	.ascii	" goto %s)\000"
	.align	2
.LC54:
	.ascii	"(while \000"
	.align	2
.LC55:
	.ascii	"(for \000"
	.align	2
.LC56:
	.ascii	"Invalid statement to print\000"
	.text
	.align	2
	.global	print_stmt
	.syntax unified
	.arm
	.fpu softvfp
	.type	print_stmt, %function
print_stmt:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #8
	ldrls	pc, [pc, r3, asl #2]
	b	.L256
.L258:
	.word	.L266
	.word	.L265
	.word	.L264
	.word	.L263
	.word	.L262
	.word	.L261
	.word	.L260
	.word	.L259
	.word	.L257
.L266:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	print_decl
	b	.L267
.L265:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	print_expr
	b	.L267
.L264:
	ldr	r0, .L274
	bl	puts
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-8]
	b	.L268
.L269:
	ldr	r0, .L274+4
	bl	printf
	ldr	r0, [fp, #-8]
	bl	print_stmt
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-8]
.L268:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L269
	mov	r0, #41
	bl	putchar
	b	.L267
.L263:
	ldr	r0, .L274+8
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #0
	beq	.L270
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	print_expr
.L270:
	mov	r0, #41
	bl	putchar
	b	.L267
.L262:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, .L274+12
	bl	printf
	b	.L267
.L261:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, .L274+16
	bl	printf
	b	.L267
.L260:
	ldr	r0, .L274+20
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #20]
	cmp	r3, #0
	beq	.L271
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	print_stmt
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	beq	.L272
	ldr	r0, .L274+24
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #24]
	mov	r0, r3
	bl	print_stmt
.L272:
	mov	r0, #41
	bl	putchar
	b	.L267
.L271:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, .L274+28
	bl	printf
	b	.L267
.L259:
	ldr	r0, .L274+32
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #32
	bl	putchar
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	print_stmt
	mov	r0, #41
	bl	putchar
	b	.L267
.L257:
	ldr	r0, .L274+36
	bl	printf
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	print_expr
	mov	r0, #32
	bl	putchar
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_expr
	mov	r0, #32
	bl	putchar
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	print_expr
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	print_stmt
	mov	r0, #41
	bl	putchar
	b	.L267
.L256:
	ldr	r0, .L274+40
	bl	fatal
	nop
.L267:
	mov	r0, #10
	bl	putchar
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L275:
	.align	2
.L274:
	.word	.LC46
	.word	.LC47
	.word	.LC48
	.word	.LC49
	.word	.LC50
	.word	.LC51
	.word	.LC52
	.word	.LC53
	.word	.LC54
	.word	.LC55
	.word	.LC56
	.size	print_stmt, .-print_stmt
	.align	2
	.global	make_glob_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_glob_decl, %function
make_glob_decl:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	mov	r0, #20
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L277
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #4]
.L277:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_glob_decl, .-make_glob_decl
	.align	2
	.global	make_glob_decl_var
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_glob_decl_var, %function
make_glob_decl_var:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	mov	r0, #0
	bl	make_glob_decl
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L280
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #12]
.L280:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_glob_decl_var, .-make_glob_decl_var
	.align	2
	.global	make_glob_decl_func
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_glob_decl_func, %function
make_glob_decl_func:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	str	r2, [fp, #-24]
	mov	r0, #1
	bl	make_glob_decl
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L283
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #16]
.L283:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	make_glob_decl_func, .-make_glob_decl_func
	.section	.rodata
	.align	2
.LC57:
	.ascii	"(func %s \000"
	.align	2
.LC58:
	.ascii	")\000"
	.align	2
.LC59:
	.ascii	"Invalid global declaration to print\000"
	.text
	.align	2
	.global	print_glob_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	print_glob_decl, %function
print_glob_decl:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L286
	cmp	r3, #1
	beq	.L287
	b	.L291
.L286:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L292
	bl	printf
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	print_type
	mov	r0, #41
	bl	putchar
	b	.L289
.L287:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L292+4
	bl	printf
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	print_type
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #16]
	cmp	r3, #0
	beq	.L290
	mov	r0, #10
	bl	putchar
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	print_stmt
.L290:
	ldr	r0, .L292+8
	bl	puts
	b	.L289
.L291:
	ldr	r0, .L292+12
	bl	fatal
	nop
.L289:
	mov	r0, #10
	bl	putchar
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L293:
	.align	2
.L292:
	.word	.LC45
	.word	.LC57
	.word	.LC58
	.word	.LC59
	.size	print_glob_decl, .-print_glob_decl
	.align	2
	.global	print_unit
	.syntax unified
	.arm
	.fpu softvfp
	.type	print_unit, %function
print_unit:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-8]
	b	.L295
.L296:
	ldr	r0, [fp, #-8]
	bl	print_glob_decl
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-8]
.L295:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L296
	nop
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	print_unit, .-print_unit
	.comm	source,4,4
	.comm	source_line,4,4
	.comm	func_var_offset,4,4
	.comm	kword_void,4,4
	.comm	kword_char,4,4
	.comm	kword_int,4,4
	.comm	kword_struct,4,4
	.comm	kword_return,4,4
	.comm	kword_goto,4,4
	.comm	kword_if,4,4
	.comm	kword_else,4,4
	.comm	kword_while,4,4
	.comm	kword_for,4,4
	.section	.rodata
	.align	2
.LC60:
	.ascii	"[!] SYNTAX ERROR: Line %d: \000"
	.align	2
.LC61:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	syntax_error
	.syntax unified
	.arm
	.fpu softvfp
	.type	syntax_error, %function
syntax_error:
	@ args = 4, pretend = 16, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 1
	push	{r0, r1, r2, r3}
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	ldr	r3, [fp, #4]
	str	r3, [fp, #-16]
	ldr	r3, .L299
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r3, .L299+4
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L299+8
	bl	printf
	add	r3, fp, #8
	str	r3, [fp, #-12]
	ldr	r1, [fp, #-12]
	ldr	r0, [fp, #-16]
	bl	vprintf
	mov	r0, #10
	bl	putchar
	nop
	ldr	r3, .L299
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L298
	bl	__stack_chk_fail
.L298:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, lr}
	add	sp, sp, #16
	bx	lr
.L300:
	.align	2
.L299:
	.word	.LC61
	.word	source_line
	.word	.LC60
	.size	syntax_error, .-syntax_error
	.section	.rodata
	.align	2
.LC62:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	syntax_fatal
	.syntax unified
	.arm
	.fpu softvfp
	.type	syntax_fatal, %function
syntax_fatal:
	@ args = 4, pretend = 16, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 1
	push	{r0, r1, r2, r3}
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	ldr	r3, [fp, #4]
	str	r3, [fp, #-16]
	ldr	r3, .L303
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r3, .L303+4
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L303+8
	bl	printf
	add	r3, fp, #8
	str	r3, [fp, #-12]
	ldr	r1, [fp, #-12]
	ldr	r0, [fp, #-16]
	bl	vprintf
	mov	r0, #10
	bl	putchar
	mov	r0, #1
	bl	exit
.L304:
	.align	2
.L303:
	.word	.LC62
	.word	source_line
	.word	.LC60
	.size	syntax_fatal, .-syntax_fatal
	.section	.rodata
	.align	2
.LC63:
	.ascii	"struct\000"
	.align	2
.LC64:
	.ascii	"return\000"
	.align	2
.LC65:
	.ascii	"goto\000"
	.align	2
.LC66:
	.ascii	"if\000"
	.align	2
.LC67:
	.ascii	"else\000"
	.align	2
.LC68:
	.ascii	"while\000"
	.align	2
.LC69:
	.ascii	"for\000"
	.text
	.align	2
	.global	parser_init
	.syntax unified
	.arm
	.fpu softvfp
	.type	parser_init, %function
parser_init:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	str	r0, [fp, #-8]
	ldr	r2, .L306
	ldr	r3, [fp, #-8]
	str	r3, [r2]
	ldr	r3, .L306+4
	mov	r2, #1
	str	r2, [r3]
	ldr	r0, .L306+8
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+12
	str	r3, [r2]
	ldr	r0, .L306+16
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+20
	str	r3, [r2]
	ldr	r0, .L306+24
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+28
	str	r3, [r2]
	ldr	r0, .L306+32
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+36
	str	r3, [r2]
	ldr	r0, .L306+40
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+44
	str	r3, [r2]
	ldr	r0, .L306+48
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+52
	str	r3, [r2]
	ldr	r0, .L306+56
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+60
	str	r3, [r2]
	ldr	r0, .L306+64
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+68
	str	r3, [r2]
	ldr	r0, .L306+72
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+76
	str	r3, [r2]
	ldr	r0, .L306+80
	bl	str_intern
	mov	r3, r0
	ldr	r2, .L306+84
	str	r3, [r2]
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L307:
	.align	2
.L306:
	.word	source
	.word	source_line
	.word	.LC36
	.word	kword_void
	.word	.LC37
	.word	kword_char
	.word	.LC38
	.word	kword_int
	.word	.LC63
	.word	kword_struct
	.word	.LC64
	.word	kword_return
	.word	.LC65
	.word	kword_goto
	.word	.LC66
	.word	kword_if
	.word	.LC67
	.word	kword_else
	.word	.LC68
	.word	kword_while
	.word	.LC69
	.word	kword_for
	.size	parser_init, .-parser_init
	.comm	putback,12,4
	.align	2
	.global	tok_putback
	.syntax unified
	.arm
	.fpu softvfp
	.type	tok_putback, %function
tok_putback:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	sub	r3, fp, #16
	stm	r3, {r0, r1, r2}
	ldr	r3, .L309
	mov	ip, r3
	sub	r3, fp, #16
	ldm	r3, {r0, r1, r2}
	stm	ip, {r0, r1, r2}
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L310:
	.align	2
.L309:
	.word	putback
	.size	tok_putback, .-tok_putback
	.section	.rodata
	.align	2
.LC70:
	.ascii	"buffsize < MAX_ID_LEN\000"
	.align	2
.LC71:
	.ascii	"Invalid token\000"
	.align	2
.LC72:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	_tok_next
	.syntax unified
	.arm
	.fpu softvfp
	.type	_tok_next, %function
_tok_next:
	@ args = 0, pretend = 0, frame = 72
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #72
	str	r0, [fp, #-72]
	str	r1, [fp, #-76]
	ldr	r3, .L371
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r3, .L371+4
	ldr	r3, [r3]
	str	r3, [fp, #-68]
	ldr	r3, .L371+8
	ldr	r3, [r3]
	str	r3, [fp, #-64]
	ldr	r3, .L371+12
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L312
	ldr	r2, .L371+12
	sub	r3, fp, #56
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-76]
	cmp	r3, #0
	beq	.L313
	ldr	r3, .L371+12
	mov	r2, #0
	str	r2, [r3]
.L313:
	ldr	r3, [fp, #-72]
	mov	ip, r3
	sub	r3, fp, #56
	ldm	r3, {r0, r1, r2}
	stm	ip, {r0, r1, r2}
	b	.L311
.L312:
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #0
	bne	.L317
	mov	r3, #0
	str	r3, [fp, #-56]
	b	.L316
.L319:
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #10
	bne	.L318
	ldr	r3, [fp, #-64]
	add	r3, r3, #1
	str	r3, [fp, #-64]
.L318:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
.L317:
	bl	__ctype_b_loc
	mov	r3, r0
	ldr	r2, [r3]
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	lsl	r3, r3, #1
	add	r3, r2, r3
	ldrh	r3, [r3]
	and	r3, r3, #8192
	cmp	r3, #0
	bne	.L319
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	sub	r3, r3, #37
	cmp	r3, #88
	ldrls	pc, [pc, r3, asl #2]
	b	.L320
.L322:
	.word	.L343
	.word	.L342
	.word	.L320
	.word	.L341
	.word	.L340
	.word	.L339
	.word	.L338
	.word	.L337
	.word	.L336
	.word	.L335
	.word	.L334
	.word	.L333
	.word	.L333
	.word	.L333
	.word	.L333
	.word	.L333
	.word	.L333
	.word	.L333
	.word	.L333
	.word	.L333
	.word	.L333
	.word	.L332
	.word	.L331
	.word	.L330
	.word	.L329
	.word	.L328
	.word	.L327
	.word	.L320
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L326
	.word	.L320
	.word	.L325
	.word	.L320
	.word	.L324
	.word	.L320
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L324
	.word	.L323
	.word	.L320
	.word	.L321
.L324:
	mov	r3, #0
	str	r3, [fp, #-60]
	mov	r3, #1
	str	r3, [fp, #-56]
	b	.L344
.L345:
	ldr	r3, [fp, #-60]
	add	r2, r3, #1
	str	r2, [fp, #-60]
	ldr	r2, [fp, #-68]
	ldrb	r2, [r2]	@ zero_extendqisi2
	sub	r1, fp, #4
	add	r3, r1, r3
	strb	r2, [r3, #-40]
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	ldr	r3, [fp, #-60]
	cmp	r3, #32
	ble	.L344
	ldr	r3, .L371+16
	ldr	r2, .L371+20
	ldr	r1, .L371+24
	ldr	r0, .L371+28
	bl	__assert_fail
.L344:
	bl	__ctype_b_loc
	mov	r3, r0
	ldr	r2, [r3]
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	lsl	r3, r3, #1
	add	r3, r2, r3
	ldrh	r3, [r3]
	and	r3, r3, #8
	cmp	r3, #0
	bne	.L345
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #95
	beq	.L345
	sub	r2, fp, #44
	ldr	r3, [fp, #-60]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	sub	r3, fp, #44
	mov	r0, r3
	bl	str_intern
	mov	r3, r0
	str	r3, [fp, #-48]
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+32
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L346
	mov	r3, #29
	str	r3, [fp, #-56]
	b	.L366
.L346:
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+36
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L348
	mov	r3, #30
	str	r3, [fp, #-56]
	b	.L366
.L348:
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+40
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L349
	mov	r3, #31
	str	r3, [fp, #-56]
	b	.L366
.L349:
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+44
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L350
	mov	r3, #32
	str	r3, [fp, #-56]
	b	.L366
.L350:
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+48
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L351
	mov	r3, #33
	str	r3, [fp, #-56]
	b	.L366
.L351:
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+52
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L352
	mov	r3, #34
	str	r3, [fp, #-56]
	b	.L366
.L352:
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+56
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L353
	mov	r3, #35
	str	r3, [fp, #-56]
	b	.L366
.L353:
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+60
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L354
	mov	r3, #36
	str	r3, [fp, #-56]
	b	.L366
.L354:
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+64
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L355
	mov	r3, #37
	str	r3, [fp, #-56]
	b	.L366
.L355:
	ldr	r2, [fp, #-48]
	ldr	r3, .L371+68
	ldr	r3, [r3]
	cmp	r2, r3
	bne	.L366
	mov	r3, #38
	str	r3, [fp, #-56]
	b	.L366
.L333:
	mov	r3, #2
	str	r3, [fp, #-56]
	mov	r3, #0
	str	r3, [fp, #-52]
	b	.L356
.L357:
	ldr	r2, [fp, #-52]
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #1
	mov	r2, r3
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	sub	r3, r3, #48
	add	r3, r2, r3
	str	r3, [fp, #-52]
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
.L356:
	bl	__ctype_b_loc
	mov	r3, r0
	ldr	r2, [r3]
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	lsl	r3, r3, #1
	add	r3, r2, r3
	ldrh	r3, [r3]
	and	r3, r3, #2048
	cmp	r3, #0
	bne	.L357
	b	.L316
.L341:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #3
	str	r3, [fp, #-56]
	b	.L316
.L340:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #4
	str	r3, [fp, #-56]
	b	.L316
.L326:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #5
	str	r3, [fp, #-56]
	b	.L316
.L325:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #6
	str	r3, [fp, #-56]
	b	.L316
.L323:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #7
	str	r3, [fp, #-56]
	b	.L316
.L321:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #8
	str	r3, [fp, #-56]
	b	.L316
.L331:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #9
	str	r3, [fp, #-56]
	b	.L316
.L332:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #10
	str	r3, [fp, #-56]
	b	.L316
.L337:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #11
	str	r3, [fp, #-56]
	b	.L316
.L335:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #12
	str	r3, [fp, #-56]
	b	.L316
.L327:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #13
	str	r3, [fp, #-56]
	b	.L316
.L342:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #14
	str	r3, [fp, #-56]
	b	.L316
.L339:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #18
	str	r3, [fp, #-56]
	b	.L316
.L334:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #19
	str	r3, [fp, #-56]
	b	.L316
.L343:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #20
	str	r3, [fp, #-56]
	b	.L316
.L338:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #21
	str	r3, [fp, #-56]
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #43
	bne	.L367
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #16
	str	r3, [fp, #-56]
	b	.L367
.L336:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #22
	str	r3, [fp, #-56]
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #45
	bne	.L359
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #17
	str	r3, [fp, #-56]
	b	.L368
.L359:
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #62
	bne	.L368
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #15
	str	r3, [fp, #-56]
	b	.L368
.L330:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #23
	str	r3, [fp, #-56]
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #61
	bne	.L369
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #24
	str	r3, [fp, #-56]
	b	.L369
.L328:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #25
	str	r3, [fp, #-56]
	ldr	r3, [fp, #-68]
	ldrb	r3, [r3]	@ zero_extendqisi2
	cmp	r3, #61
	bne	.L370
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #26
	str	r3, [fp, #-56]
	b	.L370
.L329:
	ldr	r3, [fp, #-68]
	add	r3, r3, #1
	str	r3, [fp, #-68]
	mov	r3, #28
	str	r3, [fp, #-56]
	b	.L316
.L320:
	ldr	r0, .L371+72
	bl	syntax_fatal
	b	.L316
.L366:
	nop
	b	.L316
.L367:
	nop
	b	.L316
.L368:
	nop
	b	.L316
.L369:
	nop
	b	.L316
.L370:
	nop
.L316:
	ldr	r3, [fp, #-76]
	cmp	r3, #0
	beq	.L363
	ldr	r2, .L371+4
	ldr	r3, [fp, #-68]
	str	r3, [r2]
	ldr	r2, .L371+8
	ldr	r3, [fp, #-64]
	str	r3, [r2]
.L363:
	ldr	r3, [fp, #-72]
	mov	ip, r3
	sub	r3, fp, #56
	ldm	r3, {r0, r1, r2}
	stm	ip, {r0, r1, r2}
.L311:
	ldr	r3, .L371
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L365
	bl	__stack_chk_fail
.L365:
	ldr	r0, [fp, #-72]
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L372:
	.align	2
.L371:
	.word	.LC72
	.word	source
	.word	source_line
	.word	putback
	.word	__PRETTY_FUNCTION__.6039
	.word	1666
	.word	.LC5
	.word	.LC70
	.word	kword_void
	.word	kword_char
	.word	kword_int
	.word	kword_struct
	.word	kword_return
	.word	kword_goto
	.word	kword_if
	.word	kword_else
	.word	kword_while
	.word	kword_for
	.word	.LC71
	.size	_tok_next, .-_tok_next
	.section	.rodata
	.align	2
.LC73:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	tok_peek
	.syntax unified
	.arm
	.fpu softvfp
	.type	tok_peek, %function
tok_peek:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r3, .L376
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r3, [fp, #-16]
	mov	r1, #0
	mov	r0, r3
	bl	_tok_next
	ldr	r3, .L376
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L375
	bl	__stack_chk_fail
.L375:
	ldr	r0, [fp, #-16]
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L377:
	.align	2
.L376:
	.word	.LC73
	.size	tok_peek, .-tok_peek
	.section	.rodata
	.align	2
.LC74:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	tok_next
	.syntax unified
	.arm
	.fpu softvfp
	.type	tok_next, %function
tok_next:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r3, .L381
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r3, [fp, #-16]
	mov	r1, #1
	mov	r0, r3
	bl	_tok_next
	ldr	r3, .L381
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L380
	bl	__stack_chk_fail
.L380:
	ldr	r0, [fp, #-16]
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L382:
	.align	2
.L381:
	.word	.LC74
	.size	tok_next, .-tok_next
	.section	.rodata
	.align	2
.LC75:
	.ascii	"Expected token %d, found %d\012\000"
	.align	2
.LC76:
	.ascii	"tok.kind == tok_kind\000"
	.align	2
.LC77:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	tok_expect
	.syntax unified
	.arm
	.fpu softvfp
	.type	tok_expect, %function
tok_expect:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-24]
	str	r1, [fp, #-28]
	ldr	r3, .L388
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_next
	ldr	r3, [fp, #-20]
	ldr	r2, [fp, #-28]
	cmp	r2, r3
	beq	.L384
	ldr	r3, [fp, #-20]
	mov	r2, r3
	ldr	r1, [fp, #-28]
	ldr	r0, .L388+4
	bl	syntax_fatal
.L384:
	ldr	r3, [fp, #-20]
	ldr	r2, [fp, #-28]
	cmp	r2, r3
	beq	.L385
	ldr	r3, .L388+8
	ldr	r2, .L388+12
	ldr	r1, .L388+16
	ldr	r0, .L388+20
	bl	__assert_fail
.L385:
	ldr	r3, [fp, #-24]
	mov	ip, r3
	sub	r3, fp, #20
	ldm	r3, {r0, r1, r2}
	stm	ip, {r0, r1, r2}
	ldr	r3, .L388
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L387
	bl	__stack_chk_fail
.L387:
	ldr	r0, [fp, #-24]
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L389:
	.align	2
.L388:
	.word	.LC77
	.word	.LC75
	.word	__PRETTY_FUNCTION__.6086
	.word	1804
	.word	.LC5
	.word	.LC76
	.size	tok_expect, .-tok_expect
	.align	2
	.global	tok_is_type
	.syntax unified
	.arm
	.fpu softvfp
	.type	tok_is_type, %function
tok_is_type:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #28
	sub	r3, fp, #24
	stm	r3, {r0, r1, r2}
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-24]
	sub	r3, r3, #29
	cmp	r3, #2
	bhi	.L391
	mov	r3, #1
	str	r3, [fp, #-8]
	b	.L392
.L391:
	mov	r3, #0
	str	r3, [fp, #-8]
	nop
.L392:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
	.size	tok_is_type, .-tok_is_type
	.global	op_precedence_table
	.data
	.align	2
	.type	op_precedence_table, %object
	.size	op_precedence_table, 36
op_precedence_table:
	.word	3
	.word	3
	.word	3
	.word	4
	.word	4
	.word	6
	.word	6
	.word	6
	.word	6
	.section	.rodata
	.align	2
.LC78:
	.ascii	"Invalid symbol '%s'\000"
	.text
	.align	2
	.global	expr_is_const
	.syntax unified
	.arm
	.fpu softvfp
	.type	expr_is_const, %function
expr_is_const:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #24
	ble	.L395
	mov	r3, #0
	str	r3, [fp, #-12]
	b	.L396
.L395:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #1
	bne	.L397
	mov	r3, #1
	str	r3, [fp, #-12]
	b	.L396
.L397:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #2
	bne	.L398
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	sym_get
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L399
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L413
	bl	fatal
.L399:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #20]
	str	r3, [fp, #-12]
	b	.L396
.L398:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #6
	ble	.L400
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #13
	bgt	.L400
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #9
	bne	.L401
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	expr_is_const
	str	r0, [fp, #-12]
	b	.L402
.L401:
	mov	r3, #0
	str	r3, [fp, #-12]
	nop
.L402:
	b	.L396
.L400:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #13
	ble	.L403
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #23
	bgt	.L403
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	sub	r3, r3, #14
	cmp	r3, #8
	bhi	.L404
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	expr_is_const
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	beq	.L405
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	expr_is_const
	mov	r3, r0
	cmp	r3, #0
	beq	.L405
	mov	r3, #1
	b	.L406
.L405:
	mov	r3, #0
.L406:
	str	r3, [fp, #-12]
	b	.L407
.L404:
	mov	r3, #0
	str	r3, [fp, #-12]
	nop
.L407:
	b	.L396
.L403:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #24
	bne	.L396
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	expr_is_const
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	beq	.L408
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	expr_is_const
	mov	r3, r0
	cmp	r3, #0
	beq	.L408
	mov	r3, #1
	b	.L409
.L408:
	mov	r3, #0
.L409:
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	beq	.L410
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	expr_is_const
	mov	r3, r0
	cmp	r3, #0
	beq	.L410
	mov	r3, #1
	b	.L411
.L410:
	mov	r3, #0
.L411:
	str	r3, [fp, #-12]
.L396:
	ldr	r3, [fp, #-12]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L414:
	.align	2
.L413:
	.word	.LC78
	.size	expr_is_const, .-expr_is_const
	.section	.rodata
	.align	2
.LC79:
	.ascii	"sym->is_const\000"
	.global	__aeabi_idiv
	.global	__aeabi_idivmod
	.text
	.align	2
	.global	eval_expr
	.syntax unified
	.arm
	.fpu softvfp
	.type	eval_expr, %function
eval_expr:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	str	r0, [fp, #-32]
	mov	r3, #0
	str	r3, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #24
	ble	.L416
	ldr	r3, .L442
	ldr	r2, .L442+4
	ldr	r1, .L442+8
	ldr	r0, .L442+12
	bl	__assert_fail
.L416:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #1
	bne	.L417
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-24]
	b	.L418
.L417:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #2
	bne	.L419
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	sym_get
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L420
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L442+16
	bl	fatal
.L420:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #20]
	cmp	r3, #0
	bne	.L421
	ldr	r3, .L442
	mov	r2, #1968
	ldr	r1, .L442+8
	ldr	r0, .L442+20
	bl	__assert_fail
.L421:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #24]
	str	r3, [fp, #-24]
	b	.L418
.L419:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #6
	ble	.L422
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #13
	bgt	.L422
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #9
	bne	.L423
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	eval_expr
	mov	r3, r0
	rsb	r3, r3, #0
	str	r3, [fp, #-24]
	nop
	b	.L418
.L423:
	ldr	r3, .L442
	ldr	r2, .L442+24
	ldr	r1, .L442+8
	ldr	r0, .L442+12
	bl	__assert_fail
.L422:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #13
	ble	.L425
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #23
	bgt	.L425
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	eval_expr
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	eval_expr
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	sub	r3, r3, #14
	cmp	r3, #8
	ldrls	pc, [pc, r3, asl #2]
	b	.L441
.L428:
	.word	.L436
	.word	.L435
	.word	.L434
	.word	.L433
	.word	.L432
	.word	.L431
	.word	.L430
	.word	.L429
	.word	.L427
.L436:
	ldr	r3, [fp, #-20]
	ldr	r2, [fp, #-16]
	mul	r3, r2, r3
	str	r3, [fp, #-24]
	b	.L437
.L435:
	ldr	r1, [fp, #-16]
	ldr	r0, [fp, #-20]
	bl	__aeabi_idiv
	mov	r3, r0
	str	r3, [fp, #-24]
	b	.L437
.L434:
	ldr	r3, [fp, #-20]
	ldr	r1, [fp, #-16]
	mov	r0, r3
	bl	__aeabi_idivmod
	mov	r3, r1
	str	r3, [fp, #-24]
	b	.L437
.L433:
	ldr	r2, [fp, #-20]
	ldr	r3, [fp, #-16]
	add	r3, r2, r3
	str	r3, [fp, #-24]
	b	.L437
.L432:
	ldr	r2, [fp, #-20]
	ldr	r3, [fp, #-16]
	sub	r3, r2, r3
	str	r3, [fp, #-24]
	b	.L437
.L431:
	ldr	r2, [fp, #-20]
	ldr	r3, [fp, #-16]
	cmp	r2, r3
	movlt	r3, #1
	movge	r3, #0
	and	r3, r3, #255
	str	r3, [fp, #-24]
	b	.L437
.L430:
	ldr	r2, [fp, #-20]
	ldr	r3, [fp, #-16]
	cmp	r2, r3
	movle	r3, #1
	movgt	r3, #0
	and	r3, r3, #255
	str	r3, [fp, #-24]
	b	.L437
.L429:
	ldr	r2, [fp, #-20]
	ldr	r3, [fp, #-16]
	cmp	r2, r3
	movgt	r3, #1
	movle	r3, #0
	and	r3, r3, #255
	str	r3, [fp, #-24]
	b	.L437
.L427:
	ldr	r2, [fp, #-20]
	ldr	r3, [fp, #-16]
	cmp	r2, r3
	movge	r3, #1
	movlt	r3, #0
	and	r3, r3, #255
	str	r3, [fp, #-24]
	b	.L437
.L441:
	ldr	r3, .L442
	ldr	r2, .L442+28
	ldr	r1, .L442+8
	ldr	r0, .L442+12
	bl	__assert_fail
.L437:
	b	.L418
.L425:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #24
	bne	.L438
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	eval_expr
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	eval_expr
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	eval_expr
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	beq	.L439
	ldr	r3, [fp, #-12]
	str	r3, [fp, #-24]
	b	.L418
.L439:
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-24]
	b	.L418
.L438:
	ldr	r3, .L442
	ldr	r2, .L442+32
	ldr	r1, .L442+8
	ldr	r0, .L442+12
	bl	__assert_fail
.L418:
	ldr	r3, [fp, #-24]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L443:
	.align	2
.L442:
	.word	__PRETTY_FUNCTION__.6124
	.word	1954
	.word	.LC5
	.word	.LC34
	.word	.LC78
	.word	.LC79
	.word	1982
	.word	2005
	.word	2025
	.size	eval_expr, .-eval_expr
	.section	.rodata
	.align	2
.LC80:
	.ascii	"Invalid base expression\000"
	.align	2
.LC81:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_expr_base
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_expr_base, %function
parse_expr_base:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	ldr	r3, .L451
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-24]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_next
	ldr	r3, [fp, #-20]
	cmp	r3, #3
	beq	.L445
	cmp	r3, #3
	bgt	.L446
	cmp	r3, #1
	beq	.L447
	cmp	r3, #2
	bne	.L446
	ldr	r3, [fp, #-16]
	mov	r0, r3
	bl	make_expr_intlit
	str	r0, [fp, #-24]
	b	.L448
.L447:
	ldr	r3, [fp, #-12]
	mov	r0, r3
	bl	make_expr_id
	str	r0, [fp, #-24]
	b	.L448
.L445:
	bl	parse_expr
	str	r0, [fp, #-24]
	sub	r3, fp, #44
	mov	r1, #4
	mov	r0, r3
	bl	tok_expect
	b	.L448
.L446:
	ldr	r0, .L451+4
	bl	syntax_fatal
	nop
.L448:
	ldr	r3, [fp, #-24]
	ldr	r2, .L451
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L450
	bl	__stack_chk_fail
.L450:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L452:
	.align	2
.L451:
	.word	.LC81
	.word	.LC80
	.size	parse_expr_base, .-parse_expr_base
	.align	2
	.global	reverse_args_list
	.syntax unified
	.arm
	.fpu softvfp
	.type	reverse_args_list, %function
reverse_args_list:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	beq	.L454
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #28]
	cmp	r3, #0
	bne	.L455
.L454:
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-8]
	b	.L456
.L455:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #28]
	mov	r0, r3
	bl	reverse_args_list
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #28]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #28]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
.L456:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
	.size	reverse_args_list, .-reverse_args_list
	.section	.rodata
	.align	2
.LC82:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_expr_first_level
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_expr_first_level, %function
parse_expr_first_level:
	@ args = 0, pretend = 0, frame = 48
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #48
	ldr	r3, .L473
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-32]
	mov	r3, #0
	str	r3, [fp, #-28]
	mov	r3, #0
	str	r3, [fp, #-24]
	bl	parse_expr_base
	str	r0, [fp, #-32]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	ldr	r3, [fp, #-20]
	sub	r3, r3, #3
	cmp	r3, #12
	ldrls	pc, [pc, r3, asl #2]
	b	.L459
.L461:
	.word	.L464
	.word	.L459
	.word	.L463
	.word	.L459
	.word	.L459
	.word	.L459
	.word	.L459
	.word	.L459
	.word	.L459
	.word	.L462
	.word	.L459
	.word	.L459
	.word	.L460
.L464:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #52
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-20]
	cmp	r3, #4
	beq	.L465
.L469:
	ldr	r3, [fp, #-20]
	cmp	r3, #11
	bne	.L466
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
.L466:
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	beq	.L467
	bl	parse_expr_assign
	mov	r2, r0
	ldr	r3, [fp, #-24]
	str	r2, [r3, #28]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-24]
	b	.L468
.L467:
	bl	parse_expr_assign
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	str	r3, [fp, #-28]
.L468:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #52
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-20]
	cmp	r3, #11
	beq	.L469
.L465:
	sub	r3, fp, #52
	mov	r1, #4
	mov	r0, r3
	bl	tok_expect
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	beq	.L470
	ldr	r0, [fp, #-28]
	bl	reverse_args_list
	str	r0, [fp, #-28]
.L470:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #3
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L459
.L463:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	bl	parse_expr
	mov	r3, r0
	mov	r2, r3
	ldr	r1, [fp, #-32]
	mov	r0, #4
	bl	make_expr_binary
	str	r0, [fp, #-32]
	sub	r3, fp, #52
	mov	r1, #6
	mov	r0, r3
	bl	tok_expect
	b	.L459
.L462:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #52
	mov	r1, #1
	mov	r0, r3
	bl	tok_expect
	sub	r3, fp, #20
	sub	r2, fp, #52
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-12]
	mov	r1, r3
	ldr	r0, [fp, #-32]
	bl	make_expr_member_access
	str	r0, [fp, #-32]
	b	.L459
.L460:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #52
	mov	r1, #1
	mov	r0, r3
	bl	tok_expect
	sub	r3, fp, #20
	sub	r2, fp, #52
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-12]
	mov	r1, r3
	ldr	r0, [fp, #-32]
	bl	make_expr_member_access_ptr
	str	r0, [fp, #-32]
	nop
.L459:
	ldr	r3, [fp, #-32]
	ldr	r2, .L473
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L472
	bl	__stack_chk_fail
.L472:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L474:
	.align	2
.L473:
	.word	.LC82
	.size	parse_expr_first_level, .-parse_expr_first_level
	.section	.rodata
	.align	2
.LC83:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_expr_unary
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_expr_unary, %function
parse_expr_unary:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	ldr	r3, .L490
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-28]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	ldr	r3, [fp, #-20]
	sub	r3, r3, #3
	cmp	r3, #19
	ldrls	pc, [pc, r3, asl #2]
	b	.L476
.L478:
	.word	.L484
	.word	.L476
	.word	.L476
	.word	.L476
	.word	.L476
	.word	.L476
	.word	.L476
	.word	.L476
	.word	.L476
	.word	.L476
	.word	.L476
	.word	.L483
	.word	.L476
	.word	.L482
	.word	.L481
	.word	.L480
	.word	.L476
	.word	.L476
	.word	.L479
	.word	.L477
.L482:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_next
	bl	parse_expr_unary
	str	r0, [fp, #-28]
	ldr	r1, [fp, #-28]
	mov	r0, #7
	bl	make_expr_unary
	str	r0, [fp, #-28]
	b	.L485
.L481:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_next
	bl	parse_expr_unary
	str	r0, [fp, #-28]
	ldr	r1, [fp, #-28]
	mov	r0, #8
	bl	make_expr_unary
	str	r0, [fp, #-28]
	b	.L485
.L479:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_next
	bl	parse_expr_unary
	str	r0, [fp, #-28]
	b	.L485
.L477:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_next
	bl	parse_expr_unary
	str	r0, [fp, #-28]
	ldr	r1, [fp, #-28]
	mov	r0, #9
	bl	make_expr_unary
	str	r0, [fp, #-28]
	b	.L485
.L484:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #44
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	sub	r3, fp, #20
	ldm	r3, {r0, r1, r2}
	bl	tok_is_type
	mov	r3, r0
	cmp	r3, #0
	beq	.L486
	mov	r0, #0
	bl	parse_type
	str	r0, [fp, #-24]
	sub	r3, fp, #44
	mov	r1, #4
	mov	r0, r3
	bl	tok_expect
	bl	parse_expr_unary
	mov	r3, r0
	ldr	r1, [fp, #-24]
	mov	r0, r3
	bl	make_expr_cast
	str	r0, [fp, #-28]
	b	.L485
.L486:
	bl	parse_expr
	str	r0, [fp, #-28]
	sub	r3, fp, #44
	mov	r1, #4
	mov	r0, r3
	bl	tok_expect
	b	.L485
.L480:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_next
	bl	parse_expr_unary
	str	r0, [fp, #-28]
	ldr	r1, [fp, #-28]
	mov	r0, #11
	bl	make_expr_unary
	str	r0, [fp, #-28]
	b	.L485
.L483:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_next
	bl	parse_expr_unary
	str	r0, [fp, #-28]
	ldr	r1, [fp, #-28]
	mov	r0, #12
	bl	make_expr_unary
	str	r0, [fp, #-28]
	b	.L485
.L476:
	bl	parse_expr_first_level
	str	r0, [fp, #-28]
	nop
.L485:
	ldr	r3, [fp, #-28]
	ldr	r2, .L490
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L489
	bl	__stack_chk_fail
.L489:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L491:
	.align	2
.L490:
	.word	.LC83
	.size	parse_expr_unary, .-parse_expr_unary
	.section	.rodata
	.align	2
.LC84:
	.ascii	"Invalid binary expression\000"
	.align	2
.LC85:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_expr_binary
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_expr_binary, %function
parse_expr_binary:
	@ args = 0, pretend = 0, frame = 56
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #56
	str	r0, [fp, #-40]
	ldr	r3, .L513
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-32]
	mov	r3, #0
	str	r3, [fp, #-28]
	bl	parse_expr_unary
	str	r0, [fp, #-32]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	b	.L493
.L509:
	ldr	r3, [fp, #-20]
	sub	r3, r3, #18
	ldr	r2, .L513+4
	ldr	r3, [r2, r3, lsl #2]
	str	r3, [fp, #-24]
	ldr	r2, [fp, #-24]
	ldr	r3, [fp, #-40]
	cmp	r2, r3
	bge	.L512
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_next
	ldr	r0, [fp, #-24]
	bl	parse_expr_binary
	str	r0, [fp, #-28]
	ldr	r3, [fp, #-20]
	sub	r3, r3, #18
	cmp	r3, #8
	ldrls	pc, [pc, r3, asl #2]
	b	.L497
.L499:
	.word	.L507
	.word	.L506
	.word	.L505
	.word	.L504
	.word	.L503
	.word	.L502
	.word	.L501
	.word	.L500
	.word	.L498
.L507:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #14
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L508
.L506:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #15
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L508
.L505:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #16
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L508
.L504:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #17
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L508
.L503:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #18
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L508
.L502:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #19
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L508
.L501:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #20
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L508
.L500:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #21
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L508
.L498:
	ldr	r2, [fp, #-28]
	ldr	r1, [fp, #-32]
	mov	r0, #22
	bl	make_expr_binary
	str	r0, [fp, #-32]
	b	.L508
.L497:
	ldr	r0, .L513+8
	bl	syntax_fatal
	nop
.L508:
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #60
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
.L493:
	ldr	r3, [fp, #-20]
	cmp	r3, #17
	ble	.L496
	ldr	r3, [fp, #-20]
	cmp	r3, #26
	ble	.L509
	b	.L496
.L512:
	nop
.L496:
	ldr	r3, [fp, #-32]
	ldr	r2, .L513
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L511
	bl	__stack_chk_fail
.L511:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L514:
	.align	2
.L513:
	.word	.LC85
	.word	op_precedence_table
	.word	.LC84
	.size	parse_expr_binary, .-parse_expr_binary
	.section	.rodata
	.align	2
.LC86:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_expr_ternary
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_expr_ternary, %function
parse_expr_ternary:
	@ args = 0, pretend = 0, frame = 48
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #48
	ldr	r3, .L519
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r0, .L519+4
	bl	parse_expr_binary
	str	r0, [fp, #-32]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	ldr	r3, [fp, #-20]
	cmp	r3, #13
	bne	.L516
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	bl	parse_expr
	str	r0, [fp, #-28]
	sub	r3, fp, #52
	mov	r1, #10
	mov	r0, r3
	bl	tok_expect
	bl	parse_expr_ternary
	str	r0, [fp, #-24]
	ldr	r2, [fp, #-24]
	ldr	r1, [fp, #-28]
	ldr	r0, [fp, #-32]
	bl	make_expr_ternary
	str	r0, [fp, #-32]
.L516:
	ldr	r3, [fp, #-32]
	ldr	r2, .L519
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L518
	bl	__stack_chk_fail
.L518:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L520:
	.align	2
.L519:
	.word	.LC86
	.word	999
	.size	parse_expr_ternary, .-parse_expr_ternary
	.section	.rodata
	.align	2
.LC87:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_expr_assign
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_expr_assign, %function
parse_expr_assign:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	ldr	r3, .L525
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	bl	parse_expr_ternary
	str	r0, [fp, #-24]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	ldr	r3, [fp, #-20]
	cmp	r3, #28
	bne	.L522
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_next
	bl	parse_expr_assign
	mov	r3, r0
	mov	r2, r3
	ldr	r1, [fp, #-24]
	mov	r0, #25
	bl	make_expr_binary
	str	r0, [fp, #-24]
.L522:
	ldr	r3, [fp, #-24]
	ldr	r2, .L525
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L524
	bl	__stack_chk_fail
.L524:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L526:
	.align	2
.L525:
	.word	.LC87
	.size	parse_expr_assign, .-parse_expr_assign
	.section	.rodata
	.align	2
.LC88:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_expr
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_expr, %function
parse_expr:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	ldr	r3, .L533
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-28]
	mov	r3, #0
	str	r3, [fp, #-24]
	bl	parse_expr_assign
	str	r0, [fp, #-28]
	ldr	r3, [fp, #-28]
	str	r3, [fp, #-24]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	b	.L528
.L529:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_next
	bl	parse_expr_assign
	mov	r2, r0
	ldr	r3, [fp, #-24]
	str	r2, [r3, #28]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-24]
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #44
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
.L528:
	ldr	r3, [fp, #-20]
	cmp	r3, #11
	beq	.L529
	ldr	r2, [fp, #-28]
	ldr	r3, [fp, #-24]
	cmp	r2, r3
	beq	.L530
	ldr	r0, [fp, #-28]
	bl	make_expr_compound
	str	r0, [fp, #-28]
.L530:
	ldr	r3, [fp, #-28]
	ldr	r2, .L533
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L532
	bl	__stack_chk_fail
.L532:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L534:
	.align	2
.L533:
	.word	.LC88
	.size	parse_expr, .-parse_expr
	.section	.rodata
	.align	2
.LC89:
	.ascii	"Invalid struct definition\000"
	.align	2
.LC90:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_struct_def
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_struct_def, %function
parse_struct_def:
	@ args = 0, pretend = 0, frame = 56
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #56
	ldr	r3, .L545
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-40]
	mov	r3, #0
	str	r3, [fp, #-36]
	sub	r3, fp, #60
	mov	r1, #7
	mov	r0, r3
	bl	tok_expect
	mov	r3, #0
	str	r3, [fp, #-32]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	b	.L536
.L541:
	mov	r0, #0
	bl	parse_type
	str	r0, [fp, #-28]
	sub	r3, fp, #60
	mov	r1, #1
	mov	r0, r3
	bl	tok_expect
	sub	r3, fp, #20
	sub	r2, fp, #60
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-12]
	str	r3, [fp, #-24]
	ldr	r3, [fp, #-36]
	cmp	r3, #0
	beq	.L537
	ldr	r2, [fp, #-32]
	ldr	r1, [fp, #-28]
	ldr	r0, [fp, #-24]
	bl	make_aggr_element
	mov	r2, r0
	ldr	r3, [fp, #-36]
	str	r2, [r3, #12]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-36]
	b	.L538
.L537:
	ldr	r2, [fp, #-32]
	ldr	r1, [fp, #-28]
	ldr	r0, [fp, #-24]
	bl	make_aggr_element
	str	r0, [fp, #-36]
	ldr	r3, [fp, #-36]
	str	r3, [fp, #-40]
.L538:
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #4]
	rsbs	r2, r3, #0
	and	r3, r3, #3
	and	r2, r2, #3
	rsbpl	r3, r2, #0
	cmp	r3, #0
	ble	.L539
	ldr	r3, [fp, #-28]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #4]
	rsbs	r1, r3, #0
	and	r3, r3, #3
	and	r1, r1, #3
	rsbpl	r3, r1, #0
	rsb	r3, r3, #4
	add	r3, r2, r3
	b	.L540
.L539:
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #4]
.L540:
	ldr	r2, [fp, #-32]
	add	r3, r2, r3
	str	r3, [fp, #-32]
	sub	r3, fp, #60
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #60
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
.L536:
	ldr	r3, [fp, #-20]
	cmp	r3, #8
	bne	.L541
	sub	r3, fp, #60
	mov	r1, #8
	mov	r0, r3
	bl	tok_expect
	ldr	r3, [fp, #-40]
	cmp	r3, #0
	bne	.L542
	ldr	r0, .L545+4
	bl	syntax_fatal
.L542:
	ldr	r3, [fp, #-40]
	ldr	r2, .L545
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L544
	bl	__stack_chk_fail
.L544:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L546:
	.align	2
.L545:
	.word	.LC90
	.word	.LC89
	.size	parse_struct_def, .-parse_struct_def
	.section	.rodata
	.align	2
.LC91:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_base_type
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_base_type, %function
parse_base_type:
	@ args = 0, pretend = 0, frame = 48
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #48
	ldr	r3, .L557
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-32]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	ldr	r3, [fp, #-20]
	sub	r3, r3, #29
	cmp	r3, #3
	ldrls	pc, [pc, r3, asl #2]
	b	.L548
.L550:
	.word	.L553
	.word	.L552
	.word	.L551
	.word	.L549
.L553:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	bl	type_void
	str	r0, [fp, #-32]
	b	.L548
.L552:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	bl	type_char
	str	r0, [fp, #-32]
	b	.L548
.L551:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	bl	type_int
	str	r0, [fp, #-32]
	b	.L548
.L549:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #52
	mov	r1, #1
	mov	r0, r3
	bl	tok_expect
	sub	r3, fp, #20
	sub	r2, fp, #52
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-12]
	str	r3, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-28]
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #52
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-20]
	cmp	r3, #7
	bne	.L554
	bl	parse_struct_def
	str	r0, [fp, #-28]
.L554:
	ldr	r1, [fp, #-28]
	ldr	r0, [fp, #-24]
	bl	type_struct
	str	r0, [fp, #-32]
	nop
.L548:
	ldr	r3, [fp, #-32]
	ldr	r2, .L557
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L556
	bl	__stack_chk_fail
.L556:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L558:
	.align	2
.L557:
	.word	.LC91
	.size	parse_base_type, .-parse_base_type
	.section	.rodata
	.align	2
.LC92:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_type
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_type, %function
parse_type:
	@ args = 0, pretend = 0, frame = 48
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #48
	str	r0, [fp, #-32]
	ldr	r3, .L565
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-24]
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	bne	.L560
	bl	parse_base_type
	str	r0, [fp, #-32]
.L560:
	ldr	r3, [fp, #-32]
	str	r3, [fp, #-24]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	b	.L561
.L562:
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_next
	ldr	r0, [fp, #-24]
	bl	type_ptr
	str	r0, [fp, #-24]
	sub	r3, fp, #52
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #52
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
.L561:
	ldr	r3, [fp, #-20]
	cmp	r3, #18
	beq	.L562
	ldr	r3, [fp, #-24]
	ldr	r2, .L565
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L564
	bl	__stack_chk_fail
.L564:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L566:
	.align	2
.L565:
	.word	.LC92
	.size	parse_type, .-parse_type
	.section	.rodata
	.align	2
.LC93:
	.ascii	"Invalid type for variable declaration\000"
	.align	2
.LC94:
	.ascii	"Invalid constant expression for array length\000"
	.align	2
.LC95:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_decl, %function
parse_decl:
	@ args = 0, pretend = 0, frame = 56
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #56
	ldr	r3, .L573
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	bl	parse_base_type
	str	r0, [fp, #-40]
	ldr	r3, [fp, #-40]
	cmp	r3, #0
	bne	.L568
	ldr	r0, .L573+4
	bl	syntax_fatal
.L568:
	ldr	r0, [fp, #-40]
	bl	parse_type
	str	r0, [fp, #-40]
	sub	r3, fp, #20
	mov	r1, #1
	mov	r0, r3
	bl	tok_expect
	ldr	r3, [fp, #-12]
	str	r3, [fp, #-36]
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #60
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-20]
	cmp	r3, #5
	bne	.L569
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_next
	bl	parse_expr
	str	r0, [fp, #-32]
	ldr	r0, [fp, #-32]
	bl	expr_is_const
	mov	r3, r0
	cmp	r3, #0
	bne	.L570
	ldr	r0, .L573+8
	bl	syntax_fatal
.L570:
	ldr	r0, [fp, #-32]
	bl	eval_expr
	str	r0, [fp, #-28]
	ldr	r1, [fp, #-28]
	ldr	r0, [fp, #-40]
	bl	type_array
	str	r0, [fp, #-40]
	sub	r3, fp, #60
	mov	r1, #6
	mov	r0, r3
	bl	tok_expect
.L569:
	ldr	r1, [fp, #-36]
	ldr	r0, [fp, #-40]
	bl	make_decl
	str	r0, [fp, #-24]
	sub	r3, fp, #60
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
	ldr	r3, [fp, #-24]
	ldr	r2, .L573
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L572
	bl	__stack_chk_fail
.L572:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L574:
	.align	2
.L573:
	.word	.LC95
	.word	.LC93
	.word	.LC94
	.size	parse_decl, .-parse_decl
	.section	.rodata
	.align	2
.LC96:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_stmt_block
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_stmt_block, %function
parse_stmt_block:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	ldr	r3, .L582
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	sub	r3, fp, #44
	mov	r1, #7
	mov	r0, r3
	bl	tok_expect
	mov	r0, #2
	bl	make_stmt
	str	r0, [fp, #-24]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	mov	r3, #0
	str	r3, [fp, #-28]
	b	.L576
.L579:
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	beq	.L577
	bl	parse_stmt
	mov	r2, r0
	ldr	r3, [fp, #-28]
	str	r2, [r3, #28]
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-28]
	b	.L578
.L577:
	bl	parse_stmt
	str	r0, [fp, #-28]
	ldr	r3, [fp, #-24]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #4]
.L578:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #44
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
.L576:
	ldr	r3, [fp, #-20]
	cmp	r3, #8
	bne	.L579
	sub	r3, fp, #44
	mov	r1, #8
	mov	r0, r3
	bl	tok_expect
	ldr	r3, [fp, #-24]
	ldr	r2, .L582
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L581
	bl	__stack_chk_fail
.L581:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L583:
	.align	2
.L582:
	.word	.LC96
	.size	parse_stmt_block, .-parse_stmt_block
	.section	.rodata
	.align	2
.LC97:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_stmt
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_stmt, %function
parse_stmt:
	@ args = 0, pretend = 0, frame = 80
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #80
	ldr	r3, .L604
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	sub	r3, fp, #32
	mov	r0, r3
	bl	tok_peek
	b	.L585
.L586:
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #32
	sub	r2, fp, #84
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
.L585:
	ldr	r3, [fp, #-32]
	cmp	r3, #9
	beq	.L586
	sub	r3, fp, #32
	ldm	r3, {r0, r1, r2}
	bl	tok_is_type
	mov	r3, r0
	cmp	r3, #0
	beq	.L587
	mov	r0, #0
	bl	make_stmt
	str	r0, [fp, #-64]
	bl	parse_decl
	mov	r2, r0
	ldr	r3, [fp, #-64]
	str	r2, [r3, #4]
	b	.L588
.L587:
	ldr	r3, [fp, #-32]
	sub	r3, r3, #1
	cmp	r3, #37
	ldrls	pc, [pc, r3, asl #2]
	b	.L589
.L591:
	.word	.L597
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L596
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L589
	.word	.L595
	.word	.L594
	.word	.L593
	.word	.L589
	.word	.L592
	.word	.L590
.L597:
	ldr	r3, [fp, #-24]
	str	r3, [fp, #-36]
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	ldr	r3, [fp, #-20]
	cmp	r3, #10
	bne	.L598
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_next
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-64]
	ldr	r3, [fp, #-64]
	ldr	r2, [fp, #-36]
	str	r2, [r3, #4]
	b	.L588
.L598:
	sub	r3, fp, #32
	ldm	r3, {r0, r1, r2}
	bl	tok_putback
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-64]
	bl	parse_expr
	mov	r2, r0
	ldr	r3, [fp, #-64]
	str	r2, [r3, #4]
	sub	r3, fp, #84
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
	b	.L588
.L596:
	bl	parse_stmt_block
	str	r0, [fp, #-64]
	b	.L588
.L595:
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_next
	mov	r0, #3
	bl	make_stmt
	str	r0, [fp, #-64]
	ldr	r3, [fp, #-64]
	mov	r2, #0
	str	r2, [r3, #4]
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #32
	sub	r2, fp, #84
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-32]
	cmp	r3, #9
	beq	.L600
	bl	parse_expr
	mov	r2, r0
	ldr	r3, [fp, #-64]
	str	r2, [r3, #4]
.L600:
	sub	r3, fp, #84
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
	b	.L588
.L594:
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #84
	mov	r1, #1
	mov	r0, r3
	bl	tok_expect
	sub	r3, fp, #32
	sub	r2, fp, #84
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	mov	r0, #5
	bl	make_stmt
	str	r0, [fp, #-64]
	ldr	r2, [fp, #-24]
	ldr	r3, [fp, #-64]
	str	r2, [r3, #4]
	sub	r3, fp, #84
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
	b	.L588
.L593:
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #84
	mov	r1, #3
	mov	r0, r3
	bl	tok_expect
	bl	parse_expr
	str	r0, [fp, #-40]
	sub	r3, fp, #84
	mov	r1, #4
	mov	r0, r3
	bl	tok_expect
	bl	parse_stmt
	str	r0, [fp, #-44]
	mov	r3, #0
	str	r3, [fp, #-60]
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #32
	sub	r2, fp, #84
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-32]
	cmp	r3, #36
	bne	.L601
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_next
	bl	parse_stmt
	str	r0, [fp, #-60]
.L601:
	ldr	r2, [fp, #-60]
	ldr	r1, [fp, #-44]
	ldr	r0, [fp, #-40]
	bl	make_stmt_if
	str	r0, [fp, #-64]
	b	.L588
.L592:
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #84
	mov	r1, #3
	mov	r0, r3
	bl	tok_expect
	bl	parse_expr
	str	r0, [fp, #-40]
	sub	r3, fp, #84
	mov	r1, #4
	mov	r0, r3
	bl	tok_expect
	bl	parse_stmt
	str	r0, [fp, #-44]
	ldr	r1, [fp, #-44]
	ldr	r0, [fp, #-40]
	bl	make_stmt_while
	str	r0, [fp, #-64]
	b	.L588
.L590:
	sub	r3, fp, #84
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #84
	mov	r1, #3
	mov	r0, r3
	bl	tok_expect
	bl	parse_expr
	str	r0, [fp, #-56]
	sub	r3, fp, #84
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
	bl	parse_expr
	str	r0, [fp, #-52]
	sub	r3, fp, #84
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
	bl	parse_expr
	str	r0, [fp, #-48]
	sub	r3, fp, #84
	mov	r1, #4
	mov	r0, r3
	bl	tok_expect
	bl	parse_stmt
	str	r0, [fp, #-44]
	ldr	r3, [fp, #-44]
	ldr	r2, [fp, #-48]
	ldr	r1, [fp, #-52]
	ldr	r0, [fp, #-56]
	bl	make_stmt_for
	str	r0, [fp, #-64]
	b	.L588
.L589:
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-64]
	bl	parse_expr
	mov	r2, r0
	ldr	r3, [fp, #-64]
	str	r2, [r3, #4]
	sub	r3, fp, #84
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
	nop
.L588:
	ldr	r3, [fp, #-64]
	ldr	r2, .L604
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L603
	bl	__stack_chk_fail
.L603:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L605:
	.align	2
.L604:
	.word	.LC97
	.size	parse_stmt, .-parse_stmt
	.section	.rodata
	.align	2
.LC98:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_func_param
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_func_param, %function
parse_func_param:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	ldr	r3, .L609
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r0, #0
	bl	parse_type
	str	r0, [fp, #-32]
	sub	r3, fp, #20
	mov	r1, #1
	mov	r0, r3
	bl	tok_expect
	ldr	r3, [fp, #-12]
	str	r3, [fp, #-28]
	ldr	r1, [fp, #-32]
	ldr	r0, [fp, #-28]
	bl	make_func_param
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	ldr	r2, .L609
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L608
	bl	__stack_chk_fail
.L608:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L610:
	.align	2
.L609:
	.word	.LC98
	.size	parse_func_param, .-parse_func_param
	.section	.rodata
	.align	2
.LC99:
	.ascii	"Invalid type for global declaration\000"
	.align	2
.LC100:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_glob_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_glob_decl, %function
parse_glob_decl:
	@ args = 0, pretend = 0, frame = 56
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #56
	ldr	r3, .L626
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-44]
	bl	parse_base_type
	str	r0, [fp, #-28]
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	bne	.L612
	ldr	r0, .L626+4
	bl	syntax_fatal
.L612:
	ldr	r0, [fp, #-28]
	bl	parse_type
	str	r0, [fp, #-28]
	sub	r3, fp, #20
	mov	r1, #1
	mov	r0, r3
	bl	tok_expect
	ldr	r3, [fp, #-12]
	str	r3, [fp, #-24]
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #60
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-20]
	cmp	r3, #9
	bne	.L613
	sub	r3, fp, #60
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
	ldr	r1, [fp, #-28]
	ldr	r0, [fp, #-24]
	bl	make_glob_decl_var
	str	r0, [fp, #-44]
	b	.L614
.L613:
	mov	r3, #0
	str	r3, [fp, #-40]
	mov	r3, #0
	str	r3, [fp, #-36]
	sub	r3, fp, #60
	mov	r1, #3
	mov	r0, r3
	bl	tok_expect
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #60
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	b	.L615
.L620:
	ldr	r3, [fp, #-36]
	cmp	r3, #0
	beq	.L616
	bl	parse_func_param
	mov	r2, r0
	ldr	r3, [fp, #-36]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-36]
	b	.L617
.L616:
	bl	parse_func_param
	str	r0, [fp, #-36]
	ldr	r3, [fp, #-36]
	mov	r2, #0
	str	r2, [r3, #8]
	ldr	r3, [fp, #-36]
	str	r3, [fp, #-40]
.L617:
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #60
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-20]
	cmp	r3, #11
	bne	.L625
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_next
	sub	r3, fp, #20
	sub	r2, fp, #60
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
.L615:
	ldr	r3, [fp, #-20]
	cmp	r3, #4
	bne	.L620
	b	.L619
.L625:
	nop
.L619:
	sub	r3, fp, #60
	mov	r1, #4
	mov	r0, r3
	bl	tok_expect
	ldr	r0, [fp, #-40]
	bl	reverse_func_params_list
	str	r0, [fp, #-40]
	ldr	r1, [fp, #-40]
	ldr	r0, [fp, #-28]
	bl	type_func
	str	r0, [fp, #-28]
	mov	r3, #0
	str	r3, [fp, #-32]
	sub	r3, fp, #60
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #60
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
	ldr	r3, [fp, #-20]
	cmp	r3, #7
	bne	.L621
	bl	parse_stmt_block
	str	r0, [fp, #-32]
	b	.L622
.L621:
	sub	r3, fp, #60
	mov	r1, #9
	mov	r0, r3
	bl	tok_expect
.L622:
	ldr	r2, [fp, #-32]
	ldr	r1, [fp, #-28]
	ldr	r0, [fp, #-24]
	bl	make_glob_decl_func
	str	r0, [fp, #-44]
.L614:
	ldr	r3, [fp, #-44]
	ldr	r2, .L626
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L624
	bl	__stack_chk_fail
.L624:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L627:
	.align	2
.L626:
	.word	.LC100
	.word	.LC99
	.size	parse_glob_decl, .-parse_glob_decl
	.section	.rodata
	.align	2
.LC101:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parse_unit
	.syntax unified
	.arm
	.fpu softvfp
	.type	parse_unit, %function
parse_unit:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	ldr	r3, .L636
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-28]
	mov	r3, #0
	str	r3, [fp, #-24]
	sub	r3, fp, #20
	mov	r0, r3
	bl	tok_peek
	b	.L629
.L633:
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	beq	.L630
	bl	parse_glob_decl
	mov	r2, r0
	ldr	r3, [fp, #-24]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-24]
	b	.L631
.L630:
	bl	parse_glob_decl
	str	r0, [fp, #-24]
.L631:
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	bne	.L632
	ldr	r3, [fp, #-24]
	str	r3, [fp, #-28]
.L632:
	sub	r3, fp, #44
	mov	r0, r3
	bl	tok_peek
	sub	r3, fp, #20
	sub	r2, fp, #44
	ldm	r2, {r0, r1, r2}
	stm	r3, {r0, r1, r2}
.L629:
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	bne	.L633
	ldr	r3, [fp, #-28]
	ldr	r2, .L636
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L635
	bl	__stack_chk_fail
.L635:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L637:
	.align	2
.L636:
	.word	.LC101
	.size	parse_unit, .-parse_unit
	.section	.rodata
	.align	2
.LC102:
	.ascii	"[!] SEMANTIC ERROR: \000"
	.align	2
.LC103:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	semantic_error
	.syntax unified
	.arm
	.fpu softvfp
	.type	semantic_error, %function
semantic_error:
	@ args = 4, pretend = 16, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 1
	push	{r0, r1, r2, r3}
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	ldr	r3, [fp, #4]
	str	r3, [fp, #-16]
	ldr	r3, .L640
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r0, .L640+4
	bl	printf
	add	r3, fp, #8
	str	r3, [fp, #-12]
	ldr	r1, [fp, #-12]
	ldr	r0, [fp, #-16]
	bl	vprintf
	mov	r0, #10
	bl	putchar
	nop
	ldr	r3, .L640
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L639
	bl	__stack_chk_fail
.L639:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, lr}
	add	sp, sp, #16
	bx	lr
.L641:
	.align	2
.L640:
	.word	.LC103
	.word	.LC102
	.size	semantic_error, .-semantic_error
	.section	.rodata
	.align	2
.LC104:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	semantic_fatal
	.syntax unified
	.arm
	.fpu softvfp
	.type	semantic_fatal, %function
semantic_fatal:
	@ args = 4, pretend = 16, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 1
	push	{r0, r1, r2, r3}
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	ldr	r3, [fp, #4]
	str	r3, [fp, #-16]
	ldr	r3, .L644
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	ldr	r0, .L644+4
	bl	printf
	add	r3, fp, #8
	str	r3, [fp, #-12]
	ldr	r1, [fp, #-12]
	ldr	r0, [fp, #-16]
	bl	vprintf
	mov	r0, #10
	bl	putchar
	mov	r0, #1
	bl	exit
.L645:
	.align	2
.L644:
	.word	.LC104
	.word	.LC102
	.size	semantic_fatal, .-semantic_fatal
	.comm	curr_func,4,4
	.section	.rodata
	.align	2
.LC105:
	.ascii	"\012\000"
	.align	2
.LC106:
	.ascii	"Invalid symbol %s in expression\000"
	.align	2
.LC107:
	.ascii	"Cannot operate array subscription on non-array or n"
	.ascii	"on-ptr\000"
	.align	2
.LC108:
	.ascii	"Cannot access a member of a non-struct\000"
	.align	2
.LC109:
	.ascii	"Cannot access a member of an undefined struct\000"
	.align	2
.LC110:
	.ascii	"Tried to access an invalid struct member\000"
	.align	2
.LC111:
	.ascii	"Cannot access a member of a non-pointer-to-struct\000"
	.align	2
.LC112:
	.ascii	"Cannot operate on 2 different types\000"
	.align	2
.LC113:
	.ascii	"Type mismatch in ternary expression\000"
	.align	2
.LC114:
	.ascii	"Cannot assign a different type\000"
	.align	2
.LC115:
	.ascii	"Invalid expression type\000"
	.text
	.align	2
	.global	resolve_expr_type
	.syntax unified
	.arm
	.fpu softvfp
	.type	resolve_expr_type, %function
resolve_expr_type:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	str	r0, [fp, #-40]
	str	r1, [fp, #-44]
	mov	r3, #0
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	sub	r3, r3, #1
	cmp	r3, #5
	ldrls	pc, [pc, r3, asl #2]
	b	.L647
.L649:
	.word	.L654
	.word	.L653
	.word	.L652
	.word	.L651
	.word	.L650
	.word	.L648
.L654:
	ldr	r3, [fp, #-44]
	cmp	r3, #0
	beq	.L655
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-44]
	cmp	r3, r2
	bne	.L655
	bl	type_char
	str	r0, [fp, #-32]
	nop
	b	.L657
.L655:
	bl	type_int
	str	r0, [fp, #-32]
	b	.L657
.L653:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	sym_get
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	bne	.L658
	bl	print_sym_table
	ldr	r0, .L698
	bl	puts
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L698+4
	bl	semantic_fatal
.L658:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-32]
	b	.L657
.L652:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-44]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-32]
	b	.L657
.L651:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	beq	.L659
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #4
	beq	.L660
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #3
	beq	.L660
.L659:
	ldr	r0, .L698+8
	bl	semantic_fatal
.L660:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-32]
	b	.L657
.L650:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	beq	.L661
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #6
	beq	.L662
.L661:
	ldr	r0, .L698+12
	bl	semantic_fatal
.L662:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	bne	.L663
	ldr	r0, .L698+16
	bl	semantic_fatal
.L663:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, [fp, #-32]
	bl	get_struct_member
	str	r0, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	beq	.L664
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-32]
.L664:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	bne	.L696
	ldr	r0, .L698+20
	bl	semantic_fatal
	b	.L696
.L648:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	beq	.L666
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L666
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	ldr	r3, [r3]
	cmp	r3, #6
	beq	.L667
.L666:
	ldr	r0, .L698+24
	bl	semantic_fatal
.L667:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	bne	.L668
	ldr	r0, .L698+16
	bl	semantic_fatal
.L668:
	ldr	r3, [fp, #-32]
	ldr	r2, [r3, #8]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	mov	r1, r3
	mov	r0, r2
	bl	get_struct_member
	str	r0, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	beq	.L669
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-32]
.L669:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	bne	.L697
	ldr	r0, .L698+20
	bl	semantic_fatal
	b	.L697
.L647:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L671
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-44]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-32]
	b	.L657
.L671:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #10
	bne	.L673
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-44]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #24]
	str	r3, [fp, #-32]
	b	.L657
.L673:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #11
	bne	.L674
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-44]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-32]
	b	.L657
.L674:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #12
	bne	.L675
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-44]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	ldr	r0, [fp, #-32]
	bl	type_ptr
	str	r0, [fp, #-32]
	b	.L657
.L675:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #6
	ble	.L676
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #12
	bgt	.L676
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-44]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	b	.L672
.L676:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #13
	ble	.L677
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #22
	bgt	.L677
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-44]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-16]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L678
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-12]
	cmp	r3, r2
	beq	.L679
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-12]
	cmp	r3, r2
	bne	.L678
.L679:
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-32]
	b	.L680
.L678:
	ldr	r3, [fp, #-12]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L681
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-16]
	cmp	r3, r2
	beq	.L682
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-16]
	cmp	r3, r2
	bne	.L681
.L682:
	ldr	r3, [fp, #-12]
	str	r3, [fp, #-32]
	b	.L680
.L681:
	ldr	r2, [fp, #-16]
	ldr	r3, [fp, #-12]
	cmp	r2, r3
	beq	.L680
	ldr	r0, .L698+28
	bl	semantic_fatal
.L680:
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-32]
	b	.L672
.L677:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #24
	bne	.L683
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #20]
	ldr	r1, [fp, #-44]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #16]
	ldr	r1, [fp, #-8]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-12]
	ldr	r2, [fp, #-8]
	ldr	r3, [fp, #-12]
	cmp	r2, r3
	beq	.L684
	ldr	r0, .L698+32
	bl	semantic_fatal
.L684:
	ldr	r3, [fp, #-12]
	str	r3, [fp, #-32]
	b	.L657
.L683:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #25
	bne	.L685
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-44]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	ldr	r1, [fp, #-16]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L686
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-12]
	cmp	r3, r2
	beq	.L687
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-12]
	cmp	r3, r2
	bne	.L686
.L687:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	expr_is_const
	mov	r3, r0
	cmp	r3, #0
	beq	.L686
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	eval_expr
	mov	r3, r0
	cmp	r3, #0
	bne	.L686
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-12]
	b	.L688
.L686:
	ldr	r2, [fp, #-16]
	ldr	r3, [fp, #-12]
	cmp	r2, r3
	beq	.L688
	ldr	r0, .L698+36
	bl	semantic_fatal
.L688:
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-32]
	b	.L657
.L685:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #26
	bne	.L689
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-28]
	b	.L690
.L691:
	mov	r1, #0
	ldr	r0, [fp, #-28]
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-28]
.L690:
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	bne	.L691
	b	.L657
.L689:
	ldr	r3, .L698+40
	ldr	r2, .L698+44
	ldr	r1, .L698+48
	ldr	r0, .L698+52
	bl	__assert_fail
.L672:
	b	.L657
.L696:
	nop
	b	.L657
.L697:
	nop
.L657:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	bne	.L692
	ldr	r0, .L698+56
	bl	semantic_fatal
.L692:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	beq	.L693
	ldr	r3, [fp, #-44]
	cmp	r3, #0
	beq	.L693
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-32]
	cmp	r3, r2
	bne	.L693
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-44]
	cmp	r3, r2
	bne	.L693
	bl	type_int
	str	r0, [fp, #-32]
.L693:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L694
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #12
	beq	.L694
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	type_ptr
	str	r0, [fp, #-32]
.L694:
	ldr	r3, [fp, #-32]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L699:
	.align	2
.L698:
	.word	.LC105
	.word	.LC106
	.word	.LC107
	.word	.LC108
	.word	.LC109
	.word	.LC110
	.word	.LC111
	.word	.LC112
	.word	.LC113
	.word	.LC114
	.word	__PRETTY_FUNCTION__.6354
	.word	3094
	.word	.LC5
	.word	.LC34
	.word	.LC115
	.size	resolve_expr_type, .-resolve_expr_type
	.align	2
	.global	check_lvalue
	.syntax unified
	.arm
	.fpu softvfp
	.type	check_lvalue, %function
check_lvalue:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	mov	r3, #0
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #2
	bne	.L701
	mov	r3, #1
	str	r3, [fp, #-8]
	b	.L702
.L701:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #11
	bne	.L703
	mov	r3, #1
	str	r3, [fp, #-8]
	b	.L702
.L703:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L704
	mov	r3, #1
	str	r3, [fp, #-8]
	b	.L702
.L704:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #5
	bne	.L705
	mov	r3, #1
	str	r3, [fp, #-8]
	b	.L702
.L705:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3]
	cmp	r3, #6
	bne	.L702
	mov	r3, #1
	str	r3, [fp, #-8]
.L702:
	ldr	r3, [fp, #-8]
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
	.size	check_lvalue, .-check_lvalue
	.section	.rodata
	.align	2
.LC116:
	.ascii	"Invalid function call\000"
	.align	2
.LC117:
	.ascii	"Invalid number of arguments in function call\000"
	.align	2
.LC118:
	.ascii	"Invalid type of argument in function call\000"
	.align	2
.LC119:
	.ascii	"Array subscription used to non-array and non-pointe"
	.ascii	"r\000"
	.align	2
.LC120:
	.ascii	"Subscription on a void pointer\000"
	.align	2
.LC121:
	.ascii	"Array subscription operand must be an integer\000"
	.align	2
.LC122:
	.ascii	"Invalid lvalue (operand of pre-increment '++')\000"
	.align	2
.LC123:
	.ascii	"Invalid lvalue (operand of pre-decrement '--')\000"
	.align	2
.LC124:
	.ascii	"Invalid arithmetic expression operand\000"
	.align	2
.LC125:
	.ascii	"Invalid pointer for dereference\000"
	.align	2
.LC126:
	.ascii	"Invalid lvalue (operand of unary '&')\000"
	.align	2
.LC127:
	.ascii	"Cannot add or subtract 2 pointers\000"
	.align	2
.LC128:
	.ascii	"Pointer can added or subtracted only with integers "
	.ascii	"or chars\000"
	.align	2
.LC129:
	.ascii	"Invalid condition for ternary expression\000"
	.align	2
.LC130:
	.ascii	"Invalid lvalue (left operand of assignment)\000"
	.align	2
.LC131:
	.ascii	"Cannot assign to an array variable (only to its ele"
	.ascii	"ments)\000"
	.align	2
.LC132:
	.ascii	"Invalid assignment expression (types mismatch)\000"
	.text
	.align	2
	.global	check_expr
	.syntax unified
	.arm
	.fpu softvfp
	.type	check_expr, %function
check_expr:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, fp, lr}
	add	fp, sp, #8
	sub	sp, sp, #44
	str	r0, [fp, #-48]
	ldr	r3, [fp, #-48]
	ldr	r3, [r3]
	sub	r3, r3, #1
	cmp	r3, #25
	ldrls	pc, [pc, r3, asl #2]
	b	.L774
.L710:
	.word	.L775
	.word	.L775
	.word	.L724
	.word	.L723
	.word	.L722
	.word	.L721
	.word	.L720
	.word	.L719
	.word	.L718
	.word	.L717
	.word	.L716
	.word	.L715
	.word	.L774
	.word	.L713
	.word	.L713
	.word	.L713
	.word	.L714
	.word	.L714
	.word	.L713
	.word	.L713
	.word	.L713
	.word	.L713
	.word	.L774
	.word	.L712
	.word	.L711
	.word	.L709
.L724:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-40]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #5
	beq	.L727
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #3
	beq	.L727
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	ldr	r3, [r3]
	cmp	r3, #5
	beq	.L727
	ldr	r0, .L788
	bl	semantic_fatal
.L727:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L728
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-40]
.L728:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-28]
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	beq	.L729
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	beq	.L730
.L729:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	bne	.L732
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	beq	.L732
.L730:
	ldr	r0, .L788+4
	bl	semantic_fatal
	b	.L732
.L736:
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-36]
	ldr	r1, [fp, #-36]
	ldr	r0, [fp, #-32]
	bl	resolve_expr_type
	str	r0, [fp, #-20]
	ldr	r2, [fp, #-36]
	ldr	r3, [fp, #-20]
	cmp	r2, r3
	beq	.L733
	ldr	r0, .L788+8
	bl	semantic_fatal
.L733:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-28]
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	beq	.L734
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	beq	.L735
.L734:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	bne	.L732
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	beq	.L732
.L735:
	ldr	r0, .L788+4
	bl	semantic_fatal
.L732:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	bne	.L736
	b	.L726
.L723:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #16]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-36]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #4
	beq	.L737
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #3
	beq	.L737
	ldr	r0, .L788+12
	bl	semantic_fatal
.L737:
	ldr	r3, [fp, #-36]
	ldr	r4, [r3, #8]
	bl	type_void
	mov	r3, r0
	cmp	r4, r3
	bne	.L738
	ldr	r0, .L788+16
	bl	semantic_fatal
.L738:
	ldr	r3, [fp, #-48]
	ldr	r4, [r3, #16]
	bl	type_int
	mov	r3, r0
	mov	r1, r3
	mov	r0, r4
	bl	resolve_expr_type
	str	r0, [fp, #-20]
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-20]
	cmp	r3, r2
	beq	.L776
	ldr	r0, .L788+20
	bl	semantic_fatal
	b	.L776
.L722:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-36]
	ldr	r3, [fp, #-36]
	cmp	r3, #0
	beq	.L740
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #6
	beq	.L741
.L740:
	ldr	r0, .L788+24
	bl	semantic_fatal
.L741:
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	bne	.L742
	ldr	r0, .L788+28
	bl	semantic_fatal
.L742:
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #24]
	str	r3, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-36]
	b	.L743
.L746:
	ldr	r3, [fp, #-24]
	ldr	r2, [r3]
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #8]
	cmp	r2, r3
	bne	.L744
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-36]
	b	.L745
.L744:
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-24]
.L743:
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L746
.L745:
	ldr	r3, [fp, #-36]
	cmp	r3, #0
	bne	.L777
	ldr	r0, .L788+32
	bl	semantic_fatal
	b	.L777
.L721:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-36]
	ldr	r3, [fp, #-36]
	cmp	r3, #0
	beq	.L748
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L748
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #8]
	ldr	r3, [r3]
	cmp	r3, #6
	beq	.L749
.L748:
	ldr	r0, .L788+36
	bl	semantic_fatal
.L749:
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #8]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	bne	.L750
	ldr	r0, .L788+28
	bl	semantic_fatal
.L750:
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #8]
	ldr	r3, [r3, #24]
	str	r3, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-36]
	b	.L751
.L754:
	ldr	r3, [fp, #-24]
	ldr	r2, [r3]
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #8]
	cmp	r2, r3
	bne	.L752
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-36]
	b	.L753
.L752:
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-24]
.L751:
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L754
.L753:
	ldr	r3, [fp, #-36]
	cmp	r3, #0
	bne	.L778
	ldr	r0, .L788+32
	bl	semantic_fatal
	b	.L778
.L720:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	check_lvalue
	mov	r3, r0
	cmp	r3, #0
	bne	.L779
	ldr	r0, .L788+40
	bl	semantic_fatal
	b	.L779
.L719:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	check_lvalue
	mov	r3, r0
	cmp	r3, #0
	bne	.L780
	ldr	r0, .L788+44
	bl	semantic_fatal
	b	.L780
.L718:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-36]
	ldr	r0, [fp, #-36]
	bl	type_is_arithmetic
	mov	r3, r0
	cmp	r3, #0
	bne	.L781
	ldr	r0, .L788+48
	bl	semantic_fatal
	b	.L781
.L717:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-36]
	b	.L726
.L716:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-40]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #3
	beq	.L782
	ldr	r0, .L788+52
	bl	semantic_fatal
	b	.L782
.L715:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	check_lvalue
	mov	r3, r0
	cmp	r3, #0
	bne	.L783
	ldr	r0, .L788+56
	bl	semantic_fatal
	b	.L783
.L714:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-36]
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #16]
	ldr	r1, [fp, #-36]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L761
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L761
	ldr	r0, .L788+60
	bl	semantic_fatal
	b	.L762
.L761:
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L763
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-20]
	cmp	r3, r2
	beq	.L763
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-20]
	cmp	r3, r2
	beq	.L763
	ldr	r0, .L788+64
	bl	semantic_fatal
	b	.L762
.L763:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L784
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-36]
	cmp	r3, r2
	beq	.L784
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-36]
	cmp	r3, r2
	beq	.L784
	ldr	r0, .L788+64
	bl	semantic_fatal
	b	.L784
.L762:
	b	.L784
.L713:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-36]
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #16]
	ldr	r1, [fp, #-36]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-20]
	ldr	r0, [fp, #-36]
	bl	type_is_arithmetic
	mov	r3, r0
	cmp	r3, #0
	bne	.L764
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L765
.L764:
	ldr	r0, [fp, #-20]
	bl	type_is_arithmetic
	mov	r3, r0
	cmp	r3, #0
	bne	.L785
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	cmp	r3, #3
	beq	.L785
.L765:
	ldr	r0, .L788+48
	bl	semantic_fatal
	b	.L785
.L712:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-36]
	bl	type_char
	mov	r2, r0
	ldr	r3, [fp, #-36]
	cmp	r3, r2
	beq	.L767
	bl	type_int
	mov	r2, r0
	ldr	r3, [fp, #-36]
	cmp	r3, r2
	beq	.L767
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #3
	beq	.L767
	ldr	r0, .L788+68
	bl	semantic_fatal
.L767:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #20]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #16]
	ldr	r1, [fp, #-16]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-20]
	ldr	r2, [fp, #-16]
	ldr	r3, [fp, #-20]
	cmp	r2, r3
	beq	.L786
	ldr	r0, .L788+72
	bl	semantic_fatal
	b	.L786
.L711:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	check_lvalue
	mov	r3, r0
	cmp	r3, #0
	bne	.L769
	ldr	r0, .L788+76
	bl	semantic_fatal
.L769:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-36]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L770
	ldr	r0, .L788+80
	bl	semantic_fatal
.L770:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #16]
	ldr	r1, [fp, #-36]
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-20]
	ldr	r2, [fp, #-36]
	ldr	r3, [fp, #-20]
	cmp	r2, r3
	beq	.L787
	ldr	r0, .L788+84
	bl	semantic_fatal
	b	.L787
.L709:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-32]
	b	.L772
.L773:
	ldr	r0, [fp, #-32]
	bl	check_expr
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-32]
.L772:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	bne	.L773
	b	.L726
.L774:
	ldr	r3, .L788+88
	ldr	r2, .L788+92
	ldr	r1, .L788+96
	ldr	r0, .L788+100
	bl	__assert_fail
.L775:
	nop
	b	.L726
.L776:
	nop
	b	.L726
.L777:
	nop
	b	.L726
.L778:
	nop
	b	.L726
.L779:
	nop
	b	.L726
.L780:
	nop
	b	.L726
.L781:
	nop
	b	.L726
.L782:
	nop
	b	.L726
.L783:
	nop
	b	.L726
.L784:
	nop
	b	.L726
.L785:
	nop
	b	.L726
.L786:
	nop
	b	.L726
.L787:
	nop
.L726:
	mov	r1, #0
	ldr	r0, [fp, #-48]
	bl	resolve_expr_type
	nop
	sub	sp, fp, #8
	@ sp needed
	pop	{r4, fp, pc}
.L789:
	.align	2
.L788:
	.word	.LC116
	.word	.LC117
	.word	.LC118
	.word	.LC119
	.word	.LC120
	.word	.LC121
	.word	.LC108
	.word	.LC109
	.word	.LC110
	.word	.LC111
	.word	.LC122
	.word	.LC123
	.word	.LC124
	.word	.LC125
	.word	.LC126
	.word	.LC127
	.word	.LC128
	.word	.LC129
	.word	.LC113
	.word	.LC130
	.word	.LC131
	.word	.LC132
	.word	__PRETTY_FUNCTION__.6407
	.word	3415
	.word	.LC5
	.word	.LC34
	.size	check_expr, .-check_expr
	.section	.rodata
	.align	2
.LC133:
	.ascii	"You cannot declare a void type variable\000"
	.align	2
.LC134:
	.ascii	"Return expression does not match function return ty"
	.ascii	"pe\000"
	.align	2
.LC135:
	.ascii	"Cannot redefine the label '%s'\000"
	.text
	.align	2
	.global	check_stmt
	.syntax unified
	.arm
	.fpu softvfp
	.type	check_stmt, %function
check_stmt:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, fp, lr}
	add	fp, sp, #8
	sub	sp, sp, #36
	str	r0, [fp, #-40]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #8
	ldrls	pc, [pc, r3, asl #2]
	b	.L812
.L793:
	.word	.L801
	.word	.L800
	.word	.L799
	.word	.L798
	.word	.L797
	.word	.L796
	.word	.L795
	.word	.L794
	.word	.L792
.L801:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-20]
	ldr	r3, [fp, #-20]
	ldr	r4, [r3]
	bl	type_void
	mov	r3, r0
	cmp	r4, r3
	bne	.L802
	ldr	r0, .L817
	bl	semantic_fatal
.L802:
	ldr	r3, [fp, #-20]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	mov	r1, r3
	mov	r0, r2
	bl	sym_add
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #8]
	ldr	r3, .L817+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	sub	r3, r2, r3
	ldr	r2, .L817+4
	str	r3, [r2]
	ldr	r3, .L817+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	str	r2, [r3, #12]
	b	.L803
.L800:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	check_expr
	b	.L803
.L799:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-28]
	b	.L804
.L805:
	ldr	r0, [fp, #-28]
	bl	check_stmt
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-28]
.L804:
	ldr	r3, [fp, #-28]
	cmp	r3, #0
	bne	.L805
	b	.L803
.L798:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #4]
	cmp	r3, #0
	beq	.L806
	ldr	r3, [fp, #-40]
	ldr	r2, [r3, #4]
	ldr	r3, .L817+8
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #8]
	mov	r1, r3
	mov	r0, r2
	bl	resolve_expr_type
	str	r0, [fp, #-32]
	b	.L807
.L806:
	bl	type_void
	str	r0, [fp, #-32]
.L807:
	ldr	r3, .L817+8
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #8]
	ldr	r2, [fp, #-32]
	cmp	r2, r3
	beq	.L813
	ldr	r0, .L817+12
	bl	semantic_fatal
	b	.L813
.L797:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	label_get
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	beq	.L809
	ldr	r3, [fp, #-24]
	ldr	r3, [r3]
	cmp	r3, #1
	bne	.L814
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, .L817+16
	bl	semantic_fatal
	b	.L814
.L809:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	label_add
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	mov	r2, #1
	str	r2, [r3]
	b	.L814
.L796:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	label_get_or_add
	b	.L803
.L795:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	check_expr
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	check_stmt
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	beq	.L815
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #24]
	mov	r0, r3
	bl	check_stmt
	b	.L815
.L794:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	check_expr
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	check_stmt
	b	.L803
.L792:
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	check_expr
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	check_expr
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	check_expr
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	check_stmt
	b	.L803
.L812:
	ldr	r3, .L817+20
	ldr	r2, .L817+24
	ldr	r1, .L817+28
	ldr	r0, .L817+32
	bl	__assert_fail
.L813:
	nop
	b	.L816
.L814:
	nop
	b	.L816
.L815:
	nop
.L803:
.L816:
	nop
	sub	sp, fp, #8
	@ sp needed
	pop	{r4, fp, pc}
.L818:
	.align	2
.L817:
	.word	.LC133
	.word	func_var_offset
	.word	curr_func
	.word	.LC134
	.word	.LC135
	.word	__PRETTY_FUNCTION__.6430
	.word	3528
	.word	.LC5
	.word	.LC34
	.size	check_stmt, .-check_stmt
	.section	.rodata
	.align	2
.LC136:
	.ascii	"Global variable '%s' already declared\000"
	.align	2
.LC137:
	.ascii	"Function '%s' already declared\000"
	.text
	.align	2
	.global	check_glob_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	check_glob_decl, %function
check_glob_decl:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L820
	cmp	r3, #1
	beq	.L821
	b	.L831
.L820:
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	sym_get
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	beq	.L823
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L833
	bl	semantic_fatal
.L823:
	ldr	r3, [fp, #-24]
	ldr	r2, [r3, #8]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #12]
	mov	r1, r3
	mov	r0, r2
	bl	sym_add
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	mov	r2, #1
	str	r2, [r3, #8]
	b	.L824
.L821:
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	sym_get
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	beq	.L825
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L833+4
	bl	semantic_fatal
.L825:
	ldr	r3, [fp, #-24]
	ldr	r2, [r3, #8]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #12]
	mov	r1, r3
	mov	r0, r2
	bl	sym_add
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	mov	r2, #1
	str	r2, [r3, #8]
	ldr	r2, .L833+8
	ldr	r3, [fp, #-12]
	str	r3, [r2]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #16]
	cmp	r3, #0
	beq	.L832
	ldr	r3, .L833+12
	mvn	r2, #3
	str	r2, [r3]
	ldr	r3, .L833+16
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-20]
	mov	r3, #8
	str	r3, [fp, #-16]
	b	.L827
.L830:
	ldr	r3, [fp, #-20]
	ldr	r0, [r3]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	ldr	r2, [fp, #-16]
	mov	r1, r3
	bl	sym_add_func_param
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r2, r3, #0
	and	r3, r3, #3
	and	r2, r2, #3
	rsbpl	r3, r2, #0
	cmp	r3, #0
	ble	.L828
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r1, r3, #0
	and	r3, r3, #3
	and	r1, r1, #3
	rsbpl	r3, r1, #0
	rsb	r3, r3, #4
	add	r3, r2, r3
	b	.L829
.L828:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
.L829:
	ldr	r2, [fp, #-16]
	add	r3, r2, r3
	str	r3, [fp, #-16]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-20]
.L827:
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	bne	.L830
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	check_stmt
	ldr	r2, .L833+16
	ldr	r3, [fp, #-8]
	str	r3, [r2]
	b	.L832
.L831:
	ldr	r3, .L833+20
	ldr	r2, .L833+24
	ldr	r1, .L833+28
	ldr	r0, .L833+32
	bl	__assert_fail
.L832:
	nop
.L824:
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L834:
	.align	2
.L833:
	.word	.LC136
	.word	.LC137
	.word	curr_func
	.word	func_var_offset
	.word	sym_table_count
	.word	__PRETTY_FUNCTION__.6445
	.word	3590
	.word	.LC5
	.word	.LC34
	.size	check_glob_decl, .-check_glob_decl
	.section	.rodata
	.align	2
.LC138:
	.ascii	"Label '%s' used but not defined\000"
	.text
	.align	2
	.global	check_unit
	.syntax unified
	.arm
	.fpu softvfp
	.type	check_unit, %function
check_unit:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-24]
	bl	sym_reset
	ldr	r3, [fp, #-24]
	str	r3, [fp, #-16]
	b	.L836
.L837:
	ldr	r0, [fp, #-16]
	bl	check_glob_decl
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-16]
.L836:
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bne	.L837
	mov	r3, #0
	str	r3, [fp, #-12]
	b	.L838
.L840:
	ldr	r3, [fp, #-12]
	lsl	r3, r3, #3
	ldr	r2, .L841
	add	r3, r3, r2
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	cmp	r3, #1
	beq	.L839
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, .L841+4
	bl	semantic_error
.L839:
	ldr	r3, [fp, #-12]
	add	r3, r3, #1
	str	r3, [fp, #-12]
.L838:
	ldr	r3, .L841+8
	ldr	r3, [r3]
	ldr	r2, [fp, #-12]
	cmp	r2, r3
	blt	.L840
	nop
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L842:
	.align	2
.L841:
	.word	label_table
	.word	.LC138
	.word	label_table_count
	.size	check_unit, .-check_unit
	.global	lbl_count
	.bss
	.align	2
	.type	lbl_count, %object
	.size	lbl_count, 4
lbl_count:
	.space	4
	.section	.rodata
	.align	2
.LC139:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	lbl_gen
	.syntax unified
	.arm
	.fpu softvfp
	.type	lbl_gen, %function
lbl_gen:
	@ args = 0, pretend = 0, frame = 144
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #144
	ldr	r3, .L846
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #95
	strb	r3, [fp, #-136]
	mov	r3, #95
	strb	r3, [fp, #-135]
	mov	r3, #95
	strb	r3, [fp, #-134]
	mov	r3, #76
	strb	r3, [fp, #-133]
	sub	r3, fp, #136
	add	r3, r3, #4
	ldr	r2, .L846+4
	ldr	r2, [r2]
	ldr	r1, .L846+8
	mov	r0, r3
	bl	sprintf
	str	r0, [fp, #-144]
	ldr	r3, [fp, #-144]
	add	r3, r3, #4
	sub	r2, fp, #4
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3, #-132]
	ldr	r3, .L846+4
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L846+4
	str	r3, [r2]
	sub	r3, fp, #136
	mov	r0, r3
	bl	str_intern
	str	r0, [fp, #-140]
	ldr	r3, [fp, #-140]
	ldr	r2, .L846
	ldr	r1, [r2]
	ldr	r2, [fp, #-8]
	eors	r1, r2, r1
	mov	r2, #0
	beq	.L845
	bl	__stack_chk_fail
.L845:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L847:
	.align	2
.L846:
	.word	.LC139
	.word	lbl_count
	.word	.LC9
	.size	lbl_gen, .-lbl_gen
	.comm	tmp_var_buff,64,4
	.global	tmp_vars_count
	.bss
	.align	2
	.type	tmp_vars_count, %object
	.size	tmp_vars_count, 4
tmp_vars_count:
	.space	4
	.text
	.align	2
	.global	tmp_var
	.syntax unified
	.arm
	.fpu softvfp
	.type	tmp_var, %function
tmp_var:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	ldr	r3, .L850
	mov	r2, #95
	strb	r2, [r3]
	ldr	r3, .L850
	mov	r2, #95
	strb	r2, [r3, #1]
	ldr	r3, .L850
	mov	r2, #95
	strb	r2, [r3, #2]
	ldr	r3, .L850
	mov	r2, #116
	strb	r2, [r3, #3]
	ldr	r0, .L850+4
	ldr	r3, .L850+8
	ldr	r3, [r3]
	mov	r2, r3
	ldr	r1, .L850+12
	bl	sprintf
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	add	r3, r3, #4
	ldr	r2, .L850
	mov	r1, #0
	strb	r1, [r2, r3]
	ldr	r3, .L850+8
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L850+8
	str	r3, [r2]
	ldr	r0, .L850
	bl	str_intern
	mov	r3, r0
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L851:
	.align	2
.L850:
	.word	tmp_var_buff
	.word	tmp_var_buff+4
	.word	tmp_vars_count
	.word	.LC9
	.size	tmp_var, .-tmp_var
	.comm	curr_block,4,4
	.align	2
	.global	add_stmt
	.syntax unified
	.arm
	.fpu softvfp
	.type	add_stmt, %function
add_stmt:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	ldr	r3, .L859
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-8]
	b	.L853
.L855:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-8]
.L853:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L854
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #28]
	cmp	r3, #0
	bne	.L855
.L854:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	beq	.L856
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #28]
	b	.L858
.L856:
	ldr	r3, .L859
	ldr	r3, [r3]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #4]
.L858:
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L860:
	.align	2
.L859:
	.word	curr_block
	.size	add_stmt, .-add_stmt
	.comm	tmp_vars_pool,2800,4
	.comm	tmp_vars_pool_count,4,4
	.align	2
	.global	tmp_vars_pool_reset
	.syntax unified
	.arm
	.fpu softvfp
	.type	tmp_vars_pool_reset, %function
tmp_vars_pool_reset:
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	ldr	r3, .L862
	mov	r2, #0
	str	r2, [r3]
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L863:
	.align	2
.L862:
	.word	tmp_vars_pool_count
	.size	tmp_vars_pool_reset, .-tmp_vars_pool_reset
	.align	2
	.global	tmp_vars_free
	.syntax unified
	.arm
	.fpu softvfp
	.type	tmp_vars_free, %function
tmp_vars_free:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #12
	ldr	r3, .L867
	ldr	r3, [r3]
	sub	r3, r3, #1
	str	r3, [fp, #-8]
	b	.L865
.L866:
	ldr	r1, .L867+4
	ldr	r2, [fp, #-8]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	add	r3, r3, #24
	mov	r2, #0
	str	r2, [r3]
	ldr	r3, [fp, #-8]
	sub	r3, r3, #1
	str	r3, [fp, #-8]
.L865:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bge	.L866
	nop
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L868:
	.align	2
.L867:
	.word	tmp_vars_pool_count
	.word	tmp_vars_pool
	.size	tmp_vars_free, .-tmp_vars_free
	.section	.rodata
	.align	2
.LC140:
	.ascii	"type\000"
	.text
	.align	2
	.global	declare_tmp_var
	.syntax unified
	.arm
	.fpu softvfp
	.type	declare_tmp_var, %function
declare_tmp_var:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-12]
	ldr	r3, .L877
	ldr	r3, [r3]
	sub	r3, r3, #1
	str	r3, [fp, #-16]
	b	.L870
.L872:
	ldr	r1, .L877+4
	ldr	r2, [fp, #-16]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	add	r3, r3, #4
	ldr	r3, [r3]
	ldr	r2, [fp, #-24]
	cmp	r2, r3
	bne	.L871
	ldr	r1, .L877+4
	ldr	r2, [fp, #-16]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r1, r3
	add	r3, r3, #24
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L871
	ldr	r2, [fp, #-16]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L877+4
	add	r3, r3, r2
	str	r3, [fp, #-12]
.L871:
	ldr	r3, [fp, #-16]
	sub	r3, r3, #1
	str	r3, [fp, #-16]
.L870:
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bge	.L872
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	beq	.L873
	ldr	r3, [fp, #-12]
	ldr	r3, [r3]
	str	r3, [fp, #-20]
	b	.L874
.L873:
	bl	tmp_var
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L875
	ldr	r3, .L877+8
	ldr	r2, .L877+12
	ldr	r1, .L877+16
	ldr	r0, .L877+20
	bl	__assert_fail
.L875:
	ldr	r1, [fp, #-20]
	ldr	r0, [fp, #-24]
	bl	make_decl
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_decl
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-8]
	bl	add_stmt
	ldr	r3, .L877
	ldr	r2, [r3]
	mov	r3, r2
	lsl	r3, r3, #3
	sub	r3, r3, r2
	lsl	r3, r3, #2
	ldr	r2, .L877+4
	add	r3, r3, r2
	str	r3, [fp, #-12]
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-20]
	str	r2, [r3]
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #4]
	ldr	r3, .L877
	ldr	r3, [r3]
	add	r3, r3, #1
	ldr	r2, .L877
	str	r3, [r2]
.L874:
	ldr	r3, [fp, #-12]
	mov	r2, #1
	str	r2, [r3, #24]
	ldr	r3, [fp, #-20]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L878:
	.align	2
.L877:
	.word	tmp_vars_pool_count
	.word	tmp_vars_pool
	.word	__PRETTY_FUNCTION__.6497
	.word	3756
	.word	.LC5
	.word	.LC140
	.size	declare_tmp_var, .-declare_tmp_var
	.align	2
	.global	expr_is_atom
	.syntax unified
	.arm
	.fpu softvfp
	.type	expr_is_atom, %function
expr_is_atom:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #12
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	cmp	r3, #1
	beq	.L880
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	cmp	r3, #2
	bne	.L881
.L880:
	mov	r3, #1
	b	.L882
.L881:
	mov	r3, #0
.L882:
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
	.size	expr_is_atom, .-expr_is_atom
	.section	.rodata
	.align	2
.LC141:
	.ascii	"lt->kind == TYPE_STRUCT\000"
	.align	2
.LC142:
	.ascii	"aggr_el\000"
	.align	2
.LC143:
	.ascii	"lt->kind == TYPE_PTR && lt->base_type->kind == TYPE"
	.ascii	"_STRUCT\000"
	.text
	.align	2
	.global	store_expr_temp_var
	.syntax unified
	.arm
	.fpu softvfp
	.type	store_expr_temp_var, %function
store_expr_temp_var:
	@ args = 0, pretend = 0, frame = 88
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, r5, fp, lr}
	add	fp, sp, #12
	sub	sp, sp, #88
	str	r0, [fp, #-96]
	mov	r1, #0
	ldr	r0, [fp, #-96]
	bl	resolve_expr_type
	str	r0, [fp, #-72]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #2
	bne	.L884
	ldr	r3, [fp, #-72]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L884
	ldr	r3, [fp, #-72]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	type_ptr
	str	r0, [fp, #-72]
.L884:
	ldr	r0, [fp, #-72]
	bl	declare_tmp_var
	str	r0, [fp, #-64]
	mov	r3, #0
	str	r3, [fp, #-92]
	ldr	r0, [fp, #-96]
	bl	expr_is_atom
	mov	r3, r0
	cmp	r3, #0
	beq	.L885
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #2
	bne	.L886
	mov	r1, #0
	ldr	r0, [fp, #-96]
	bl	resolve_expr_type
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-68]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L887
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	make_expr_id
	str	r0, [fp, #-92]
	b	.L888
.L887:
	ldr	r0, [fp, #-96]
	bl	dup_expr
	str	r0, [fp, #-92]
	b	.L888
.L886:
	ldr	r0, [fp, #-96]
	bl	dup_expr
	str	r0, [fp, #-92]
	b	.L888
.L885:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L889
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	mov	r3, #0
	str	r3, [fp, #-76]
	mov	r3, #0
	str	r3, [fp, #-80]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-84]
	b	.L890
.L893:
	ldr	r0, [fp, #-84]
	bl	reduce_expr_to_atom
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r3, [fp, #-80]
	cmp	r3, #0
	beq	.L891
	ldr	r3, [fp, #-80]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #28]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-80]
	b	.L892
.L891:
	ldr	r3, [fp, #-16]
	str	r3, [fp, #-80]
	ldr	r3, [fp, #-80]
	str	r3, [fp, #-76]
.L892:
	ldr	r3, [fp, #-84]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-84]
.L890:
	ldr	r3, [fp, #-84]
	cmp	r3, #0
	bne	.L893
	ldr	r2, [fp, #-76]
	ldr	r1, [fp, #-88]
	mov	r0, #3
	bl	make_expr_binary
	str	r0, [fp, #-92]
	b	.L888
.L889:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L894
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	store_expr_temp_var
	str	r0, [fp, #-32]
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-68]
	ldr	r3, [r3, #8]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #14
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-60]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	store_expr_temp_var
	str	r0, [fp, #-28]
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-24]
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-24]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r5, r0
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-60]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-24]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-24]
	bl	make_expr_id
	mov	r5, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #17
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-60]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-24]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-68]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-60]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r3, r0
	mov	r1, r3
	mov	r0, #11
	bl	make_expr_unary
	str	r0, [fp, #-92]
	b	.L888
.L894:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #5
	bne	.L895
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-68]
	ldr	r3, [r3]
	cmp	r3, #6
	beq	.L896
	ldr	r3, .L921
	ldr	r2, .L921+4
	ldr	r1, .L921+8
	ldr	r0, .L921+12
	bl	__assert_fail
.L896:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	ldr	r0, [fp, #-68]
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-32]
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-88]
	bl	dup_expr
	mov	r3, r0
	mov	r1, r3
	mov	r0, #12
	bl	make_expr_unary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, [fp, #-68]
	bl	get_struct_member_offset
	mov	r3, r0
	mov	r0, r3
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #17
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, [fp, #-68]
	bl	get_struct_member
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	bne	.L897
	ldr	r3, .L921
	ldr	r2, .L921+16
	ldr	r1, .L921+8
	ldr	r0, .L921+20
	bl	__assert_fail
.L897:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r0, [fp, #-24]
	bl	make_expr_id
	mov	r3, r0
	mov	r1, r3
	mov	r0, #11
	bl	make_expr_unary
	str	r0, [fp, #-92]
	b	.L888
.L895:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #6
	bne	.L898
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-68]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L899
	ldr	r3, [fp, #-68]
	ldr	r3, [r3, #8]
	ldr	r3, [r3]
	cmp	r3, #6
	beq	.L920
.L899:
	ldr	r3, .L921
	ldr	r2, .L921+24
	ldr	r1, .L921+8
	ldr	r0, .L921+28
	bl	__assert_fail
.L920:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-32]
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-88]
	bl	dup_expr
	mov	r5, r0
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, [fp, #-68]
	bl	get_struct_member_offset
	mov	r3, r0
	mov	r0, r3
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #17
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, [fp, #-68]
	bl	get_struct_member
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	bne	.L901
	ldr	r3, .L921
	ldr	r2, .L921+32
	ldr	r1, .L921+8
	ldr	r0, .L921+20
	bl	__assert_fail
.L901:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r3, r0
	mov	r1, r3
	mov	r0, #11
	bl	make_expr_unary
	str	r0, [fp, #-92]
	b	.L888
.L898:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #6
	ble	.L902
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #12
	bgt	.L902
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	ldr	r1, [fp, #-88]
	mov	r0, r3
	bl	make_expr_unary
	str	r0, [fp, #-92]
	b	.L888
.L902:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #17
	beq	.L903
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #18
	bne	.L904
.L903:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #16]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-40]
	ldr	r3, [fp, #-68]
	ldr	r3, [r3]
	cmp	r3, #3
	beq	.L905
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L906
.L905:
	ldr	r3, [fp, #-68]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L907
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-84]
	b	.L908
.L907:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-84]
	ldr	r3, [fp, #-40]
	str	r3, [fp, #-36]
	ldr	r3, [fp, #-68]
	str	r3, [fp, #-40]
	ldr	r3, [fp, #-36]
	str	r3, [fp, #-68]
.L908:
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-32]
	ldr	r0, [fp, #-68]
	bl	declare_tmp_var
	str	r0, [fp, #-28]
	bl	type_int
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-84]
	bl	dup_expr
	mov	r5, r0
	ldr	r3, [fp, #-68]
	ldr	r3, [r3, #8]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #14
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-88]
	bl	dup_expr
	mov	r5, r0
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	ldr	r0, [fp, #-24]
	bl	make_expr_id
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #17
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r3, r0
	ldr	r1, [fp, #-68]
	mov	r0, r3
	bl	make_expr_cast
	str	r0, [fp, #-92]
	nop
	b	.L888
.L906:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-84]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	ldr	r2, [fp, #-84]
	ldr	r1, [fp, #-88]
	mov	r0, r3
	bl	make_expr_binary
	str	r0, [fp, #-92]
	b	.L888
.L904:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #13
	ble	.L910
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #22
	bgt	.L910
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-84]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	ldr	r2, [fp, #-84]
	ldr	r1, [fp, #-88]
	mov	r0, r3
	bl	make_expr_binary
	str	r0, [fp, #-92]
	b	.L888
.L910:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #24
	bne	.L911
	bl	lbl_gen
	str	r0, [fp, #-56]
	bl	lbl_gen
	str	r0, [fp, #-52]
	bl	lbl_gen
	str	r0, [fp, #-48]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	mov	r2, #0
	mov	r1, #0
	ldr	r0, [fp, #-88]
	bl	make_stmt_if
	str	r0, [fp, #-60]
	ldr	r3, [fp, #-60]
	ldr	r2, [fp, #-56]
	str	r2, [r3, #4]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	mov	r0, #5
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r3, [fp, #-60]
	ldr	r2, [fp, #-52]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r3, [fp, #-60]
	ldr	r2, [fp, #-56]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-44]
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-64]
	bl	make_expr_id
	mov	r3, r0
	ldr	r2, [fp, #-44]
	mov	r1, r3
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-60]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	mov	r0, #5
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r3, [fp, #-60]
	ldr	r2, [fp, #-48]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r3, [fp, #-60]
	ldr	r2, [fp, #-52]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-84]
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-64]
	bl	make_expr_id
	mov	r3, r0
	ldr	r2, [fp, #-44]
	mov	r1, r3
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-60]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r3, [fp, #-60]
	ldr	r2, [fp, #-48]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-60]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	b	.L888
.L911:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #25
	bne	.L912
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-88]
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-84]
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r2, [fp, #-84]
	ldr	r1, [fp, #-88]
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-60]
	str	r2, [r3, #4]
	ldr	r0, [fp, #-60]
	bl	add_stmt
	ldr	r3, [fp, #-88]
	str	r3, [fp, #-92]
	b	.L888
.L912:
	ldr	r3, [fp, #-96]
	ldr	r3, [r3]
	cmp	r3, #26
	bne	.L913
	ldr	r3, [fp, #-96]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-88]
	b	.L914
.L917:
	ldr	r3, [fp, #-88]
	ldr	r3, [r3, #28]
	cmp	r3, #0
	beq	.L915
	ldr	r0, [fp, #-88]
	bl	expr_to_irc
	b	.L916
.L915:
	ldr	r0, [fp, #-88]
	bl	reduce_expr_to_atom
	str	r0, [fp, #-92]
.L916:
	ldr	r3, [fp, #-88]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-88]
.L914:
	ldr	r3, [fp, #-88]
	cmp	r3, #0
	bne	.L917
	b	.L888
.L913:
	ldr	r3, .L921
	ldr	r2, .L921+36
	ldr	r1, .L921+8
	ldr	r0, .L921+40
	bl	__assert_fail
.L888:
	ldr	r3, [fp, #-92]
	cmp	r3, #0
	beq	.L918
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-60]
	ldr	r0, [fp, #-64]
	bl	make_expr_id
	mov	r3, r0
	ldr	r2, [fp, #-92]
	mov	r1, r3
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-60]
	str	r2, [r3, #4]
	ldr	r0, [fp, #-60]
	bl	add_stmt
.L918:
	ldr	r3, [fp, #-64]
	mov	r0, r3
	sub	sp, fp, #12
	@ sp needed
	pop	{r4, r5, fp, pc}
.L922:
	.align	2
.L921:
	.word	__PRETTY_FUNCTION__.6535
	.word	3925
	.word	.LC5
	.word	.LC141
	.word	3954
	.word	.LC142
	.word	3969
	.word	.LC143
	.word	3990
	.word	4152
	.word	.LC34
	.size	store_expr_temp_var, .-store_expr_temp_var
	.section	.rodata
	.align	2
.LC144:
	.ascii	"res\000"
	.text
	.align	2
	.global	reduce_expr_to_atom
	.syntax unified
	.arm
	.fpu softvfp
	.type	reduce_expr_to_atom, %function
reduce_expr_to_atom:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, r5, fp, lr}
	add	fp, sp, #12
	sub	sp, sp, #40
	str	r0, [fp, #-48]
	mov	r3, #0
	str	r3, [fp, #-44]
	ldr	r0, [fp, #-48]
	bl	expr_is_atom
	mov	r3, r0
	cmp	r3, #0
	beq	.L924
	ldr	r0, [fp, #-48]
	bl	dup_expr
	str	r0, [fp, #-44]
	b	.L925
.L924:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3]
	cmp	r3, #11
	bne	.L926
	ldr	r0, [fp, #-48]
	bl	dup_expr
	str	r0, [fp, #-44]
	b	.L925
.L926:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L927
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-40]
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	store_expr_temp_var
	str	r0, [fp, #-32]
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #14
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-28]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	store_expr_temp_var
	str	r0, [fp, #-20]
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-16]
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-16]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-20]
	bl	make_expr_id
	mov	r5, r0
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-28]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-16]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-16]
	bl	make_expr_id
	mov	r5, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #17
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-28]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-20]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-16]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r2, r0
	ldr	r3, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-28]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	ldr	r0, [fp, #-20]
	bl	make_expr_id
	mov	r3, r0
	mov	r1, r3
	mov	r0, #11
	bl	make_expr_unary
	str	r0, [fp, #-44]
	b	.L925
.L927:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3]
	cmp	r3, #5
	bne	.L928
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-40]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #6
	beq	.L929
	ldr	r3, .L938
	ldr	r2, .L938+4
	ldr	r1, .L938+8
	ldr	r0, .L938+12
	bl	__assert_fail
.L929:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-36]
	ldr	r0, [fp, #-40]
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-32]
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-36]
	bl	dup_expr
	mov	r3, r0
	mov	r1, r3
	mov	r0, #12
	bl	make_expr_unary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-20]
	ldr	r0, [fp, #-20]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	ldr	r0, [fp, #-20]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-20]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, [fp, #-40]
	bl	get_struct_member_offset
	mov	r3, r0
	mov	r0, r3
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #17
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, [fp, #-40]
	bl	get_struct_member
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L930
	ldr	r3, .L938
	ldr	r2, .L938+16
	ldr	r1, .L938+8
	ldr	r0, .L938+20
	bl	__assert_fail
.L930:
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-16]
	ldr	r0, [fp, #-16]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-20]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	ldr	r0, [fp, #-16]
	bl	make_expr_id
	mov	r3, r0
	mov	r1, r3
	mov	r0, #11
	bl	make_expr_unary
	str	r0, [fp, #-44]
	b	.L925
.L928:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3]
	cmp	r3, #6
	bne	.L931
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-40]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L932
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #8]
	ldr	r3, [r3]
	cmp	r3, #6
	beq	.L937
.L932:
	ldr	r3, .L938
	ldr	r2, .L938+24
	ldr	r1, .L938+8
	ldr	r0, .L938+28
	bl	__assert_fail
.L937:
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-36]
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-32]
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-36]
	bl	dup_expr
	mov	r5, r0
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, [fp, #-40]
	bl	get_struct_member_offset
	mov	r3, r0
	mov	r0, r3
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #17
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	ldr	r3, [fp, #-48]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, [fp, #-40]
	bl	get_struct_member
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L934
	ldr	r3, .L938
	ldr	r2, .L938+32
	ldr	r1, .L938+8
	ldr	r0, .L938+20
	bl	__assert_fail
.L934:
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-20]
	ldr	r0, [fp, #-20]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-28]
	bl	add_stmt
	ldr	r0, [fp, #-20]
	bl	make_expr_id
	mov	r3, r0
	mov	r1, r3
	mov	r0, #11
	bl	make_expr_unary
	str	r0, [fp, #-44]
	b	.L925
.L931:
	ldr	r0, [fp, #-48]
	bl	store_expr_temp_var
	mov	r3, r0
	mov	r0, r3
	bl	make_expr_id
	str	r0, [fp, #-44]
.L925:
	ldr	r3, [fp, #-44]
	cmp	r3, #0
	bne	.L935
	ldr	r3, .L938
	ldr	r2, .L938+36
	ldr	r1, .L938+8
	ldr	r0, .L938+40
	bl	__assert_fail
.L935:
	ldr	r3, [fp, #-44]
	mov	r0, r3
	sub	sp, fp, #12
	@ sp needed
	pop	{r4, r5, fp, pc}
.L939:
	.align	2
.L938:
	.word	__PRETTY_FUNCTION__.6550
	.word	4238
	.word	.LC5
	.word	.LC141
	.word	4267
	.word	.LC142
	.word	4282
	.word	.LC143
	.word	4303
	.word	4320
	.word	.LC144
	.size	reduce_expr_to_atom, .-reduce_expr_to_atom
	.section	.rodata
	.align	2
.LC145:
	.ascii	"expr->l->kind == EXPR_ID\000"
	.align	2
.LC146:
	.ascii	"lt->size % 4 == 0\000"
	.text
	.align	2
	.global	expr_to_irc
	.syntax unified
	.arm
	.fpu softvfp
	.type	expr_to_irc, %function
expr_to_irc:
	@ args = 0, pretend = 0, frame = 72
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, r5, fp, lr}
	add	fp, sp, #12
	sub	sp, sp, #72
	str	r0, [fp, #-80]
	mov	r3, #0
	str	r3, [fp, #-64]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #1
	beq	.L941
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #2
	beq	.L941
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #3
	bne	.L942
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-72]
	mov	r3, #0
	str	r3, [fp, #-56]
	mov	r3, #0
	str	r3, [fp, #-60]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-68]
	b	.L943
.L946:
	mov	r0, #65
	bl	putchar
	ldr	r0, [fp, #-68]
	bl	reduce_expr_to_atom
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r3, [fp, #-60]
	cmp	r3, #0
	beq	.L944
	ldr	r0, [fp, #-16]
	bl	dup_expr
	mov	r2, r0
	ldr	r3, [fp, #-60]
	str	r2, [r3, #28]
	ldr	r3, [fp, #-60]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-60]
	b	.L945
.L944:
	ldr	r0, [fp, #-16]
	bl	dup_expr
	str	r0, [fp, #-60]
	ldr	r3, [fp, #-60]
	str	r3, [fp, #-56]
.L945:
	ldr	r3, [fp, #-68]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-68]
.L943:
	ldr	r3, [fp, #-68]
	cmp	r3, #0
	bne	.L946
	ldr	r2, [fp, #-56]
	ldr	r1, [fp, #-72]
	mov	r0, #3
	bl	make_expr_binary
	str	r0, [fp, #-64]
	b	.L941
.L942:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L947
	ldr	r0, [fp, #-80]
	bl	reduce_expr_to_atom
	str	r0, [fp, #-64]
	b	.L941
.L947:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #5
	bne	.L948
	ldr	r0, [fp, #-80]
	bl	reduce_expr_to_atom
	str	r0, [fp, #-64]
	b	.L941
.L948:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #6
	bne	.L949
	ldr	r0, [fp, #-80]
	bl	reduce_expr_to_atom
	str	r0, [fp, #-64]
	b	.L941
.L949:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #7
	beq	.L950
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #8
	bne	.L951
.L950:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #7
	bne	.L952
	mov	r3, #17
	str	r3, [fp, #-52]
	b	.L953
.L952:
	mov	r3, #18
	str	r3, [fp, #-52]
.L953:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-72]
	mov	r0, #1
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	ldr	r1, [fp, #-72]
	ldr	r0, [fp, #-52]
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	ldr	r1, [fp, #-72]
	mov	r0, #25
	bl	make_expr_binary
	str	r0, [fp, #-64]
	b	.L941
.L951:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #6
	ble	.L954
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #12
	bgt	.L954
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-72]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	ldr	r1, [fp, #-72]
	mov	r0, r3
	bl	make_expr_unary
	str	r0, [fp, #-64]
	b	.L941
.L954:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #13
	ble	.L955
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #22
	bgt	.L955
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-72]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	ldr	r2, [fp, #-68]
	ldr	r1, [fp, #-72]
	mov	r0, r3
	bl	make_expr_binary
	str	r0, [fp, #-64]
	b	.L941
.L955:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #24
	bne	.L956
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-72]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-68]
	ldr	r2, [fp, #-68]
	ldr	r1, [fp, #-20]
	ldr	r0, [fp, #-72]
	bl	make_expr_ternary
	str	r0, [fp, #-64]
	b	.L941
.L956:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #25
	bne	.L957
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-44]
	ldr	r3, [fp, #-44]
	ldr	r3, [r3]
	cmp	r3, #6
	bne	.L958
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	ldr	r3, [r3]
	cmp	r3, #2
	beq	.L959
	ldr	r3, .L968
	ldr	r2, .L968+4
	ldr	r1, .L968+8
	ldr	r0, .L968+12
	bl	__assert_fail
.L959:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-72]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-68]
	ldr	r0, [fp, #-44]
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-40]
	ldr	r0, [fp, #-44]
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-36]
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-32]
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-28]
	ldr	r0, [fp, #-40]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-72]
	bl	dup_expr
	mov	r3, r0
	mov	r1, r3
	mov	r0, #12
	bl	make_expr_unary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r0, [fp, #-36]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-68]
	bl	dup_expr
	mov	r3, r0
	mov	r1, r3
	mov	r0, #12
	bl	make_expr_unary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-40]
	bl	make_expr_id
	mov	r5, r0
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-36]
	bl	make_expr_id
	mov	r5, r0
	bl	type_char
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	bl	type_int
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-40]
	bl	type_int
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r0, r3
	bl	declare_tmp_var
	str	r0, [fp, #-36]
	ldr	r0, [fp, #-40]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	bl	type_int
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r0, [fp, #-36]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r5, r0
	bl	type_int
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r3, [fp, #-44]
	ldr	r3, [r3, #4]
	and	r3, r3, #3
	cmp	r3, #0
	beq	.L960
	ldr	r3, .L968
	ldr	r2, .L968+16
	ldr	r1, .L968+8
	ldr	r0, .L968+20
	bl	__assert_fail
.L960:
	mov	r3, #0
	str	r3, [fp, #-48]
	b	.L961
.L962:
	ldr	r0, [fp, #-40]
	bl	make_expr_id
	mov	r3, r0
	mov	r1, r3
	mov	r0, #11
	bl	make_expr_unary
	mov	r4, r0
	ldr	r0, [fp, #-36]
	bl	make_expr_id
	mov	r3, r0
	mov	r1, r3
	mov	r0, #11
	bl	make_expr_unary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	mov	r0, #4
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #17
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r5, r0
	mov	r0, #4
	bl	make_expr_intlit
	mov	r3, r0
	mov	r2, r3
	mov	r1, r5
	mov	r0, #17
	bl	make_expr_binary
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r0, [fp, #-40]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-32]
	bl	make_expr_id
	mov	r5, r0
	bl	type_int
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r0, [fp, #-36]
	bl	make_expr_id
	mov	r4, r0
	ldr	r0, [fp, #-28]
	bl	make_expr_id
	mov	r5, r0
	bl	type_int
	mov	r3, r0
	mov	r0, r3
	bl	type_ptr
	mov	r3, r0
	mov	r1, r3
	mov	r0, r5
	bl	make_expr_cast
	mov	r3, r0
	mov	r2, r3
	mov	r1, r4
	mov	r0, #25
	bl	make_expr_binary
	mov	r3, r0
	mov	r0, r3
	bl	make_stmt_expr
	str	r0, [fp, #-24]
	ldr	r0, [fp, #-24]
	bl	add_stmt
	ldr	r3, [fp, #-48]
	add	r3, r3, #1
	str	r3, [fp, #-48]
.L961:
	ldr	r3, [fp, #-44]
	ldr	r3, [r3, #4]
	add	r2, r3, #3
	cmp	r3, #0
	movlt	r3, r2
	movge	r3, r3
	asr	r3, r3, #2
	mov	r2, r3
	ldr	r3, [fp, #-48]
	cmp	r3, r2
	blt	.L962
	b	.L941
.L958:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-72]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-68]
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	ldr	r2, [fp, #-68]
	ldr	r1, [fp, #-72]
	mov	r0, r3
	bl	make_expr_binary
	str	r0, [fp, #-64]
	b	.L941
.L957:
	ldr	r3, [fp, #-80]
	ldr	r3, [r3]
	cmp	r3, #26
	bne	.L963
	ldr	r3, [fp, #-80]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-72]
	b	.L964
.L965:
	ldr	r0, [fp, #-72]
	bl	expr_to_irc
	ldr	r3, [fp, #-72]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-72]
.L964:
	ldr	r3, [fp, #-72]
	cmp	r3, #0
	bne	.L965
	b	.L941
.L963:
	ldr	r3, .L968
	ldr	r2, .L968+24
	ldr	r1, .L968+8
	ldr	r0, .L968+28
	bl	__assert_fail
.L941:
	ldr	r3, [fp, #-64]
	cmp	r3, #0
	beq	.L967
	mov	r0, #1
	bl	make_stmt
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	ldr	r2, [fp, #-64]
	str	r2, [r3, #4]
	ldr	r0, [fp, #-24]
	bl	add_stmt
.L967:
	nop
	sub	sp, fp, #12
	@ sp needed
	pop	{r4, r5, fp, pc}
.L969:
	.align	2
.L968:
	.word	__PRETTY_FUNCTION__.6572
	.word	4430
	.word	.LC5
	.word	.LC145
	.word	4479
	.word	.LC146
	.word	4539
	.word	.LC34
	.size	expr_to_irc, .-expr_to_irc
	.align	2
	.global	stmt_to_irc
	.syntax unified
	.arm
	.fpu softvfp
	.type	stmt_to_irc, %function
stmt_to_irc:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3]
	cmp	r3, #8
	ldrls	pc, [pc, r3, asl #2]
	b	.L990
.L973:
	.word	.L981
	.word	.L980
	.word	.L979
	.word	.L978
	.word	.L977
	.word	.L976
	.word	.L975
	.word	.L974
	.word	.L972
.L981:
	ldr	r0, [fp, #-32]
	bl	dup_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #4]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #4]
	ldr	r3, [r3]
	mov	r1, r3
	mov	r0, r2
	bl	sym_add
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #8]
	ldr	r3, .L992
	ldr	r2, [r3]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #4]
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	sub	r3, r2, r3
	ldr	r2, .L992
	str	r3, [r2]
	ldr	r3, .L992
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	str	r2, [r3, #12]
	b	.L982
.L980:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	expr_to_irc
	b	.L982
.L979:
	ldr	r0, [fp, #-32]
	bl	block_to_irc
	b	.L982
.L978:
	mov	r0, #3
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #4]
	cmp	r3, #0
	beq	.L983
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	expr_is_atom
	mov	r3, r0
	cmp	r3, #0
	beq	.L984
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	dup_expr
	mov	r2, r0
	ldr	r3, [fp, #-16]
	str	r2, [r3, #4]
	b	.L985
.L984:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #4]
	mov	r0, r3
	bl	reduce_expr_to_atom
	mov	r2, r0
	ldr	r3, [fp, #-16]
	str	r2, [r3, #4]
	b	.L985
.L983:
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #4]
.L985:
	ldr	r0, [fp, #-16]
	bl	add_stmt
	b	.L982
.L977:
	ldr	r0, [fp, #-32]
	bl	dup_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	b	.L982
.L976:
	ldr	r0, [fp, #-32]
	bl	dup_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	b	.L982
.L975:
	bl	lbl_gen
	str	r0, [fp, #-24]
	bl	lbl_gen
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	beq	.L986
	bl	lbl_gen
	str	r0, [fp, #-28]
.L986:
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-12]
	mov	r2, #0
	mov	r1, #0
	ldr	r0, [fp, #-12]
	bl	make_stmt_if
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #4]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	mov	r0, #5
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	stmt_to_irc
	mov	r0, #5
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	beq	.L987
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #4]
	b	.L988
.L987:
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
.L988:
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #24]
	cmp	r3, #0
	beq	.L991
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #24]
	mov	r0, r3
	bl	stmt_to_irc
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	b	.L991
.L974:
	bl	lbl_gen
	str	r0, [fp, #-24]
	bl	lbl_gen
	str	r0, [fp, #-20]
	bl	lbl_gen
	str	r0, [fp, #-28]
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-12]
	mov	r2, #0
	mov	r1, #0
	ldr	r0, [fp, #-12]
	bl	make_stmt_if
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	mov	r0, #5
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	stmt_to_irc
	mov	r0, #5
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	b	.L982
.L972:
	bl	lbl_gen
	str	r0, [fp, #-24]
	bl	lbl_gen
	str	r0, [fp, #-20]
	bl	lbl_gen
	str	r0, [fp, #-28]
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	expr_to_irc
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #12]
	mov	r0, r3
	bl	reduce_expr_to_atom
	str	r0, [fp, #-12]
	mov	r2, #0
	mov	r1, #0
	ldr	r0, [fp, #-12]
	bl	make_stmt_if
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	mov	r0, #5
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-20]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #20]
	mov	r0, r3
	bl	stmt_to_irc
	ldr	r3, [fp, #-32]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	expr_to_irc
	mov	r0, #5
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-24]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	mov	r0, #4
	bl	make_stmt
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	mov	r2, #0
	str	r2, [r3, #28]
	ldr	r0, [fp, #-16]
	bl	add_stmt
	b	.L982
.L990:
	ldr	r3, .L992+4
	ldr	r2, .L992+8
	ldr	r1, .L992+12
	ldr	r0, .L992+16
	bl	__assert_fail
.L991:
	nop
.L982:
	bl	tmp_vars_free
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L993:
	.align	2
.L992:
	.word	func_var_offset
	.word	__PRETTY_FUNCTION__.6599
	.word	4762
	.word	.LC5
	.word	.LC34
	.size	stmt_to_irc, .-stmt_to_irc
	.align	2
	.global	block_to_irc
	.syntax unified
	.arm
	.fpu softvfp
	.type	block_to_irc, %function
block_to_irc:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r3, .L997
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-12]
	b	.L995
.L996:
	ldr	r0, [fp, #-12]
	bl	stmt_to_irc
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-12]
.L995:
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	bne	.L996
	ldr	r2, .L997
	ldr	r3, [fp, #-8]
	str	r3, [r2]
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L998:
	.align	2
.L997:
	.word	tmp_vars_pool_count
	.size	block_to_irc, .-block_to_irc
	.align	2
	.global	func_def_to_irc
	.syntax unified
	.arm
	.fpu softvfp
	.type	func_def_to_irc, %function
func_def_to_irc:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-24]
	ldr	r3, .L1003
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r0, #2
	bl	make_stmt
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	mov	r2, #0
	str	r2, [r3, #4]
	ldr	r3, .L1003+4
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r2, .L1003+4
	ldr	r3, [fp, #-12]
	str	r3, [r2]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-20]
	b	.L1000
.L1001:
	ldr	r0, [fp, #-20]
	bl	stmt_to_irc
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-20]
.L1000:
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	bne	.L1001
	ldr	r2, .L1003+4
	ldr	r3, [fp, #-8]
	str	r3, [r2]
	ldr	r2, .L1003
	ldr	r3, [fp, #-16]
	str	r3, [r2]
	ldr	r3, [fp, #-12]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L1004:
	.align	2
.L1003:
	.word	tmp_vars_pool_count
	.word	curr_block
	.size	func_def_to_irc, .-func_def_to_irc
	.section	.rodata
	.align	2
.LC147:
	.ascii	"invalid global declaration\000"
	.text
	.align	2
	.global	unit_to_irc
	.syntax unified
	.arm
	.fpu softvfp
	.type	unit_to_irc, %function
unit_to_irc:
	@ args = 0, pretend = 0, frame = 40
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #40
	str	r0, [fp, #-40]
	bl	sym_reset
	bl	tmp_vars_pool_reset
	mov	r3, #0
	str	r3, [fp, #-32]
	mov	r3, #0
	str	r3, [fp, #-28]
	ldr	r3, [fp, #-40]
	str	r3, [fp, #-24]
	b	.L1006
.L1018:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	beq	.L1007
	mov	r0, #20
	bl	malloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #4]
	mov	r2, #20
	ldr	r1, [fp, #-24]
	mov	r0, r3
	bl	memcpy
	mov	r2, r0
	ldr	r3, [fp, #-28]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-28]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-28]
	b	.L1008
.L1007:
	mov	r0, #20
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-32]
	mov	r2, #20
	ldr	r1, [fp, #-24]
	ldr	r0, [fp, #-32]
	bl	memcpy
	str	r0, [fp, #-32]
	ldr	r3, [fp, #-32]
	str	r3, [fp, #-28]
.L1008:
	ldr	r3, [fp, #-28]
	mov	r2, #0
	str	r2, [r3, #4]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L1009
	cmp	r3, #1
	beq	.L1010
	b	.L1020
.L1009:
	ldr	r3, [fp, #-24]
	ldr	r2, [r3, #8]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #12]
	mov	r1, r3
	mov	r0, r2
	bl	sym_add
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	mov	r2, #1
	str	r2, [r3, #8]
	b	.L1012
.L1010:
	ldr	r3, [fp, #-24]
	ldr	r2, [r3, #8]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #12]
	mov	r1, r3
	mov	r0, r2
	bl	sym_add
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	mov	r2, #1
	str	r2, [r3, #8]
	ldr	r3, .L1021
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-16]
	mov	r3, #8
	str	r3, [fp, #-20]
	b	.L1013
.L1016:
	ldr	r3, [fp, #-16]
	ldr	r0, [r3]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	ldr	r2, [fp, #-20]
	mov	r1, r3
	bl	sym_add_func_param
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r2, r3, #0
	and	r3, r3, #3
	and	r2, r2, #3
	rsbpl	r3, r2, #0
	cmp	r3, #0
	ble	.L1014
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r1, r3, #0
	and	r3, r3, #3
	and	r1, r1, #3
	rsbpl	r3, r1, #0
	rsb	r3, r3, #4
	add	r3, r2, r3
	b	.L1015
.L1014:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
.L1015:
	ldr	r2, [fp, #-20]
	add	r3, r2, r3
	str	r3, [fp, #-20]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-16]
.L1013:
	ldr	r3, [fp, #-16]
	cmp	r3, #0
	bne	.L1016
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #16]
	cmp	r3, #0
	beq	.L1017
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #16]
	mov	r0, r3
	bl	func_def_to_irc
	mov	r2, r0
	ldr	r3, [fp, #-28]
	str	r2, [r3, #16]
.L1017:
	ldr	r2, .L1021
	ldr	r3, [fp, #-8]
	str	r3, [r2]
	b	.L1012
.L1020:
	ldr	r0, .L1021+4
	bl	semantic_fatal
	nop
.L1012:
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-24]
.L1006:
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L1018
	ldr	r3, [fp, #-32]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L1022:
	.align	2
.L1021:
	.word	sym_table_count
	.word	.LC147
	.size	unit_to_irc, .-unit_to_irc
	.section	.rodata
	.align	2
.LC148:
	.ascii	"Invalid symbol %s\000"
	.align	2
.LC149:
	.ascii	"\011movl %s,%%eax\012\000"
	.align	2
.LC150:
	.ascii	"\011movl %%ebp,%%eax\012\000"
	.align	2
.LC151:
	.ascii	"\011addl $%d,%%eax\012\000"
	.align	2
.LC152:
	.ascii	"\011movl (%%eax),%%eax\012\000"
	.text
	.align	2
	.global	compile_lvalue
	.syntax unified
	.arm
	.fpu softvfp
	.type	compile_lvalue, %function
compile_lvalue:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	cmp	r3, #2
	beq	.L1024
	cmp	r3, #11
	beq	.L1025
	b	.L1031
.L1024:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	sym_get
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L1027
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L1032
	bl	fatal
.L1027:
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #8]
	cmp	r3, #0
	beq	.L1028
	ldr	r3, [fp, #-8]
	ldr	r3, [r3]
	mov	r2, r3
	ldr	r1, .L1032+4
	ldr	r0, [fp, #-16]
	bl	fprintf
	b	.L1030
.L1028:
	ldr	r1, .L1032+8
	ldr	r0, [fp, #-16]
	bl	fprintf
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #12]
	mov	r2, r3
	ldr	r1, .L1032+12
	ldr	r0, [fp, #-16]
	bl	fprintf
	b	.L1030
.L1025:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-16]
	bl	compile_lvalue
	ldr	r1, .L1032+16
	ldr	r0, [fp, #-16]
	bl	fprintf
	b	.L1030
.L1031:
	ldr	r3, .L1032+20
	ldr	r2, .L1032+24
	ldr	r1, .L1032+28
	ldr	r0, .L1032+32
	bl	__assert_fail
.L1030:
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L1033:
	.align	2
.L1032:
	.word	.LC148
	.word	.LC149
	.word	.LC150
	.word	.LC151
	.word	.LC152
	.word	__PRETTY_FUNCTION__.6650
	.word	4926
	.word	.LC5
	.word	.LC34
	.size	compile_lvalue, .-compile_lvalue
	.section	.rodata
	.align	2
.LC153:
	.ascii	"\011movl $%d,%%eax\012\000"
	.align	2
.LC154:
	.ascii	"movzbl\000"
	.align	2
.LC155:
	.ascii	"movzwl\000"
	.align	2
.LC156:
	.ascii	"movl\000"
	.align	2
.LC157:
	.ascii	"\011movl %s,%%ebx\012\000"
	.align	2
.LC158:
	.ascii	"\011%s (%%ebx),%%eax\012\000"
	.align	2
.LC159:
	.ascii	"\011%s %d(%%ebp),%%eax\012\000"
	.align	2
.LC160:
	.ascii	"sym->type->kind == TYPE_FUNC\000"
	.align	2
.LC161:
	.ascii	"\011pushl %%eax\012\000"
	.align	2
.LC162:
	.ascii	"\011call %s\012\000"
	.align	2
.LC163:
	.ascii	"\011addl $%d,%%esp\012\000"
	.align	2
.LC164:
	.ascii	"We don't handle \"complex\" function calls\000"
	.align	2
.LC165:
	.ascii	"\011negl %%eax\012\000"
	.align	2
.LC166:
	.ascii	"movzbw\000"
	.align	2
.LC167:
	.ascii	"\011%s %%eax,%%eax\012\000"
	.align	2
.LC168:
	.ascii	"\011movl %%eax,%%ecx\012\000"
	.align	2
.LC169:
	.ascii	"\011imull %%ecx\012\000"
	.align	2
.LC170:
	.ascii	"\011cltd\012\000"
	.align	2
.LC171:
	.ascii	"\011idivl %%ecx\012\000"
	.align	2
.LC172:
	.ascii	"\011addl %%ecx,%%eax\012\000"
	.align	2
.LC173:
	.ascii	"\011subl %%ecx,%%eax\012\000"
	.align	2
.LC174:
	.ascii	"jl\000"
	.align	2
.LC175:
	.ascii	"jle\000"
	.align	2
.LC176:
	.ascii	"jg\000"
	.align	2
.LC177:
	.ascii	"jge\000"
	.align	2
.LC178:
	.ascii	"ins\000"
	.align	2
.LC179:
	.ascii	"\011cmpl %%ecx,%%eax\012\000"
	.align	2
.LC180:
	.ascii	"\011%s %s\012\000"
	.align	2
.LC181:
	.ascii	"\011movl $0,%%eax\012\000"
	.align	2
.LC182:
	.ascii	"\011jmp %s\012\000"
	.align	2
.LC183:
	.ascii	"%s:\012\000"
	.align	2
.LC184:
	.ascii	"\011movl $1,%%eax\012\000"
	.align	2
.LC185:
	.ascii	"movb\000"
	.align	2
.LC186:
	.ascii	"movw\000"
	.align	2
.LC187:
	.ascii	"\011%s %%ecx,(%%eax)\012\000"
	.text
	.align	2
	.global	compile_expr
	.syntax unified
	.arm
	.fpu softvfp
	.type	compile_expr, %function
compile_expr:
	@ args = 0, pretend = 0, frame = 48
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #48
	str	r0, [fp, #-48]
	str	r1, [fp, #-52]
	mov	r3, #0
	str	r3, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-24]
	ldr	r3, [fp, #-52]
	ldr	r3, [r3]
	sub	r3, r3, #1
	cmp	r3, #25
	ldrls	pc, [pc, r3, asl #2]
	b	.L1086
.L1037:
	.word	.L1050
	.word	.L1049
	.word	.L1048
	.word	.L1086
	.word	.L1086
	.word	.L1086
	.word	.L1086
	.word	.L1086
	.word	.L1047
	.word	.L1046
	.word	.L1045
	.word	.L1044
	.word	.L1086
	.word	.L1043
	.word	.L1042
	.word	.L1086
	.word	.L1041
	.word	.L1040
	.word	.L1039
	.word	.L1039
	.word	.L1039
	.word	.L1039
	.word	.L1086
	.word	.L1086
	.word	.L1038
	.word	.L1036
.L1050:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #4]
	mov	r2, r3
	ldr	r1, .L1088
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1049:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	sym_get
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	bne	.L1052
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L1088+4
	bl	fatal
.L1052:
	mov	r1, #0
	ldr	r0, [fp, #-52]
	bl	resolve_expr_type
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #1
	bne	.L1053
	ldr	r3, .L1088+8
	str	r3, [fp, #-24]
	b	.L1054
.L1053:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #2
	bne	.L1055
	ldr	r3, .L1088+12
	str	r3, [fp, #-24]
	b	.L1054
.L1055:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #4
	bne	.L1056
	ldr	r3, .L1088+16
	str	r3, [fp, #-24]
	b	.L1054
.L1056:
	ldr	r3, .L1088+20
	ldr	r2, .L1088+24
	ldr	r1, .L1088+28
	ldr	r0, .L1088+32
	bl	__assert_fail
.L1054:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	ldr	r3, [r3]
	cmp	r3, #4
	bne	.L1057
	ldr	r1, [fp, #-52]
	ldr	r0, [fp, #-48]
	bl	compile_lvalue
	b	.L1051
.L1057:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #8]
	cmp	r3, #0
	beq	.L1059
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	mov	r2, r3
	ldr	r1, .L1088+36
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r2, [fp, #-24]
	ldr	r1, .L1088+40
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1059:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #12]
	ldr	r2, [fp, #-24]
	ldr	r1, .L1088+44
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1048:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	ldr	r3, [r3]
	cmp	r3, #2
	bne	.L1060
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #8]
	mov	r0, r3
	bl	sym_get
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	bne	.L1061
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #8]
	mov	r1, r3
	ldr	r0, .L1088+4
	bl	fatal
.L1061:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	ldr	r3, [r3]
	cmp	r3, #5
	beq	.L1062
	ldr	r3, .L1088+20
	ldr	r2, .L1088+48
	ldr	r1, .L1088+28
	ldr	r0, .L1088+52
	bl	__assert_fail
.L1062:
	mov	r3, #0
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-40]
	mov	r3, #0
	str	r3, [fp, #-28]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-36]
	b	.L1063
.L1066:
	ldr	r3, [fp, #-32]
	add	r3, r3, #1
	str	r3, [fp, #-32]
	ldr	r1, [fp, #-40]
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+56
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r2, r3, #0
	and	r3, r3, #3
	and	r2, r2, #3
	rsbpl	r3, r2, #0
	cmp	r3, #0
	ble	.L1064
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #4]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r1, r3, #0
	and	r3, r3, #3
	and	r1, r1, #3
	rsbpl	r3, r1, #0
	rsb	r3, r3, #4
	add	r3, r2, r3
	b	.L1065
.L1064:
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
.L1065:
	ldr	r2, [fp, #-28]
	add	r3, r2, r3
	str	r3, [fp, #-28]
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-40]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-36]
.L1063:
	ldr	r3, [fp, #-40]
	cmp	r3, #0
	bne	.L1066
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #8]
	mov	r2, r3
	ldr	r1, .L1088+60
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1067
.L1068:
	ldr	r2, [fp, #-28]
	ldr	r1, .L1088+64
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r3, [fp, #-32]
	sub	r3, r3, #1
	str	r3, [fp, #-32]
.L1067:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	bgt	.L1068
	b	.L1051
.L1060:
	ldr	r0, .L1088+68
	bl	fatal
	b	.L1051
.L1045:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+72
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1044:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_lvalue
	b	.L1051
.L1047:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+76
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1046:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, #0
	mov	r0, r3
	bl	resolve_expr_type
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #24]
	ldr	r3, [r3, #4]
	cmp	r2, r3
	bge	.L1070
	ldr	r3, [fp, #-16]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #24]
	ldr	r3, [r3, #4]
	cmp	r2, r3
	bge	.L1070
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #1
	bne	.L1071
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #24]
	ldr	r3, [r3, #4]
	cmp	r3, #2
	bne	.L1071
	ldr	r3, .L1088+80
	str	r3, [fp, #-24]
	b	.L1070
.L1071:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #1
	bne	.L1072
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #24]
	ldr	r3, [r3, #4]
	cmp	r3, #4
	bne	.L1072
	ldr	r3, .L1088+8
	str	r3, [fp, #-24]
	b	.L1070
.L1072:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #2
	bne	.L1073
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #24]
	ldr	r3, [r3, #4]
	cmp	r3, #4
	bne	.L1073
	ldr	r3, .L1088+12
	str	r3, [fp, #-24]
	b	.L1070
.L1073:
	ldr	r3, .L1088+20
	ldr	r2, .L1088+84
	ldr	r1, .L1088+28
	ldr	r0, .L1088+32
	bl	__assert_fail
.L1070:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	beq	.L1087
	ldr	r2, [fp, #-24]
	ldr	r1, .L1088+88
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1087
.L1043:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #16]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+92
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+96
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1042:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #16]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+92
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r3, [fp, #-48]
	mov	r2, #6
	mov	r1, #1
	ldr	r0, .L1088+100
	bl	fwrite
	ldr	r1, .L1088+104
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1041:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #16]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+92
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+108
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1040:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #16]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+92
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+112
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1039:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3]
	cmp	r3, #19
	bne	.L1075
	ldr	r3, .L1088+116
	str	r3, [fp, #-24]
	b	.L1076
.L1075:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3]
	cmp	r3, #20
	bne	.L1077
	ldr	r3, .L1088+120
	str	r3, [fp, #-24]
	b	.L1076
.L1077:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3]
	cmp	r3, #21
	bne	.L1078
	ldr	r3, .L1088+124
	str	r3, [fp, #-24]
	b	.L1076
.L1078:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3]
	cmp	r3, #22
	bne	.L1076
	ldr	r3, .L1088+128
	str	r3, [fp, #-24]
.L1076:
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L1079
	ldr	r3, .L1088+20
	ldr	r2, .L1088+132
	ldr	r1, .L1088+28
	ldr	r0, .L1088+136
	bl	__assert_fail
.L1079:
	bl	lbl_gen
	str	r0, [fp, #-12]
	bl	lbl_gen
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #16]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+92
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+140
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r3, [fp, #-12]
	ldr	r2, [fp, #-24]
	ldr	r1, .L1088+144
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r1, .L1088+148
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r2, [fp, #-8]
	ldr	r1, .L1088+152
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r2, [fp, #-12]
	ldr	r1, .L1088+156
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r1, .L1088+160
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r2, [fp, #-8]
	ldr	r1, .L1088+156
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1038:
	mov	r1, #0
	ldr	r0, [fp, #-52]
	bl	resolve_expr_type
	str	r0, [fp, #-16]
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #1
	bne	.L1080
	ldr	r3, .L1088+164
	str	r3, [fp, #-24]
	b	.L1081
.L1080:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #2
	bne	.L1082
	ldr	r3, .L1088+168
	str	r3, [fp, #-24]
	b	.L1081
.L1082:
	ldr	r3, [fp, #-16]
	ldr	r3, [r3, #4]
	cmp	r3, #4
	bne	.L1083
	ldr	r3, .L1088+16
	str	r3, [fp, #-24]
	b	.L1081
.L1083:
	ldr	r3, .L1088+20
	ldr	r2, .L1088+172
	ldr	r1, .L1088+28
	ldr	r0, .L1088+32
	bl	__assert_fail
.L1081:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #16]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r1, .L1088+92
	ldr	r0, [fp, #-48]
	bl	fprintf
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-48]
	bl	compile_lvalue
	ldr	r2, [fp, #-24]
	ldr	r1, .L1088+176
	ldr	r0, [fp, #-48]
	bl	fprintf
	b	.L1051
.L1036:
	ldr	r3, [fp, #-52]
	ldr	r3, [r3, #12]
	str	r3, [fp, #-40]
	b	.L1084
.L1085:
	ldr	r1, [fp, #-40]
	ldr	r0, [fp, #-48]
	bl	compile_expr
	ldr	r3, [fp, #-40]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-40]
.L1084:
	ldr	r3, [fp, #-40]
	cmp	r3, #0
	bne	.L1085
	b	.L1051
.L1086:
	ldr	r3, .L1088+20
	ldr	r2, .L1088+180
	ldr	r1, .L1088+28
	ldr	r0, .L1088+32
	bl	__assert_fail
.L1087:
	nop
.L1051:
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L1089:
	.align	2
.L1088:
	.word	.LC153
	.word	.LC148
	.word	.LC154
	.word	.LC155
	.word	.LC156
	.word	__PRETTY_FUNCTION__.6667
	.word	4974
	.word	.LC5
	.word	.LC34
	.word	.LC157
	.word	.LC158
	.word	.LC159
	.word	5002
	.word	.LC160
	.word	.LC161
	.word	.LC162
	.word	.LC163
	.word	.LC164
	.word	.LC152
	.word	.LC165
	.word	.LC166
	.word	5073
	.word	.LC167
	.word	.LC168
	.word	.LC169
	.word	.LC170
	.word	.LC171
	.word	.LC172
	.word	.LC173
	.word	.LC174
	.word	.LC175
	.word	.LC176
	.word	.LC177
	.word	5139
	.word	.LC178
	.word	.LC179
	.word	.LC180
	.word	.LC181
	.word	.LC182
	.word	.LC183
	.word	.LC184
	.word	.LC185
	.word	.LC186
	.word	5173
	.word	.LC187
	.word	5194
	.size	compile_expr, .-compile_expr
	.section	.rodata
	.align	2
.LC188:
	.ascii	"decl->type && decl->type->size > 0\000"
	.align	2
.LC189:
	.ascii	"\011subl $%d,%%esp\012\000"
	.text
	.align	2
	.global	compile_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	compile_decl, %function
compile_decl:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L1091
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	cmp	r3, #0
	bgt	.L1095
.L1091:
	ldr	r3, .L1096
	ldr	r2, .L1096+4
	ldr	r1, .L1096+8
	ldr	r0, .L1096+12
	bl	__assert_fail
.L1095:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	rsbs	r2, r3, #0
	and	r3, r3, #3
	and	r2, r2, #3
	rsbpl	r3, r2, #0
	cmp	r3, #0
	ble	.L1093
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	rsbs	r1, r3, #0
	and	r3, r3, #3
	and	r1, r1, #3
	rsbpl	r3, r1, #0
	rsb	r3, r3, #4
	add	r3, r2, r3
	b	.L1094
.L1093:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
.L1094:
	str	r3, [fp, #-12]
	ldr	r2, [fp, #-12]
	ldr	r1, .L1096+16
	ldr	r0, [fp, #-16]
	bl	fprintf
	ldr	r3, [fp, #-20]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	mov	r1, r3
	mov	r0, r2
	bl	sym_add
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	mov	r2, #0
	str	r2, [r3, #8]
	ldr	r3, .L1096+20
	ldr	r2, [r3]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	ldr	r3, [r3, #4]
	sub	r3, r2, r3
	ldr	r2, .L1096+20
	str	r3, [r2]
	ldr	r3, .L1096+20
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	str	r2, [r3, #12]
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L1097:
	.align	2
.L1096:
	.word	__PRETTY_FUNCTION__.6699
	.word	5205
	.word	.LC5
	.word	.LC188
	.word	.LC189
	.word	func_var_offset
	.size	compile_decl, .-compile_decl
	.section	.rodata
	.align	2
.LC190:
	.ascii	"\011popl %%ebx\012\000"
	.align	2
.LC191:
	.ascii	"\011leave\012\000"
	.align	2
.LC192:
	.ascii	"\011ret\012\000"
	.align	2
.LC193:
	.ascii	"\011cmpl $0,%%eax\012\000"
	.align	2
.LC194:
	.ascii	"\011jne %s\012\000"
	.align	2
.LC195:
	.ascii	"Invalid statement\000"
	.text
	.align	2
	.global	compile_stmt
	.syntax unified
	.arm
	.fpu softvfp
	.type	compile_stmt, %function
compile_stmt:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3]
	cmp	r3, #6
	ldrls	pc, [pc, r3, asl #2]
	b	.L1099
.L1101:
	.word	.L1107
	.word	.L1106
	.word	.L1105
	.word	.L1104
	.word	.L1103
	.word	.L1102
	.word	.L1100
.L1107:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, [fp, #-16]
	bl	compile_decl
	b	.L1108
.L1106:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, [fp, #-16]
	bl	compile_expr
	b	.L1108
.L1105:
	ldr	r3, .L1112
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-12]
	b	.L1109
.L1110:
	ldr	r1, [fp, #-12]
	ldr	r0, [fp, #-16]
	bl	compile_stmt
	ldr	r3, [fp, #-12]
	ldr	r3, [r3, #28]
	str	r3, [fp, #-12]
.L1109:
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	bne	.L1110
	ldr	r2, .L1112
	ldr	r3, [fp, #-8]
	str	r3, [r2]
	b	.L1108
.L1104:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	cmp	r3, #0
	beq	.L1111
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r1, r3
	ldr	r0, [fp, #-16]
	bl	compile_expr
.L1111:
	ldr	r1, .L1112+4
	ldr	r0, [fp, #-16]
	bl	fprintf
	ldr	r3, [fp, #-16]
	mov	r2, #7
	mov	r1, #1
	ldr	r0, .L1112+8
	bl	fwrite
	ldr	r3, [fp, #-16]
	mov	r2, #5
	mov	r1, #1
	ldr	r0, .L1112+12
	bl	fwrite
	b	.L1108
.L1103:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r2, r3
	ldr	r1, .L1112+16
	ldr	r0, [fp, #-16]
	bl	fprintf
	b	.L1108
.L1102:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r2, r3
	ldr	r1, .L1112+20
	ldr	r0, [fp, #-16]
	bl	fprintf
	b	.L1108
.L1100:
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #12]
	mov	r1, r3
	ldr	r0, [fp, #-16]
	bl	compile_expr
	ldr	r1, .L1112+24
	ldr	r0, [fp, #-16]
	bl	fprintf
	ldr	r3, [fp, #-20]
	ldr	r3, [r3, #4]
	mov	r2, r3
	ldr	r1, .L1112+28
	ldr	r0, [fp, #-16]
	bl	fprintf
	b	.L1108
.L1099:
	ldr	r0, .L1112+32
	bl	fatal
	nop
.L1108:
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L1113:
	.align	2
.L1112:
	.word	sym_table_count
	.word	.LC190
	.word	.LC191
	.word	.LC192
	.word	.LC183
	.word	.LC182
	.word	.LC193
	.word	.LC194
	.word	.LC195
	.size	compile_stmt, .-compile_stmt
	.section	.rodata
	.align	2
.LC196:
	.ascii	"\011.zero $%d\012\000"
	.align	2
.LC197:
	.ascii	"\011pushl %%ebp\012\000"
	.align	2
.LC198:
	.ascii	"\011movl %%esp,%%ebp\012\000"
	.align	2
.LC199:
	.ascii	"\011pushl %%ebx\012\000"
	.align	2
.LC200:
	.ascii	"Invalid global declaration\000"
	.text
	.align	2
	.global	compile_glob_decl
	.syntax unified
	.arm
	.fpu softvfp
	.type	compile_glob_decl, %function
compile_glob_decl:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	str	r0, [fp, #-32]
	str	r1, [fp, #-36]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L1115
	cmp	r3, #1
	beq	.L1116
	b	.L1126
.L1115:
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #4]
	rsbs	r2, r3, #0
	and	r3, r3, #3
	and	r2, r2, #3
	rsbpl	r3, r2, #0
	cmp	r3, #0
	ble	.L1118
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #12]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #4]
	rsbs	r1, r3, #0
	and	r3, r3, #3
	and	r1, r1, #3
	rsbpl	r3, r1, #0
	rsb	r3, r3, #4
	add	r3, r2, r3
	b	.L1119
.L1118:
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #4]
.L1119:
	str	r3, [fp, #-8]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #8]
	mov	r2, r3
	ldr	r1, .L1127
	ldr	r0, [fp, #-32]
	bl	fprintf
	ldr	r2, [fp, #-8]
	ldr	r1, .L1127+4
	ldr	r0, [fp, #-32]
	bl	fprintf
	ldr	r3, [fp, #-36]
	ldr	r2, [r3, #8]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #12]
	mov	r1, r3
	mov	r0, r2
	bl	sym_add
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	mov	r2, #1
	str	r2, [r3, #8]
	b	.L1120
.L1116:
	ldr	r3, .L1127+8
	mvn	r2, #3
	str	r2, [r3]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #16]
	cmp	r3, #0
	beq	.L1121
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #8]
	mov	r2, r3
	ldr	r1, .L1127
	ldr	r0, [fp, #-32]
	bl	fprintf
	ldr	r1, .L1127+12
	ldr	r0, [fp, #-32]
	bl	fprintf
	ldr	r1, .L1127+16
	ldr	r0, [fp, #-32]
	bl	fprintf
	ldr	r1, .L1127+20
	ldr	r0, [fp, #-32]
	bl	fprintf
	ldr	r3, .L1127+24
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #12]
	ldr	r3, [r3, #16]
	str	r3, [fp, #-24]
	mov	r3, #8
	str	r3, [fp, #-20]
	b	.L1122
.L1125:
	ldr	r3, [fp, #-24]
	ldr	r0, [r3]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	ldr	r2, [fp, #-20]
	mov	r1, r3
	bl	sym_add_func_param
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r2, r3, #0
	and	r3, r3, #3
	and	r2, r2, #3
	rsbpl	r3, r2, #0
	cmp	r3, #0
	ble	.L1123
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
	rsbs	r1, r3, #0
	and	r3, r3, #3
	and	r1, r1, #3
	rsbpl	r3, r1, #0
	rsb	r3, r3, #4
	add	r3, r2, r3
	b	.L1124
.L1123:
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #4]
	ldr	r3, [r3, #4]
.L1124:
	ldr	r2, [fp, #-20]
	add	r3, r2, r3
	str	r3, [fp, #-20]
	ldr	r3, [fp, #-24]
	ldr	r3, [r3, #8]
	str	r3, [fp, #-24]
.L1122:
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L1125
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #16]
	mov	r1, r3
	ldr	r0, [fp, #-32]
	bl	compile_stmt
	ldr	r1, .L1127+28
	ldr	r0, [fp, #-32]
	bl	fprintf
	ldr	r3, [fp, #-32]
	mov	r2, #7
	mov	r1, #1
	ldr	r0, .L1127+32
	bl	fwrite
	ldr	r3, [fp, #-32]
	mov	r2, #5
	mov	r1, #1
	ldr	r0, .L1127+36
	bl	fwrite
	ldr	r2, .L1127+24
	ldr	r3, [fp, #-16]
	str	r3, [r2]
.L1121:
	ldr	r3, [fp, #-36]
	ldr	r2, [r3, #8]
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #12]
	mov	r1, r3
	mov	r0, r2
	bl	sym_add
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	mov	r2, #1
	str	r2, [r3, #8]
	b	.L1120
.L1126:
	ldr	r0, .L1127+40
	bl	fatal
	nop
.L1120:
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L1128:
	.align	2
.L1127:
	.word	.LC183
	.word	.LC196
	.word	func_var_offset
	.word	.LC197
	.word	.LC198
	.word	.LC199
	.word	sym_table_count
	.word	.LC190
	.word	.LC191
	.word	.LC192
	.word	.LC200
	.size	compile_glob_decl, .-compile_glob_decl
	.section	.rodata
	.align	2
.LC201:
	.ascii	"___entry:\012\000"
	.align	2
.LC202:
	.ascii	"\011call main\012\000"
	.align	2
.LC203:
	.ascii	"\011movl %%eax,%%ebx\012\000"
	.align	2
.LC204:
	.ascii	"\011syscall\012\000"
	.text
	.align	2
	.global	compile_unit
	.syntax unified
	.arm
	.fpu softvfp
	.type	compile_unit, %function
compile_unit:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	bl	sym_reset
	ldr	r3, [fp, #-16]
	mov	r2, #10
	mov	r1, #1
	ldr	r0, .L1132
	bl	fwrite
	ldr	r1, .L1132+4
	ldr	r0, [fp, #-16]
	bl	fprintf
	ldr	r1, .L1132+8
	ldr	r0, [fp, #-16]
	bl	fprintf
	ldr	r3, [fp, #-16]
	mov	r2, #11
	mov	r1, #1
	ldr	r0, .L1132+12
	bl	fwrite
	ldr	r1, .L1132+16
	ldr	r0, [fp, #-16]
	bl	fprintf
	ldr	r1, .L1132+20
	ldr	r0, [fp, #-16]
	bl	fprintf
	ldr	r3, [fp, #-16]
	mov	r2, #9
	mov	r1, #1
	ldr	r0, .L1132+24
	bl	fwrite
	ldr	r3, [fp, #-16]
	mov	r2, #7
	mov	r1, #1
	ldr	r0, .L1132+28
	bl	fwrite
	ldr	r3, [fp, #-16]
	mov	r2, #5
	mov	r1, #1
	ldr	r0, .L1132+32
	bl	fwrite
	ldr	r3, [fp, #-20]
	str	r3, [fp, #-8]
	b	.L1130
.L1131:
	ldr	r1, [fp, #-8]
	ldr	r0, [fp, #-16]
	bl	compile_glob_decl
	ldr	r3, [fp, #-8]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-8]
.L1130:
	ldr	r3, [fp, #-8]
	cmp	r3, #0
	bne	.L1131
	nop
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L1133:
	.align	2
.L1132:
	.word	.LC201
	.word	.LC197
	.word	.LC198
	.word	.LC202
	.word	.LC203
	.word	.LC184
	.word	.LC204
	.word	.LC191
	.word	.LC192
	.size	compile_unit, .-compile_unit
	.section	.rodata
	.align	2
.LC205:
	.ascii	"Usage: ./ezc <input_file> [<output_file>]\000"
	.align	2
.LC206:
	.ascii	"r\000"
	.align	2
.LC207:
	.ascii	"w\000"
	.align	2
.LC208:
	.ascii	"a.out.asm\000"
	.text
	.align	2
	.global	main
	.syntax unified
	.arm
	.fpu softvfp
	.type	main, %function
main:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	str	r0, [fp, #-32]
	str	r1, [fp, #-36]
	ldr	r3, [fp, #-32]
	cmp	r3, #1
	bgt	.L1135
	ldr	r0, .L1137
	bl	puts
	mov	r3, #1
	b	.L1136
.L1135:
	ldr	r3, [fp, #-36]
	ldr	r3, [r3, #4]
	str	r3, [fp, #-28]
	ldr	r1, .L1137+4
	ldr	r0, [fp, #-28]
	bl	fopen
	str	r0, [fp, #-24]
	mov	r2, #2
	mov	r1, #0
	ldr	r0, [fp, #-24]
	bl	fseek
	ldr	r0, [fp, #-24]
	bl	ftell
	str	r0, [fp, #-20]
	mov	r2, #0
	mov	r1, #0
	ldr	r0, [fp, #-24]
	bl	fseek
	ldr	r3, [fp, #-20]
	mov	r0, r3
	bl	malloc
	mov	r3, r0
	str	r3, [fp, #-16]
	ldr	r1, [fp, #-20]
	ldr	r3, [fp, #-24]
	mov	r2, #1
	ldr	r0, [fp, #-16]
	bl	fread
	ldr	r0, [fp, #-24]
	bl	fclose
	ldr	r3, [fp, #-20]
	sub	r3, r3, #1
	ldr	r2, [fp, #-16]
	add	r3, r2, r3
	mov	r2, #0
	strb	r2, [r3]
	ldr	r1, .L1137+8
	ldr	r0, .L1137+12
	bl	fopen
	str	r0, [fp, #-12]
	ldr	r0, [fp, #-16]
	bl	parser_init
	bl	parse_unit
	str	r0, [fp, #-8]
	ldr	r0, [fp, #-8]
	bl	check_unit
	ldr	r0, [fp, #-8]
	bl	unit_to_irc
	str	r0, [fp, #-8]
	ldr	r1, [fp, #-8]
	ldr	r0, [fp, #-12]
	bl	compile_unit
	ldr	r0, [fp, #-12]
	bl	fclose
	mov	r3, #0
.L1136:
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L1138:
	.align	2
.L1137:
	.word	.LC205
	.word	.LC206
	.word	.LC207
	.word	.LC208
	.size	main, .-main
	.section	.rodata
	.align	2
	.type	__PRETTY_FUNCTION__.5452, %object
	.size	__PRETTY_FUNCTION__.5452, 12
__PRETTY_FUNCTION__.5452:
	.ascii	"type_struct\000"
	.align	2
	.type	__PRETTY_FUNCTION__.5659, %object
	.size	__PRETTY_FUNCTION__.5659, 11
__PRETTY_FUNCTION__.5659:
	.ascii	"print_expr\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6039, %object
	.size	__PRETTY_FUNCTION__.6039, 10
__PRETTY_FUNCTION__.6039:
	.ascii	"_tok_next\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6086, %object
	.size	__PRETTY_FUNCTION__.6086, 11
__PRETTY_FUNCTION__.6086:
	.ascii	"tok_expect\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6124, %object
	.size	__PRETTY_FUNCTION__.6124, 10
__PRETTY_FUNCTION__.6124:
	.ascii	"eval_expr\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6354, %object
	.size	__PRETTY_FUNCTION__.6354, 18
__PRETTY_FUNCTION__.6354:
	.ascii	"resolve_expr_type\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6407, %object
	.size	__PRETTY_FUNCTION__.6407, 11
__PRETTY_FUNCTION__.6407:
	.ascii	"check_expr\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6430, %object
	.size	__PRETTY_FUNCTION__.6430, 11
__PRETTY_FUNCTION__.6430:
	.ascii	"check_stmt\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6445, %object
	.size	__PRETTY_FUNCTION__.6445, 16
__PRETTY_FUNCTION__.6445:
	.ascii	"check_glob_decl\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6497, %object
	.size	__PRETTY_FUNCTION__.6497, 16
__PRETTY_FUNCTION__.6497:
	.ascii	"declare_tmp_var\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6535, %object
	.size	__PRETTY_FUNCTION__.6535, 20
__PRETTY_FUNCTION__.6535:
	.ascii	"store_expr_temp_var\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6550, %object
	.size	__PRETTY_FUNCTION__.6550, 20
__PRETTY_FUNCTION__.6550:
	.ascii	"reduce_expr_to_atom\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6572, %object
	.size	__PRETTY_FUNCTION__.6572, 12
__PRETTY_FUNCTION__.6572:
	.ascii	"expr_to_irc\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6599, %object
	.size	__PRETTY_FUNCTION__.6599, 12
__PRETTY_FUNCTION__.6599:
	.ascii	"stmt_to_irc\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6650, %object
	.size	__PRETTY_FUNCTION__.6650, 15
__PRETTY_FUNCTION__.6650:
	.ascii	"compile_lvalue\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6667, %object
	.size	__PRETTY_FUNCTION__.6667, 13
__PRETTY_FUNCTION__.6667:
	.ascii	"compile_expr\000"
	.align	2
	.type	__PRETTY_FUNCTION__.6699, %object
	.size	__PRETTY_FUNCTION__.6699, 13
__PRETTY_FUNCTION__.6699:
	.ascii	"compile_decl\000"
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
	.section	.note.GNU-stack,"",%progbits
