// File: /workspace/github_c_makefile_star2_O2/Ihsoh[P]ilang/compiler/frontend/semantics.c
// Function: calc_binary_constexpr
static void _calc_binary_constexpr(
	ParserContext *ctx,
	uint32_t expr_node_type,
	ParserASTNode *target,
	ParserASTNode *source1,
	ParserASTNode *source2
) {
	assert(ctx);
	assert(target);
	assert(source1);
	assert(FE_IS_EXPR_NODE(source1->type));
	assert(FE_EXPR_AST_NODE_GET_CONSTANT(source1));
	assert(source2);
	assert(FE_IS_EXPR_NODE(source2->type));
	assert(FE_EXPR_AST_NODE_GET_CONSTANT(source2));

	uint8_t target_type = FE_EXPR_AST_NODE_GET_TYPE(target);
	uint8_t source1_type = FE_EXPR_AST_NODE_GET_TYPE(source1);
	uint8_t source1_constant_type = FE_EXPR_AST_NODE_GET_CONSTANT_TYPE(source1);
	uint8_t source2_type = FE_EXPR_AST_NODE_GET_TYPE(source2);
	uint8_t source2_constant_type = FE_EXPR_AST_NODE_GET_CONSTANT_TYPE(source2);

	#define	_A(op)	\
		switch (source_type) {	\
			case FE_TYPE_INT64: {	\
				int64_t result = _get_constexpr_int64(ctx, source1) op _get_constexpr_int64(ctx, source2);	\
				_set_constexpr_int64(ctx, target, target_type, result);	\
				break;	\
			}	\
			case FE_TYPE_UINT64: {	\
				uint64_t result = _get_constexpr_uint64(ctx, source1) op _get_constexpr_uint64(ctx, source2);	\
				_set_constexpr_uint64(ctx, target, target_type, result);	\
				break;	\
			}	\
			case FE_TYPE_FLOAT: {	\
				float result = _get_constexpr_float(ctx, source1) op _get_constexpr_float(ctx, source2);	\
				_set_constexpr_float(ctx, target, target_type, result);	\
				break;	\
			}	\
			case FE_TYPE_DOUBLE: {	\
				double result = _get_constexpr_double(ctx, source1) op _get_constexpr_double(ctx, source2);	\
				_set_constexpr_double(ctx, target, target_type, result);	\
				break;	\
			}	\
			default: {	\
				assert(0);	\
				break;	\
			}	\
		}

	#define	_B(type, op)	\
		case type: {	\
			uint8_t source_type = _get_binary_constexpr_type(ctx, source1, source2);	\
			_A(op)	\
			break;	\
		}

	#define	_A1(op)	\
		switch (source_type) {	\
			case FE_TYPE_INT64: {	\
				int64_t result = _get_constexpr_int64(ctx, source1) op _get_constexpr_int64(ctx, source2);	\
				_set_constexpr_int64(ctx, target, target_type, result);	\
				break;	\
			}	\
			case FE_TYPE_UINT64: {	\
				uint64_t result = _get_constexpr_uint64(ctx, source1) op _get_constexpr_uint64(ctx, source2);	\
				_set_constexpr_uint64(ctx, target, target_type, result);	\
				break;	\
			}	\
			default: {	\
				assert(0);	\
				break;	\
			}	\
		}
	
	#define	_B1(type, op)	\
		case type: {	\
			uint8_t source_type = _get_binary_constexpr_type(ctx, source1, source2);	\
			_A1(op)	\
			break;	\
		}

	switch (expr_node_type) {
		_B(FE_NODE_EXPR_MUL, *)
		_B(FE_NODE_EXPR_DIV, /)
		case FE_NODE_EXPR_MOD: {
			uint8_t source_type = _get_binary_constexpr_type(ctx, source1, source2);
			switch (source_type) {
				case FE_TYPE_INT64: {
					int64_t result = _get_constexpr_int64(ctx, source1) % _get_constexpr_int64(ctx, source2);
					_set_constexpr_int64(ctx, target, target_type, result);
					break;
				}
				case FE_TYPE_UINT64: {
					uint64_t result = _get_constexpr_uint64(ctx, source1) % _get_constexpr_uint64(ctx, source2);
					_set_constexpr_uint64(ctx, target, target_type, result);
					break;
				}
				default: {
					assert(0);
					break;
				}
			}
			break;
		}
		case FE_NODE_EXPR_ADD: {
			if (source1_type == FE_TYPE_POINTER) {
				size_t increment_size = _calc_pointer_type_increment_size(
					ctx,
					source1,
					FE_EXPR_AST_NODE_GET_TYPE_NODE(source1)
				);
				uint64_t source1_value = FE_EXPR_AST_NODE_GET_CONSTEXPR_RESULT_POINTER_VAL(source1);
				if (_is_signed_type(source2_type)) {
					int64_t source2_value = _get_constexpr_int64(ctx, source2);
					FE_EXPR_AST_NODE_SET_CONSTEXPR_RESULT_POINTER_VAL(
						target,
						source1_value + increment_size * source2_value
					);
				} else if (_is_unsigned_type(source2_type)) {
					uint64_t source2_value = _get_constexpr_uint64(ctx, source2);
					FE_EXPR_AST_NODE_SET_CONSTEXPR_RESULT_POINTER_VAL(
						target,
						source1_value + increment_size * source2_value
					);
				} else {
					assert(0);
				}
			} else if (source2_type == FE_TYPE_POINTER) {
				size_t increment_size = _calc_pointer_type_increment_size(
					ctx,
					source2,
					FE_EXPR_AST_NODE_GET_TYPE_NODE(source2)
				);
				uint64_t source2_value = FE_EXPR_AST_NODE_GET_CONSTEXPR_RESULT_POINTER_VAL(source2);
				if (_is_signed_type(source1_type)) {
					int64_t source1_value =  _get_constexpr_int64(ctx, source1);
					FE_EXPR_AST_NODE_SET_CONSTEXPR_RESULT_POINTER_VAL(
						target,
						source2_value + increment_size * source1_value
					);
				} else if (_is_unsigned_type(source1_type)) {
					uint64_t source1_value =  _get_constexpr_uint64(ctx, source1);
					FE_EXPR_AST_NODE_SET_CONSTEXPR_RESULT_POINTER_VAL(
						target,
						source2_value + increment_size * source1_value
					);
				} else {
					assert(0);
				}
			} else {
				uint8_t source_type = _get_binary_constexpr_type(ctx, source1, source2);
				_A(+)
			}
			break;
		}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
testq %rcx, %rcx
je 0x2c31f
movq %rcx, %r15
movzbl 0x1(%rcx), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2c33e
cmpb $0x0, 0x70(%r15)
je 0x2c35d
movq %r8, %r14
testq %r8, %r8
je 0x2c37c
movzbl 0x1(%r14), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2c39b
cmpb $0x0, 0x70(%r14)
je 0x2c3ba
movq %rdx, %rbx
movb 0x60(%rdx), %r12b
leal -0xe80(%rsi), %eax
cmpl $0x3, %eax
jbe 0x2b7ec
cmpl $0xe20, %esi            # imm = 0xE20
je 0x2bba7
cmpl $0xe30, %esi            # imm = 0xE30
je 0x2bae1
cmpl $0xe40, %esi            # imm = 0xE40
je 0x2bb63
cmpl $0xe50, %esi            # imm = 0xE50
je 0x2b90f
cmpl $0xe60, %esi            # imm = 0xE60
je 0x2b98b
movb %r12b, -0x40(%rbp)
movb 0x60(%r15), %r12b
movb 0x60(%r14), %r13b
cmpl $0xe70, %esi            # imm = 0xE70
je 0x2bb18
cmpl $0xe71, %esi            # imm = 0xE71
je 0x2baa3
cmpl $0xea0, %esi            # imm = 0xEA0
je 0x2b846
cmpl $0xea1, %esi            # imm = 0xEA1
je 0x2b8d6
cmpl $0xeb2, %esi            # imm = 0xEB2
movb -0x40(%rbp), %r12b
je 0x2b949
cmpl $0xeb1, %esi            # imm = 0xEB1
je 0x2b87f
cmpl $0xeb0, %esi            # imm = 0xEB0
jne 0x2c3d9
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c4f0
leaq 0x1b96d(%rip), %rcx     # 0x47134
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
imulq %rax, %r15
jmp 0x2bb98
leaq 0x1b835(%rip), %rcx     # 0x47028
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c54d
leaq 0x1b8a7(%rip), %rcx     # 0x470c4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
xorl %edx, %edx
cmpq %rax, %r15
setl %dl
jmp 0x2bd8b
cmpb $0x10, %r12b
jne 0x2bbdf
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x302d6
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2bdcf
movq %r14, %rdi
callq 0x2fac4
jmp 0x2bde5
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c50f
leaq 0x1b878(%rip), %rcx     # 0x47118
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2bd92
cmpb $0x10, %r12b
jne 0x2bc19
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x302d6
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2be3a
movq %r14, %rdi
callq 0x2fac4
jmp 0x2be50
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
cmpb $0x9, %al
je 0x2bcf3
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2c3f8
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
xorq %rax, %r15
jmp 0x2bb98
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
cmpb $0x9, %al
je 0x2bd0e
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2c417
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
jmp 0x2bd8b
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
cmpb $0x9, %al
je 0x2bd31
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2c436
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
andq %rax, %r15
jmp 0x2bb98
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c52e
leaq 0x1b6a6(%rip), %rcx     # 0x4708c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
xorl %edx, %edx
cmpq %rax, %r15
setg %dl
jmp 0x2bd8b
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c56c
leaq 0x1b640(%rip), %rcx     # 0x47070
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
xorl %edx, %edx
cmpq %rax, %r15
setge %dl
jmp 0x2bd8b
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c58b
leaq 0x1b62e(%rip), %rcx     # 0x470a8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
xorl %edx, %edx
cmpq %rax, %r15
setle %dl
jmp 0x2bd8b
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2bc5e
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2c122
cmpl $0x1, %edx
jne 0x2c4b2
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
jmp 0x2bb54
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
cmpb $0x9, %al
je 0x2bd4c
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2c455
movq %r15, %rdi
callq 0x2fac4
testq %rax, %rax
jne 0x2bd7b
xorl %edx, %edx
jmp 0x2bd8b
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2bca5
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2c12c
cmpl $0x1, %edx
jne 0x2c4d1
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
movl %edx, 0x88(%rbx)
movb $0x4, 0x71(%rbx)
jmp 0x2c169
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
cmpb $0x9, %al
je 0x2bd60
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2c474
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
orq %rax, %r15
movzbl %r12b, %esi
movq %rbx, %rdi
movq %r15, %rdx
jmp 0x2bd92
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
cmpb $0x9, %al
je 0x2bda5
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2c493
movq %r15, %rdi
callq 0x2fac4
testq %rax, %rax
je 0x2bd7b
pushq $0x1
popq %rdx
jmp 0x2bd8b
cmpb $0x10, %r13b
jne 0x2bdf1
movq 0x68(%r14), %rdx
movq %r14, %rsi
callq 0x302d6
movq %rax, %r13
movq 0x88(%r14), %r14
leal -0x1(%r12), %eax
cmpb $0x4, %al
ja 0x2c141
movq %r15, %rdi
callq 0x2fac4
jmp 0x2c157
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c5e8
leaq 0x1b4a6(%rip), %rcx     # 0x470e0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
subq %rax, %r15
jmp 0x2be31
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c607
leaq 0x1b3b9(%rip), %rcx     # 0x47038
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
jmp 0x2bcea
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c626
leaq 0x1b38e(%rip), %rcx     # 0x47054
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
movzbl -0x40(%rbp), %esi
jmp 0x2bd8f
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
xorq %rax, %r15
jmp 0x2bf33
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
jmp 0x2c108
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
andq %rax, %r15
jmp 0x2bf33
movq %r15, %rdi
callq 0x2fde3
testq %rax, %rax
jne 0x2bdba
xorl %edx, %edx
jmp 0x2c108
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
orq %rax, %r15
jmp 0x2bf33
movq %r14, %rdi
callq 0x2fac4
xorl %edx, %edx
testq %rax, %rax
setne %dl
movzbl %r12b, %esi
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2fd65
movq %r15, %rdi
callq 0x2fde3
testq %rax, %rax
je 0x2bdba
pushq $0x1
popq %rdx
jmp 0x2c108
movq %r14, %rdi
callq 0x2fde3
xorl %edx, %edx
testq %rax, %rax
setne %dl
jmp 0x2c108
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2c5aa
movq %r14, %rdi
callq 0x2fde3
imulq %r12, %rax
addq %r15, %rax
jmp 0x2c15e
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fbde
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2c664
leaq 0x1b2ea(%rip), %rcx     # 0x470fc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2fac4
movq %rax, %r15
movq %r14, %rdi
callq 0x2fac4
addq %rax, %r15
movzbl -0x40(%rbp), %esi
jmp 0x2bb9c
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2c5c9
movq %r14, %rdi
callq 0x2fde3
imulq %r12, %rax
subq %rax, %r15
movq %r15, 0x88(%rbx)
jmp 0x2c165
movq %r15, %rdi
callq 0x2ffc8
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ffc8
movss -0x30(%rbp), %xmm1
divss %xmm0, %xmm1
movzbl %r12b, %esi
jmp 0x2c19a
movq %r15, %rdi
callq 0x2ffc8
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ffc8
mulss -0x30(%rbp), %xmm0
jmp 0x2c030
movq %r15, %rdi
callq 0x300f5
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x300f5
movsd -0x30(%rbp), %xmm1
divsd %xmm0, %xmm1
movzbl %r12b, %esi
jmp 0x2c1c7
movq %r15, %rdi
callq 0x300f5
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x300f5
mulsd -0x30(%rbp), %xmm0
jmp 0x2c0b6
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2c10f
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
imulq %rax, %r15
movzbl %r12b, %esi
movq %rbx, %rdi
movq %r15, %rdx
jmp 0x2c10f
movq %r15, %rdi
callq 0x2ffc8
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2ffc8
cmpltss -0x40(%rbp), %xmm0
jmp 0x2bfb7
movq %r15, %rdi
callq 0x300f5
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x300f5
cmpltsd -0x40(%rbp), %xmm0
jmp 0x2bfdc
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
xorl %edx, %edx
cmpq %rax, %r15
seta %dl
jmp 0x2c108
movq %r15, %rdi
callq 0x2ffc8
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2ffc8
cmpless -0x40(%rbp), %xmm0
movss 0x1b949(%rip), %xmm1    # 0x47908
jmp 0x2c02d
movq %r15, %rdi
callq 0x300f5
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x300f5
cmplesd -0x40(%rbp), %xmm0
movsd 0x1b914(%rip), %xmm1    # 0x478f8
jmp 0x2c0b2
movq %r15, %rdi
callq 0x2ffc8
movaps %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2ffc8
movaps -0x40(%rbp), %xmm1
cmpltss %xmm0, %xmm1
jmp 0x2c025
movq %r15, %rdi
callq 0x2ffc8
movaps %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2ffc8
movaps -0x40(%rbp), %xmm1
cmpless %xmm0, %xmm1
movss 0x1b8db(%rip), %xmm0    # 0x47908
andps %xmm1, %xmm0
movzbl %r12b, %esi
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x300e7
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
xorl %edx, %edx
cmpq %rax, %r15
setae %dl
jmp 0x2c108
movq %r15, %rdi
callq 0x300f5
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x300f5
movapd -0x40(%rbp), %xmm1
cmpltsd %xmm0, %xmm1
jmp 0x2c0aa
movq %r15, %rdi
callq 0x300f5
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x300f5
movapd -0x40(%rbp), %xmm1
cmplesd %xmm0, %xmm1
movsd 0x1b846(%rip), %xmm0    # 0x478f8
andpd %xmm1, %xmm0
movzbl %r12b, %esi
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x30214
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
xorl %edx, %edx
cmpq %rax, %r15
setb %dl
jmp 0x2c108
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
xorl %edx, %edx
cmpq %rax, %r15
setbe %dl
movzbl %r12b, %esi
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ff0e
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
jmp 0x2c134
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
movq %rdx, 0x88(%rbx)
movb $0x5, 0x71(%rbx)
jmp 0x2c169
addb $-0x6, %r12b
cmpb $0x3, %r12b
ja 0x2c645
movq %r15, %rdi
callq 0x2fde3
imulq %r13, %rax
addq %r14, %rax
movq %rax, 0x88(%rbx)
movb $0x10, 0x71(%rbx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r15, %rdi
callq 0x2ffc8
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ffc8
movss -0x30(%rbp), %xmm1
subss %xmm0, %xmm1
movzbl -0x40(%rbp), %esi
movq %rbx, %rdi
movaps %xmm1, %xmm0
jmp 0x2c037
movq %r15, %rdi
callq 0x300f5
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x300f5
movsd -0x30(%rbp), %xmm1
subsd %xmm0, %xmm1
movzbl -0x40(%rbp), %esi
movq %rbx, %rdi
movapd %xmm1, %xmm0
jmp 0x2c0bd
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
subq %rax, %r15
jmp 0x2c316
movq %r15, %rdi
callq 0x2ffc8
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ffc8
cmpneqss -0x30(%rbp), %xmm0
jmp 0x2c260
movq %r15, %rdi
callq 0x300f5
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x300f5
cmpneqsd -0x30(%rbp), %xmm0
jmp 0x2c288
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
jmp 0x2c2b1
movq %r15, %rdi
callq 0x2ffc8
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ffc8
cmpeqss -0x30(%rbp), %xmm0
movss 0x1b6a0(%rip), %xmm1    # 0x47908
andps %xmm1, %xmm0
jmp 0x2c2d4
movq %r15, %rdi
callq 0x300f5
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x300f5
cmpeqsd -0x30(%rbp), %xmm0
movsd 0x1b668(%rip), %xmm1    # 0x478f8
andpd %xmm1, %xmm0
jmp 0x2c2f7
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
movzbl -0x40(%rbp), %esi
jmp 0x2c10c
movq %r15, %rdi
callq 0x2ffc8
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ffc8
addss -0x30(%rbp), %xmm0
movzbl -0x40(%rbp), %esi
jmp 0x2c034
movq %r15, %rdi
callq 0x300f5
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x300f5
addsd -0x30(%rbp), %xmm0
movzbl -0x40(%rbp), %esi
jmp 0x2c0ba
movq %r15, %rdi
callq 0x2fde3
movq %rax, %r15
movq %r14, %rdi
callq 0x2fde3
addq %rax, %r15
movzbl -0x40(%rbp), %esi
jmp 0x2bf37
leaq 0x1c996(%rip), %rdi     # 0x48cbc
leaq 0x1b60d(%rip), %rsi     # 0x4793a
leaq 0x1ca87(%rip), %rcx     # 0x48dbb
movl $0xa96, %edx            # imm = 0xA96
callq 0x30a0
leaq 0x1c97f(%rip), %rdi     # 0x48cc4
leaq 0x1b5ee(%rip), %rsi     # 0x4793a
leaq 0x1ca68(%rip), %rcx     # 0x48dbb
movl $0xa97, %edx            # imm = 0xA97
callq 0x30a0
leaq 0x1c97f(%rip), %rdi     # 0x48ce3
leaq 0x1b5cf(%rip), %rsi     # 0x4793a
leaq 0x1ca49(%rip), %rcx     # 0x48dbb
movl $0xa98, %edx            # imm = 0xA98
callq 0x30a0
leaq 0x1c987(%rip), %rdi     # 0x48d0a
leaq 0x1b5b0(%rip), %rsi     # 0x4793a
leaq 0x1ca2a(%rip), %rcx     # 0x48dbb
movl $0xa99, %edx            # imm = 0xA99
callq 0x30a0
leaq 0x1c970(%rip), %rdi     # 0x48d12
leaq 0x1b591(%rip), %rsi     # 0x4793a
leaq 0x1ca0b(%rip), %rcx     # 0x48dbb
movl $0xa9a, %edx            # imm = 0xA9A
callq 0x30a0
leaq 0x1c970(%rip), %rdi     # 0x48d31
leaq 0x1b572(%rip), %rsi     # 0x4793a
leaq 0x1c9ec(%rip), %rcx     # 0x48dbb
movl $0xa9b, %edx            # imm = 0xA9B
callq 0x30a0
leaq 0xff80(%rip), %rdi      # 0x3c360
leaq 0x1b553(%rip), %rsi     # 0x4793a
leaq 0x1c9cd(%rip), %rcx     # 0x48dbb
movl $0xb74, %edx            # imm = 0xB74
callq 0x30a0
leaq 0xff61(%rip), %rdi      # 0x3c360
leaq 0x1b534(%rip), %rsi     # 0x4793a
leaq 0x1c9ae(%rip), %rcx     # 0x48dbb
movl $0xb6f, %edx            # imm = 0xB6F
callq 0x30a0
leaq 0xff42(%rip), %rdi      # 0x3c360
leaq 0x1b515(%rip), %rsi     # 0x4793a
leaq 0x1c98f(%rip), %rcx     # 0x48dbb
movl $0xaf0, %edx            # imm = 0xAF0
callq 0x30a0
leaq 0xff23(%rip), %rdi      # 0x3c360
leaq 0x1b4f6(%rip), %rsi     # 0x4793a
leaq 0x1c970(%rip), %rcx     # 0x48dbb
movl $0xb6e, %edx            # imm = 0xB6E
callq 0x30a0
leaq 0xff04(%rip), %rdi      # 0x3c360
leaq 0x1b4d7(%rip), %rsi     # 0x4793a
leaq 0x1c951(%rip), %rcx     # 0x48dbb
movl $0xb71, %edx            # imm = 0xB71
callq 0x30a0
leaq 0xfee5(%rip), %rdi      # 0x3c360
leaq 0x1b4b8(%rip), %rsi     # 0x4793a
leaq 0x1c932(%rip), %rcx     # 0x48dbb
movl $0xb70, %edx            # imm = 0xB70
callq 0x30a0
leaq 0xfec6(%rip), %rdi      # 0x3c360
leaq 0x1b499(%rip), %rsi     # 0x4793a
leaq 0x1c913(%rip), %rcx     # 0x48dbb
movl $0xb72, %edx            # imm = 0xB72
callq 0x30a0
leaq 0xfea7(%rip), %rdi      # 0x3c360
leaq 0x1b47a(%rip), %rsi     # 0x4793a
leaq 0x1c8f4(%rip), %rcx     # 0x48dbb
movl $0xb66, %edx            # imm = 0xB66
callq 0x30a0
leaq 0xfe88(%rip), %rdi      # 0x3c360
leaq 0x1b45b(%rip), %rsi     # 0x4793a
leaq 0x1c8d5(%rip), %rcx     # 0x48dbb
movl $0xb54, %edx            # imm = 0xB54
callq 0x30a0
leaq 0xfe69(%rip), %rdi      # 0x3c360
leaq 0x1b43c(%rip), %rsi     # 0x4793a
leaq 0x1c8b6(%rip), %rcx     # 0x48dbb
movl $0xae0, %edx            # imm = 0xAE0
callq 0x30a0
leaq 0xfe4a(%rip), %rdi      # 0x3c360
leaq 0x1b41d(%rip), %rsi     # 0x4793a
leaq 0x1c897(%rip), %rcx     # 0x48dbb
movl $0xae1, %edx            # imm = 0xAE1
callq 0x30a0
leaq 0xfe2b(%rip), %rdi      # 0x3c360
leaq 0x1b3fe(%rip), %rsi     # 0x4793a
leaq 0x1c878(%rip), %rcx     # 0x48dbb
movl $0xb48, %edx            # imm = 0xB48
callq 0x30a0
leaq 0xfe0c(%rip), %rdi      # 0x3c360
leaq 0x1b3df(%rip), %rsi     # 0x4793a
leaq 0x1c859(%rip), %rcx     # 0x48dbb
movl $0xb46, %edx            # imm = 0xB46
callq 0x30a0
leaq 0xfded(%rip), %rdi      # 0x3c360
leaq 0x1b3c0(%rip), %rsi     # 0x4793a
leaq 0x1c83a(%rip), %rcx     # 0x48dbb
movl $0xb49, %edx            # imm = 0xB49
callq 0x30a0
leaq 0xfdce(%rip), %rdi      # 0x3c360
leaq 0x1b3a1(%rip), %rsi     # 0x4793a
leaq 0x1c81b(%rip), %rcx     # 0x48dbb
movl $0xb47, %edx            # imm = 0xB47
callq 0x30a0
leaq 0xfdaf(%rip), %rdi      # 0x3c360
leaq 0x1b382(%rip), %rsi     # 0x4793a
leaq 0x1c7fc(%rip), %rcx     # 0x48dbb
movl $0xb0b, %edx            # imm = 0xB0B
callq 0x30a0
leaq 0xfd90(%rip), %rdi      # 0x3c360
leaq 0x1b363(%rip), %rsi     # 0x4793a
leaq 0x1c7dd(%rip), %rcx     # 0x48dbb
movl $0xb3e, %edx            # imm = 0xB3E
callq 0x30a0
leaq 0xfd71(%rip), %rdi      # 0x3c360
leaq 0x1b344(%rip), %rsi     # 0x4793a
leaq 0x1c7be(%rip), %rcx     # 0x48dbb
movl $0xb42, %edx            # imm = 0xB42
callq 0x30a0
leaq 0xfd52(%rip), %rdi      # 0x3c360
leaq 0x1b325(%rip), %rsi     # 0x4793a
leaq 0x1c79f(%rip), %rcx     # 0x48dbb
movl $0xb6a, %edx            # imm = 0xB6A
callq 0x30a0
leaq 0xfd33(%rip), %rdi      # 0x3c360
leaq 0x1b306(%rip), %rsi     # 0x4793a
leaq 0x1c780(%rip), %rcx     # 0x48dbb
movl $0xb58, %edx            # imm = 0xB58
callq 0x30a0
leaq 0xfd14(%rip), %rdi      # 0x3c360
leaq 0x1b2e7(%rip), %rsi     # 0x4793a
leaq 0x1c761(%rip), %rcx     # 0x48dbb
movl $0xb21, %edx            # imm = 0xB21
callq 0x30a0
leaq 0xfcf5(%rip), %rdi      # 0x3c360
leaq 0x1b2c8(%rip), %rsi     # 0x4793a
leaq 0x1c742(%rip), %rcx     # 0x48dbb
movl $0xb25, %edx            # imm = 0xB25
callq 0x30a0