// File: /workspace/github_cpp_makefile_star2_O3/yanlinlin82[P]icpp/icpp.cpp
// Function: parse_array_element(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, bool, bool, int)
string parse_array_element(string name, string symbol_type_name,
		int offset, bool is_global, bool generate_code, int depth)
{
	assert(symbol_type_name.substr(symbol_type_name.size() - 1) == "]");
	auto it = symbol_dim.find(name);
	if (it == symbol_dim.end()) {
		err("symbol '%s' (type = '%s') is not an array!\n",
				name.c_str(), symbol_type_name.c_str());
	}
	const auto& dim = it->second.second;
	if (is_global) {
		if (generate_code) add_assembly_code(LEA, offset, name + "\t" + symbol_type_name);
	} else {
		if (generate_code) add_assembly_code(LLEA, offset, name + "\t" + symbol_type_name);
	}
	if (generate_code) add_assembly_code(PUSH);
	next();
	for (size_t i = 0; ; ++i) {
		if (i > 0) {
			if (generate_code) add_assembly_code(PUSH);
			if (generate_code) add_assembly_code(MOV, dim[i]);
			if (generate_code) add_assembly_code(MUL);
		}
		parse_expression(";", depth, generate_code);
		if (i > 0) {
			if (generate_code) add_assembly_code(ADD);
		}
		expect_token("]", "[");
		next();
		if (token != "[") {
			int factor = 1;
			for (++i; i + 1 < dim.size(); ++i) {
				factor *= dim[i];
			}
			if (factor > 1) {
				if (generate_code) add_assembly_code(PUSH);
				if (generate_code) add_assembly_code(MOV, factor);
				if (generate_code) add_assembly_code(MUL);
			}
			break;
		}
		next();
	}
	if (generate_code) add_assembly_code(ADD);
	if (generate_code) add_assembly_code(PUSH);
	if (generate_code) add_assembly_code(SGET);
	if (!symbol_type_name.empty()) {
		if (symbol_type_name[symbol_type_name.size() - 1] == '*') {
			symbol_type_name = symbol_type_name.substr(0, symbol_type_name.size() - 1);
			while (!symbol_type_name.empty() && symbol_type_name[symbol_type_name.size() - 1] == ' ') {
				symbol_type_name = symbol_type_name.substr(0, symbol_type_name.size() - 1);
			}
		}
	}
	return symbol_type_name;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x268, %rsp            # imm = 0x268
movl %r9d, %r13d
movl %r8d, %r15d
movl %ecx, %ebx
movq %rdx, %rax
movq %rsi, %r14
movq %rdi, -0x60(%rbp)
movq 0x8(%rdx), %rdx
decq %rdx
leaq -0x58(%rbp), %r12
movq %r12, %rdi
movq %rax, -0x38(%rbp)
movq %rax, %rsi
movq $-0x1, %rcx
callq 0x31f0
leaq 0xe6e1(%rip), %rsi      # 0x1b20b
movq %r12, %rdi
callq 0x30b0
testl %eax, %eax
jne 0xd332
leaq -0x48(%rbp), %r12
movq -0x10(%r12), %rdi
cmpq %r12, %rdi
je 0xcb54
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x31d0
leaq 0x16925(%rip), %rdi     # 0x23480
movq %r14, %rsi
callq 0x1943a
movq %rax, -0x70(%rbp)
testq %rax, %rax
jne 0xcb84
movq (%r14), %rsi
movq -0x38(%rbp), %rax
movq (%rax), %rdx
leaq 0xed41(%rip), %rdi      # 0x1b8be
xorl %eax, %eax
callq 0x1546f
testb %r15b, %r15b
je 0xcbff
testb %r13b, %r13b
je 0xcd66
leaq -0x58(%rbp), %r15
movq %r12, (%r15)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x16942
leaq 0xf8ce(%rip), %rsi      # 0x1c480
movq %r15, %rdi
callq 0x3360
movq -0x38(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x58(%rbp), %rdi
callq 0x30c0
leaq -0xe0(%rbp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xcc71
movq %rdx, -0xf0(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xe0(%rbp)
jmp 0xcc78
testb %r13b, %r13b
je 0xcd66
leaq -0x58(%rbp), %r15
movq %r12, (%r15)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x16942
leaq 0xf858(%rip), %rsi      # 0x1c480
movq %r15, %rdi
callq 0x3360
movq -0x38(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x58(%rbp), %rdi
callq 0x30c0
leaq -0xc0(%rbp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xccb7
movq %rdx, -0xd0(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xc0(%rbp)
jmp 0xccbe
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rsi
leaq -0xf0(%rbp), %rdx
movq %rsi, 0x8(%rdx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x5, %edi
movl %ebx, %esi
callq 0x4d40
movq -0xf0(%rbp), %rdi
cmpq %r14, %rdi
je 0xcd03
movq -0xe0(%rbp), %rsi
jmp 0xccfb
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rsi
leaq -0xd0(%rbp), %rdx
movq %rsi, 0x8(%rdx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x8, %edi
movl %ebx, %esi
callq 0x4d40
movq -0xd0(%rbp), %rdi
cmpq %r14, %rdi
je 0xcd03
movq -0xc0(%rbp), %rsi
incq %rsi
callq 0x31d0
movq -0x58(%rbp), %rdi
cmpq %r12, %rdi
je 0xcd18
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x31d0
leaq -0x260(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0xf757(%rip), %rdx      # 0x1c481
leaq -0x270(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x169e0
movl $0x1, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d40
movq -0x270(%rbp), %rdi
cmpq %r14, %rdi
je 0xcd66
movq -0x260(%rbp), %rsi
incq %rsi
callq 0x31d0
callq 0x572d
leaq -0x80(%rbp), %r12
movl $0x2, %r15d
movl %r13d, %r14d
movzbl %r14b, %eax
movl %eax, -0x64(%rbp)
movl %r13d, -0x2c(%rbp)
cmpq $0x2, %r15
setne %bl
andb %r14b, %bl
cmpb $0x1, %bl
jne 0xce9b
leaq -0x180(%rbp), %r13
movq %r13, -0x190(%rbp)
leaq -0x190(%rbp), %r14
movq %r14, %rdi
leaq 0xf6cc(%rip), %rdx      # 0x1c481
movq %rdx, %rsi
callq 0x169e0
movl $0x1, %edi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4d40
movq -0x190(%rbp), %rdi
cmpq %r13, %rdi
je 0xcde7
movq -0x180(%rbp), %rsi
incq %rsi
callq 0x31d0
movq -0x70(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x8(%rax,%r15,4), %r13d
leaq -0x160(%rbp), %r14
movq %r14, -0x170(%rbp)
leaq -0x170(%rbp), %r12
movq %r12, %rdi
leaq 0xf66e(%rip), %rdx      # 0x1c481
movq %rdx, %rsi
callq 0x169e0
movl $0x4, %edi
movl %r13d, %esi
movq %r12, %rdx
callq 0x4d40
movq -0x170(%rbp), %rdi
cmpq %r14, %rdi
je 0xce46
movq -0x160(%rbp), %rsi
incq %rsi
callq 0x31d0
leaq -0x140(%rbp), %r14
movq %r14, -0x150(%rbp)
leaq -0x150(%rbp), %r12
movq %r12, %rdi
leaq 0xf61c(%rip), %rdx      # 0x1c481
movq %rdx, %rsi
callq 0x169e0
movl $0xf, %edi
xorl %esi, %esi
movq %r12, %rdx
callq 0x4d40
leaq -0x80(%rbp), %r12
movq -0x150(%rbp), %rdi
cmpq %r14, %rdi
je 0xce9b
movq -0x140(%rbp), %rsi
incq %rsi
callq 0x31d0
leaq -0xa0(%rbp), %rax
movq %rax, -0xb0(%rbp)
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
leaq 0xe355(%rip), %rsi      # 0x1b20f
leaq 0xe34f(%rip), %rdx      # 0x1b210
callq 0x169e0
leaq -0x290(%rbp), %rdi
movq %r13, %rsi
movl 0x10(%rbp), %edx
movl -0x64(%rbp), %ecx
callq 0x8d9d
movq -0x290(%rbp), %rdi
leaq -0x280(%rbp), %rax
cmpq %rax, %rdi
je 0xcefd
movq -0x280(%rbp), %rsi
incq %rsi
callq 0x31d0
movq -0xb0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
cmpq %rax, %rdi
je 0xcf1f
movq -0xa0(%rbp), %rsi
incq %rsi
callq 0x31d0
testb %bl, %bl
leaq -0x120(%rbp), %rbx
leaq -0x90(%rbp), %r14
je 0xcf82
movq %rbx, -0x130(%rbp)
leaq -0x130(%rbp), %r14
movq %r14, %rdi
leaq 0xf538(%rip), %rdx      # 0x1c481
movq %rdx, %rsi
callq 0x169e0
movl $0xd, %edi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4d40
movq -0x130(%rbp), %rdi
cmpq %rbx, %rdi
leaq -0x90(%rbp), %r14
je 0xcf82
movq -0x120(%rbp), %rsi
incq %rsi
callq 0x31d0
movq %r12, -0x90(%rbp)
movq %r14, %rdi
leaq 0xe278(%rip), %rsi      # 0x1b20b
leaq 0xe272(%rip), %rdx      # 0x1b20c
callq 0x169e0
leaq -0x100(%rbp), %rbx
movq %rbx, -0x110(%rbp)
leaq -0x110(%rbp), %r13
movq %r13, %rdi
leaq 0xeba1(%rip), %rsi      # 0x1bb5f
leaq 0xeb9b(%rip), %rdx      # 0x1bb60
callq 0x169e0
movq %r14, %rdi
movq %r13, %rsi
callq 0x5c40
movq -0x110(%rbp), %rdi
cmpq %rbx, %rdi
je 0xcff0
movq -0x100(%rbp), %rsi
incq %rsi
callq 0x31d0
movq -0x90(%rbp), %rdi
cmpq %r12, %rdi
je 0xd008
movq -0x80(%rbp), %rsi
incq %rsi
callq 0x31d0
callq 0x572d
leaq 0x1628c(%rip), %rdi     # 0x232a0
leaq 0xeb44(%rip), %rsi      # 0x1bb5f
callq 0x30b0
testl %eax, %eax
jne 0xd035
callq 0x572d
incq %r15
movl -0x2c(%rbp), %r14d
jmp 0xcd83
movq -0x70(%rbp), %rcx
movq 0x30(%rcx), %rax
movq 0x38(%rcx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rcx, %r15
leaq -0x48(%rbp), %r12
jae 0xd16f
movl $0x1, %ebx
imull -0x4(%rax,%r15,4), %ebx
incq %r15
cmpq %rcx, %r15
jb 0xd05a
cmpl $0x2, %ebx
jl 0xd16f
cmpb $0x0, -0x2c(%rbp)
movq -0x38(%rbp), %r15
je 0xd267
leaq -0x240(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0xf3f0(%rip), %rdx      # 0x1c481
leaq -0x250(%rbp), %r14
movq %r14, %rdi
movq %rdx, %rsi
callq 0x169e0
movl $0x1, %edi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4d40
movq -0x250(%rbp), %rdi
cmpq %r15, %rdi
je 0xd0cd
movq -0x240(%rbp), %rsi
incq %rsi
callq 0x31d0
leaq -0x220(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0xf3a2(%rip), %rdx      # 0x1c481
leaq -0x230(%rbp), %r14
movq %r14, %rdi
movq %rdx, %rsi
callq 0x169e0
movl $0x4, %edi
movl %ebx, %esi
movq %r14, %rdx
callq 0x4d40
movq -0x230(%rbp), %rdi
cmpq %r15, %rdi
je 0xd11b
movq -0x220(%rbp), %rsi
incq %rsi
callq 0x31d0
leaq -0x200(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0xf354(%rip), %rdx      # 0x1c481
leaq -0x210(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x169e0
movl $0xf, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d40
movq -0x38(%rbp), %r15
movq -0x210(%rbp), %rdi
cmpq %r14, %rdi
je 0xd17d
movq -0x200(%rbp), %rsi
incq %rsi
callq 0x31d0
jmp 0xd17d
cmpb $0x0, -0x2c(%rbp)
movq -0x38(%rbp), %r15
je 0xd267
leaq -0x1e0(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0xf2f2(%rip), %rdx      # 0x1c481
leaq -0x1f0(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x169e0
movl $0xd, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d40
movq -0x1f0(%rbp), %rdi
cmpq %r14, %rdi
je 0xd1cb
movq -0x1e0(%rbp), %rsi
incq %rsi
callq 0x31d0
leaq -0x1c0(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0xf2a4(%rip), %rdx      # 0x1c481
leaq -0x1d0(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x169e0
movl $0x1, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d40
movq -0x1d0(%rbp), %rdi
cmpq %r14, %rdi
je 0xd219
movq -0x1c0(%rbp), %rsi
incq %rsi
callq 0x31d0
leaq -0x1a0(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0xf256(%rip), %rdx      # 0x1c481
leaq -0x1b0(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x169e0
movl $0xb, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d40
movq -0x1b0(%rbp), %rdi
cmpq %r14, %rdi
je 0xd267
movq -0x1a0(%rbp), %rsi
incq %rsi
callq 0x31d0
movq 0x8(%r15), %rcx
testq %rcx, %rcx
je 0xd2e1
movq (%r15), %rax
cmpb $0x2a, -0x1(%rax,%rcx)
jne 0xd2e3
decq %rcx
leaq -0x58(%rbp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x31f0
movq %r15, %rdi
movq %rbx, %rsi
callq 0x3240
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0xd2ad
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x31d0
movq 0x8(%r15), %rcx
testq %rcx, %rcx
je 0xd2e1
movq (%r15), %rax
cmpb $0x20, -0x1(%rax,%rcx)
jne 0xd2e3
decq %rcx
movq %rbx, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x31f0
movq %r15, %rdi
movq %rbx, %rsi
callq 0x3240
movq -0x58(%rbp), %rdi
jmp 0xd29c
xorl %ecx, %ecx
movq -0x60(%rbp), %rax
leaq 0x10(%rax), %rdx
movq %rdx, (%rax)
movq (%r15), %rsi
leaq 0x10(%r15), %rdi
cmpq %rdi, %rsi
je 0xd306
movq %rsi, (%rax)
movq (%rdi), %rdx
movq %rdx, 0x10(%rax)
jmp 0xd30c
movups (%rdi), %xmm0
movups %xmm0, (%rdx)
movq %rcx, 0x8(%rax)
movq %rdi, (%r15)
movq $0x0, 0x8(%r15)
movb $0x0, 0x10(%r15)
addq $0x268, %rsp            # imm = 0x268
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xe508(%rip), %rdi      # 0x1b841
leaq 0xe0f4(%rip), %rsi      # 0x1b434
leaq 0xe536(%rip), %rcx      # 0x1b87d
movl $0x302, %edx            # imm = 0x302
callq 0x3130
movq %rax, %rbx
movq -0x210(%rbp), %rdi
cmpq %r14, %rdi
je 0xd557
movq -0x200(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0x230(%rbp), %rdi
cmpq %r15, %rdi
je 0xd557
movq -0x220(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0x250(%rbp), %rdi
cmpq %r15, %rdi
je 0xd557
movq -0x240(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0xd0(%rbp), %rdi
cmpq %r14, %rdi
je 0xd3ef
movq -0xc0(%rbp), %rsi
jmp 0xd3dc
movq %rax, %rbx
movq -0xf0(%rbp), %rdi
cmpq %r14, %rdi
je 0xd3ef
movq -0xe0(%rbp), %rsi
incq %rsi
callq 0x31d0
jmp 0xd3ef
jmp 0xd3ec
jmp 0xd3ec
jmp 0xd3ec
movq %rax, %rbx
movq -0x58(%rbp), %rdi
cmpq %r12, %rdi
je 0xd557
movq -0x48(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0x1b0(%rbp), %rdi
cmpq %r14, %rdi
je 0xd557
movq -0x1a0(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0x1d0(%rbp), %rdi
cmpq %r14, %rdi
je 0xd557
movq -0x1c0(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0x1f0(%rbp), %rdi
cmpq %r14, %rdi
je 0xd557
movq -0x1e0(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0x270(%rbp), %rdi
cmpq %r14, %rdi
je 0xd557
movq -0x260(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0x190(%rbp), %rdi
cmpq %r13, %rdi
je 0xd557
movq -0x180(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0x150(%rbp), %rdi
cmpq %r14, %rdi
je 0xd557
movq -0x140(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0x170(%rbp), %rdi
cmpq %r14, %rdi
je 0xd557
movq -0x160(%rbp), %rsi
jmp 0xd54f
movq %rbx, %rcx
movq %rax, %rbx
movq -0x130(%rbp), %rdi
cmpq %rcx, %rdi
je 0xd557
movq -0x120(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
movq -0xb0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
cmpq %rax, %rdi
je 0xd557
movq -0xa0(%rbp), %rsi
jmp 0xd54f
movq %rax, %rbx
jmp 0xd53b
movq %rbx, %rcx
movq %rax, %rbx
movq -0x110(%rbp), %rdi
cmpq %rcx, %rdi
je 0xd53b
movq -0x100(%rbp), %rsi
incq %rsi
callq 0x31d0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0xd557
movq -0x80(%rbp), %rsi
incq %rsi
callq 0x31d0
movq %rbx, %rdi
callq 0x3320