// File: /workspace/github_cpp_makefile_star2_O1/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 $0x278, %rsp            # imm = 0x278
movl %r9d, -0x2c(%rbp)
movl %r8d, %r15d
movl %ecx, %ebx
movq %rdx, %r13
movq %rsi, %r14
movq %rdi, -0x98(%rbp)
movq 0x8(%rdx), %rdx
decq %rdx
leaq -0x50(%rbp), %r12
movq %r12, %rdi
movq %r13, %rsi
movq $-0x1, %rcx
callq 0x31f0
leaq 0xf5d1(%rip), %rsi      # 0x1c20b
movq %r12, %rdi
callq 0x30b0
testl %eax, %eax
jne 0xd497
leaq -0x40(%rbp), %r12
movq -0x10(%r12), %rdi
cmpq %r12, %rdi
je 0xcc64
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x31d0
leaq 0x17815(%rip), %rdi     # 0x24480
movq %r14, %rsi
callq 0x1985c
movq %rax, -0x68(%rbp)
testq %rax, %rax
jne 0xcc91
movq (%r14), %rsi
movq (%r13), %rdx
leaq 0xfc34(%rip), %rdi      # 0x1c8be
xorl %eax, %eax
callq 0x1585f
testb %r15b, %r15b
je 0xcd0a
cmpb $0x0, -0x2c(%rbp)
je 0xce79
leaq -0x50(%rbp), %r15
movq %r12, (%r15)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x16d2e
leaq 0x107c0(%rip), %rsi     # 0x1d480
movq %r15, %rdi
callq 0x3360
movq (%r13), %rsi
movq 0x8(%r13), %rdx
leaq -0x50(%rbp), %rdi
callq 0x30c0
leaq -0xe8(%rbp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xcd7a
movq %rdx, -0xf8(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xe8(%rbp)
jmp 0xcd81
cmpb $0x0, -0x2c(%rbp)
je 0xce79
leaq -0x50(%rbp), %r15
movq %r12, (%r15)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x16d2e
leaq 0x1074c(%rip), %rsi     # 0x1d480
movq %r15, %rdi
callq 0x3360
movq (%r13), %rsi
movq 0x8(%r13), %rdx
leaq -0x50(%rbp), %rdi
callq 0x30c0
leaq -0xc8(%rbp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xcdc3
movq %rdx, -0xd8(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xc8(%rbp)
jmp 0xcdca
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rsi
leaq -0xf8(%rbp), %rdx
movq %rsi, 0x8(%rdx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x5, %edi
movl %ebx, %esi
callq 0x4d8b
movq -0xf8(%rbp), %rdi
cmpq %r14, %rdi
movl -0x2c(%rbp), %ebx
je 0xce12
movq -0xe8(%rbp), %rsi
jmp 0xce0a
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rsi
leaq -0xd8(%rbp), %rdx
movq %rsi, 0x8(%rdx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x8, %edi
movl %ebx, %esi
callq 0x4d8b
movq -0xd8(%rbp), %rdi
cmpq %r14, %rdi
movl -0x2c(%rbp), %ebx
je 0xce12
movq -0xc8(%rbp), %rsi
incq %rsi
callq 0x31d0
movq -0x50(%rbp), %rdi
cmpq %r12, %rdi
je 0xce27
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x31d0
testb %bl, %bl
je 0xce79
leaq -0x268(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x10644(%rip), %rdx     # 0x1d481
leaq -0x278(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x16dc8
movl $0x1, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d8b
movq -0x278(%rbp), %rdi
cmpq %r14, %rdi
je 0xce79
movq -0x268(%rbp), %rsi
incq %rsi
callq 0x31d0
movq %r13, -0x90(%rbp)
callq 0x5790
leaq -0xa8(%rbp), %rax
leaq -0x188(%rbp), %r12
movl $0x2, %ecx
movzbl -0x2c(%rbp), %edx
movl %edx, -0x5c(%rbp)
movq %rcx, -0x58(%rbp)
cmpq $0x2, %rcx
setne %r15b
andb -0x2c(%rbp), %r15b
cmpb $0x1, %r15b
jne 0xcfd0
movq %r12, %rbx
movq %rax, -0xb8(%rbp)
leaq -0xb8(%rbp), %r14
movq %r14, %rdi
leaq 0x105ad(%rip), %rdx     # 0x1d481
movq %rdx, %rsi
movq %rax, %r12
callq 0x16dc8
movl $0x1, %edi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4d8b
movq -0xb8(%rbp), %rdi
cmpq %r12, %rdi
je 0xcf09
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x31d0
cmpb $0x0, -0x2c(%rbp)
movq %rbx, %r12
je 0xcfd0
movq -0x68(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x58(%rbp), %rcx
movl -0x8(%rax,%rcx,4), %ebx
movq %r12, -0x198(%rbp)
leaq -0x198(%rbp), %r14
movq %r14, %rdi
leaq 0x10543(%rip), %rdx     # 0x1d481
movq %rdx, %rsi
callq 0x16dc8
movl $0x4, %edi
movl %ebx, %esi
movq %r14, %rdx
callq 0x4d8b
movq -0x198(%rbp), %rdi
cmpq %r12, %rdi
je 0xcf70
movq -0x188(%rbp), %rsi
incq %rsi
callq 0x31d0
cmpb $0x0, -0x2c(%rbp)
je 0xcfd0
movq %r12, %rbx
leaq -0x168(%rbp), %r12
movq %r12, -0x178(%rbp)
leaq -0x178(%rbp), %r14
movq %r14, %rdi
leaq 0x104e9(%rip), %rdx     # 0x1d481
movq %rdx, %rsi
callq 0x16dc8
movl $0xf, %edi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4d8b
movq -0x178(%rbp), %rdi
cmpq %r12, %rdi
movq %rbx, %r12
je 0xcfd0
movq -0x168(%rbp), %rsi
incq %rsi
callq 0x31d0
movq %rbx, %r12
movq %r12, %rbx
leaq -0x148(%rbp), %r13
movq %r13, -0x158(%rbp)
leaq -0x158(%rbp), %r14
movq %r14, %rdi
leaq 0xf21d(%rip), %rsi      # 0x1c20f
leaq 0xf217(%rip), %rdx      # 0x1c210
callq 0x16dc8
leaq -0x298(%rbp), %rdi
movq %r14, %rsi
movl 0x10(%rbp), %edx
movl -0x5c(%rbp), %ecx
callq 0x8e88
movq -0x298(%rbp), %rdi
leaq -0x288(%rbp), %rax
cmpq %rax, %rdi
je 0xd035
movq -0x288(%rbp), %rsi
incq %rsi
callq 0x31d0
movq -0x158(%rbp), %rdi
cmpq %r13, %rdi
leaq -0x88(%rbp), %r14
je 0xd057
movq -0x148(%rbp), %rsi
incq %rsi
callq 0x31d0
testb %r15b, %r15b
leaq -0x78(%rbp), %r15
leaq -0x128(%rbp), %r13
je 0xd0b8
movq %r13, -0x138(%rbp)
leaq -0x138(%rbp), %r14
movq %r14, %rdi
leaq 0x10402(%rip), %rdx     # 0x1d481
movq %rdx, %rsi
callq 0x16dc8
movl $0xd, %edi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4d8b
movq -0x138(%rbp), %rdi
cmpq %r13, %rdi
leaq -0x88(%rbp), %r14
je 0xd0b8
movq -0x128(%rbp), %rsi
incq %rsi
callq 0x31d0
movq %r15, -0x88(%rbp)
movq %r14, %rdi
leaq 0xf142(%rip), %rsi      # 0x1c20b
leaq 0xf13c(%rip), %rdx      # 0x1c20c
callq 0x16dc8
leaq -0x108(%rbp), %r13
movq %r13, -0x118(%rbp)
leaq -0x118(%rbp), %r12
movq %r12, %rdi
leaq 0xfa6b(%rip), %rsi      # 0x1cb5f
leaq 0xfa65(%rip), %rdx      # 0x1cb60
callq 0x16dc8
movq %r14, %rdi
movq %r12, %rsi
callq 0x5d07
movq -0x118(%rbp), %rdi
cmpq %r13, %rdi
je 0xd126
movq -0x108(%rbp), %rsi
incq %rsi
callq 0x31d0
movq -0x88(%rbp), %rdi
cmpq %r15, %rdi
je 0xd13e
movq -0x78(%rbp), %rsi
incq %rsi
callq 0x31d0
callq 0x5790
leaq 0x17156(%rip), %rdi     # 0x242a0
leaq 0xfa0e(%rip), %rsi      # 0x1cb5f
callq 0x30b0
testl %eax, %eax
jne 0xd175
callq 0x5790
movq -0x58(%rbp), %rcx
incq %rcx
leaq -0xa8(%rbp), %rax
movq %rbx, %r12
jmp 0xce9f
movq -0x68(%rbp), %rcx
movq 0x30(%rcx), %rax
movq 0x38(%rcx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
movl $0x1, %ebx
movq -0x58(%rbp), %rdx
cmpq %rcx, %rdx
jae 0xd1a0
imull -0x4(%rax,%rdx,4), %ebx
incq %rdx
jmp 0xd191
cmpl $0x2, %ebx
leaq -0x40(%rbp), %r12
movq -0x90(%rbp), %r13
jl 0xd2bd
cmpb $0x0, -0x2c(%rbp)
je 0xd3c3
leaq -0x248(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x102b1(%rip), %rdx     # 0x1d481
leaq -0x258(%rbp), %r14
movq %r14, %rdi
movq %rdx, %rsi
callq 0x16dc8
movl $0x1, %edi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4d8b
movq -0x258(%rbp), %rdi
cmpq %r15, %rdi
je 0xd20c
movq -0x248(%rbp), %rsi
incq %rsi
callq 0x31d0
cmpb $0x0, -0x2c(%rbp)
je 0xd3c3
leaq -0x228(%rbp), %r15
movq %r15, -0x10(%r15)
leaq 0x10259(%rip), %rdx     # 0x1d481
leaq -0x238(%rbp), %r14
movq %r14, %rdi
movq %rdx, %rsi
callq 0x16dc8
movl $0x4, %edi
movl %ebx, %esi
movq %r14, %rdx
callq 0x4d8b
movq -0x238(%rbp), %rdi
cmpq %r15, %rdi
movl -0x2c(%rbp), %ebx
je 0xd267
movq -0x228(%rbp), %rsi
incq %rsi
callq 0x31d0
testb %bl, %bl
je 0xd3c3
leaq -0x208(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x10200(%rip), %rdx     # 0x1d481
leaq -0x218(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x16dc8
movl $0xf, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d8b
movq -0x218(%rbp), %rdi
cmpq %r14, %rdi
je 0xd2bd
movq -0x208(%rbp), %rsi
incq %rsi
callq 0x31d0
cmpb $0x0, -0x2c(%rbp)
je 0xd3c3
leaq -0x1e8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x101a8(%rip), %rdx     # 0x1d481
leaq -0x1f8(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x16dc8
movl $0xd, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d8b
movq -0x1f8(%rbp), %rdi
cmpq %r14, %rdi
movl -0x2c(%rbp), %ebx
je 0xd318
movq -0x1e8(%rbp), %rsi
incq %rsi
callq 0x31d0
testb %bl, %bl
je 0xd3c3
leaq -0x1c8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x1014f(%rip), %rdx     # 0x1d481
leaq -0x1d8(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x16dc8
movl $0x1, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d8b
movq -0x1d8(%rbp), %rdi
cmpq %r14, %rdi
movl -0x2c(%rbp), %ebx
je 0xd371
movq -0x1c8(%rbp), %rsi
incq %rsi
callq 0x31d0
testb %bl, %bl
je 0xd3c3
leaq -0x1a8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x100fa(%rip), %rdx     # 0x1d481
leaq -0x1b8(%rbp), %rbx
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x16dc8
movl $0xb, %edi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4d8b
movq -0x1b8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd3c3
movq -0x1a8(%rbp), %rsi
incq %rsi
callq 0x31d0
movq 0x8(%r13), %rcx
testq %rcx, %rcx
je 0xd43f
movq (%r13), %rax
cmpb $0x2a, -0x1(%rax,%rcx)
jne 0xd43f
decq %rcx
leaq -0x50(%rbp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0x31f0
movq %r13, %rdi
movq %rbx, %rsi
callq 0x3240
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0xd40a
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x31d0
movq 0x8(%r13), %rcx
testq %rcx, %rcx
je 0xd43f
movq (%r13), %rax
cmpb $0x20, -0x1(%rax,%rcx)
jne 0xd43f
decq %rcx
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0x31f0
movq %r13, %rdi
movq %rbx, %rsi
callq 0x3240
movq -0x50(%rbp), %rdi
jmp 0xd3f9
movq -0x98(%rbp), %rax
leaq 0x10(%rax), %rcx
movq %rcx, (%rax)
movq (%r13), %rdx
leaq 0x10(%r13), %rsi
cmpq %rsi, %rdx
je 0xd466
movq %rdx, (%rax)
movq (%rsi), %rcx
movq %rcx, 0x10(%rax)
jmp 0xd46c
movups (%rsi), %xmm0
movups %xmm0, (%rcx)
movq 0x8(%r13), %rcx
movq %rcx, 0x8(%rax)
movq %rsi, (%r13)
movq $0x0, 0x8(%r13)
movb $0x0, 0x10(%r13)
addq $0x278, %rsp            # imm = 0x278
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xf3a3(%rip), %rdi      # 0x1c841
leaq 0xef8f(%rip), %rsi      # 0x1c434
leaq 0xf3d1(%rip), %rcx      # 0x1c87d
movl $0x302, %edx            # imm = 0x302
callq 0x3130
movq %rax, %rbx
movq -0x218(%rbp), %rdi
cmpq %r14, %rdi
je 0xd6a8
movq -0x208(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x1b8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd6a8
movq -0x1a8(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x238(%rbp), %rdi
cmpq %r15, %rdi
je 0xd6a8
movq -0x228(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x1d8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd6a8
movq -0x1c8(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x258(%rbp), %rdi
cmpq %r15, %rdi
je 0xd6a8
movq -0x248(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x278(%rbp), %rdi
cmpq %r14, %rdi
je 0xd6a8
movq -0x268(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0xd8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd5b1
movq -0xc8(%rbp), %rsi
jmp 0xd59e
movq %rax, %rbx
movq -0xf8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd5b1
movq -0xe8(%rbp), %rsi
incq %rsi
callq 0x31d0
jmp 0xd5b1
jmp 0xd5ae
jmp 0xd5ae
jmp 0xd5ae
movq %rax, %rbx
movq -0x50(%rbp), %rdi
cmpq %r12, %rdi
je 0xd6a8
movq -0x40(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x1f8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd6a8
movq -0x1e8(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x178(%rbp), %rdi
cmpq %r12, %rdi
je 0xd6a8
movq -0x168(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x198(%rbp), %rdi
cmpq %r12, %rdi
je 0xd6a8
movq -0x188(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0xb8(%rbp), %rdi
cmpq %r12, %rdi
je 0xd6a8
movq -0xa8(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x138(%rbp), %rdi
cmpq %r13, %rdi
je 0xd6a8
movq -0x128(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
movq -0x158(%rbp), %rdi
cmpq %r13, %rdi
je 0xd6a8
movq -0x148(%rbp), %rsi
jmp 0xd6a0
movq %rax, %rbx
jmp 0xd68c
movq %rax, %rbx
movq -0x118(%rbp), %rdi
cmpq %r13, %rdi
je 0xd68c
movq -0x108(%rbp), %rsi
incq %rsi
callq 0x31d0
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0xd6a8
movq -0x78(%rbp), %rsi
incq %rsi
callq 0x31d0
movq %rbx, %rdi
callq 0x3320