// File: /workspace/github_c_makefile_star2_O2/Ihsoh[P]ilang/compiler/backend/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(BE_IS_EXPR_NODE(source1->type));
	assert(BE_EXPR_AST_NODE_GET_CONSTANT(source1));
	assert(source2);
	assert(BE_IS_EXPR_NODE(source2->type));
	assert(BE_EXPR_AST_NODE_GET_CONSTANT(source2));

	uint8_t target_type = BE_EXPR_AST_NODE_GET_TYPE(target);
	uint8_t source1_type = BE_EXPR_AST_NODE_GET_TYPE(source1);
	uint8_t source1_constant_type = BE_EXPR_AST_NODE_GET_CONSTANT_TYPE(source1);
	uint8_t source2_type = BE_EXPR_AST_NODE_GET_TYPE(source2);
	uint8_t source2_constant_type = BE_EXPR_AST_NODE_GET_CONSTANT_TYPE(source2);

	#define	_A(op)	\
		switch (source_type) {	\
			case BE_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 BE_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 BE_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 BE_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 BE_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 BE_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(BE_NODE_EXPR_MUL, *)
		_B(BE_NODE_EXPR_DIV, /)
		case BE_NODE_EXPR_MOD: {
			uint8_t source_type = _get_binary_constexpr_type(ctx, source1, source2);
			switch (source_type) {
				case BE_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 BE_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 BE_NODE_EXPR_ADD: {
			if (source1_type == BE_TYPE_POINTER) {
				size_t increment_size = _calc_pointer_type_increment_size(
					ctx,
					source1,
					BE_EXPR_AST_NODE_GET_TYPE_NODE(source1)
				);
				uint64_t source1_value = BE_EXPR_AST_NODE_GET_CONSTEXPR_RESULT_POINTER_VAL(source1);
				if (_is_signed_type(source2_type)) {
					int64_t source2_value = _get_constexpr_int64(ctx, source2);
					BE_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);
					BE_EXPR_AST_NODE_SET_CONSTEXPR_RESULT_POINTER_VAL(
						target,
						source1_value + increment_size * source2_value
					);
				} else {
					assert(0);
				}
			} else if (source2_type == BE_TYPE_POINTER) {
				size_t increment_size = _calc_pointer_type_increment_size(
					ctx,
					source2,
					BE_EXPR_AST_NODE_GET_TYPE_NODE(source2)
				);
				uint64_t source2_value = BE_EXPR_AST_NODE_GET_CONSTEXPR_RESULT_POINTER_VAL(source2);
				if (_is_signed_type(source1_type)) {
					int64_t source1_value =  _get_constexpr_int64(ctx, source1);
					BE_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);
					BE_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 0x2cb82
movq %rcx, %r15
movzbl 0x1(%rcx), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2cba1
cmpb $0x0, 0x70(%r15)
je 0x2cbc0
movq %r8, %r14
testq %r8, %r8
je 0x2cbdf
movzbl 0x1(%r14), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2cbfe
cmpb $0x0, 0x70(%r14)
je 0x2cc1d
movq %rdx, %rbx
movb 0x60(%rdx), %r12b
leal -0xe80(%rsi), %eax
cmpl $0x3, %eax
jbe 0x2c04f
cmpl $0xe20, %esi            # imm = 0xE20
je 0x2c40a
cmpl $0xe30, %esi            # imm = 0xE30
je 0x2c344
cmpl $0xe40, %esi            # imm = 0xE40
je 0x2c3c6
cmpl $0xe50, %esi            # imm = 0xE50
je 0x2c172
cmpl $0xe60, %esi            # imm = 0xE60
je 0x2c1ee
movb %r12b, -0x40(%rbp)
movb 0x60(%r15), %r12b
movb 0x60(%r14), %r13b
cmpl $0xe70, %esi            # imm = 0xE70
je 0x2c37b
cmpl $0xe71, %esi            # imm = 0xE71
je 0x2c306
cmpl $0xea0, %esi            # imm = 0xEA0
je 0x2c0a9
cmpl $0xea1, %esi            # imm = 0xEA1
je 0x2c139
cmpl $0xeb2, %esi            # imm = 0xEB2
movb -0x40(%rbp), %r12b
je 0x2c1ac
cmpl $0xeb1, %esi            # imm = 0xEB1
je 0x2c0e2
cmpl $0xeb0, %esi            # imm = 0xEB0
jne 0x2cc3c
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2cd53
leaq 0x1c93a(%rip), %rcx     # 0x48964
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
imulq %rax, %r15
jmp 0x2c3fb
leaq 0x1c802(%rip), %rcx     # 0x48858
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2cdb0
leaq 0x1c874(%rip), %rcx     # 0x488f4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
xorl %edx, %edx
cmpq %rax, %r15
setl %dl
jmp 0x2c5ee
cmpb $0x10, %r12b
jne 0x2c442
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x3015a
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2c632
movq %r14, %rdi
callq 0x2f948
jmp 0x2c648
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2cd72
leaq 0x1c845(%rip), %rcx     # 0x48948
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2c5f5
cmpb $0x10, %r12b
jne 0x2c47c
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x3015a
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2c69d
movq %r14, %rdi
callq 0x2f948
jmp 0x2c6b3
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
cmpb $0x9, %al
je 0x2c556
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2cc5b
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
xorq %rax, %r15
jmp 0x2c3fb
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
cmpb $0x9, %al
je 0x2c571
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2cc7a
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
jmp 0x2c5ee
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
cmpb $0x9, %al
je 0x2c594
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2cc99
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
andq %rax, %r15
jmp 0x2c3fb
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2cd91
leaq 0x1c673(%rip), %rcx     # 0x488bc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
xorl %edx, %edx
cmpq %rax, %r15
setg %dl
jmp 0x2c5ee
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2cdcf
leaq 0x1c60d(%rip), %rcx     # 0x488a0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
xorl %edx, %edx
cmpq %rax, %r15
setge %dl
jmp 0x2c5ee
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2cdee
leaq 0x1c5fb(%rip), %rcx     # 0x488d8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
xorl %edx, %edx
cmpq %rax, %r15
setle %dl
jmp 0x2c5ee
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2c4c1
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2c985
cmpl $0x1, %edx
jne 0x2cd15
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
jmp 0x2c3b7
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
cmpb $0x9, %al
je 0x2c5af
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2ccb8
movq %r15, %rdi
callq 0x2f948
testq %rax, %rax
jne 0x2c5de
xorl %edx, %edx
jmp 0x2c5ee
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2c508
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2c98f
cmpl $0x1, %edx
jne 0x2cd34
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
movl %edx, 0x88(%rbx)
movb $0x4, 0x71(%rbx)
jmp 0x2c9cc
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
cmpb $0x9, %al
je 0x2c5c3
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2ccd7
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
orq %rax, %r15
movzbl %r12b, %esi
movq %rbx, %rdi
movq %r15, %rdx
jmp 0x2c5f5
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
cmpb $0x9, %al
je 0x2c608
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2ccf6
movq %r15, %rdi
callq 0x2f948
testq %rax, %rax
je 0x2c5de
pushq $0x1
popq %rdx
jmp 0x2c5ee
cmpb $0x10, %r13b
jne 0x2c654
movq 0x68(%r14), %rdx
movq %r14, %rsi
callq 0x3015a
movq %rax, %r13
movq 0x88(%r14), %r14
leal -0x1(%r12), %eax
cmpb $0x4, %al
ja 0x2c9a4
movq %r15, %rdi
callq 0x2f948
jmp 0x2c9ba
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2ce4b
leaq 0x1c473(%rip), %rcx     # 0x48910
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
subq %rax, %r15
jmp 0x2c694
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2ce6a
leaq 0x1c386(%rip), %rcx     # 0x48868
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
jmp 0x2c54d
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2ce89
leaq 0x1c35b(%rip), %rcx     # 0x48884
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
movzbl -0x40(%rbp), %esi
jmp 0x2c5f2
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
xorq %rax, %r15
jmp 0x2c796
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
jmp 0x2c96b
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
andq %rax, %r15
jmp 0x2c796
movq %r15, %rdi
callq 0x2fc67
testq %rax, %rax
jne 0x2c61d
xorl %edx, %edx
jmp 0x2c96b
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
orq %rax, %r15
jmp 0x2c796
movq %r14, %rdi
callq 0x2f948
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 0x2fbe9
movq %r15, %rdi
callq 0x2fc67
testq %rax, %rax
je 0x2c61d
pushq $0x1
popq %rdx
jmp 0x2c96b
movq %r14, %rdi
callq 0x2fc67
xorl %edx, %edx
testq %rax, %rax
setne %dl
jmp 0x2c96b
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2ce0d
movq %r14, %rdi
callq 0x2fc67
imulq %r12, %rax
addq %r15, %rax
jmp 0x2c9c1
movq %r15, %rdi
movq %r14, %rsi
callq 0x2fa62
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2cec7
leaq 0x1c2b7(%rip), %rcx     # 0x4892c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x2f948
movq %rax, %r15
movq %r14, %rdi
callq 0x2f948
addq %rax, %r15
movzbl -0x40(%rbp), %esi
jmp 0x2c3ff
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2ce2c
movq %r14, %rdi
callq 0x2fc67
imulq %r12, %rax
subq %rax, %r15
movq %r15, 0x88(%rbx)
jmp 0x2c9c8
movq %r15, %rdi
callq 0x2fe4c
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2fe4c
movss -0x30(%rbp), %xmm1
divss %xmm0, %xmm1
movzbl %r12b, %esi
jmp 0x2c9fd
movq %r15, %rdi
callq 0x2fe4c
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2fe4c
mulss -0x30(%rbp), %xmm0
jmp 0x2c893
movq %r15, %rdi
callq 0x2ff79
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ff79
movsd -0x30(%rbp), %xmm1
divsd %xmm0, %xmm1
movzbl %r12b, %esi
jmp 0x2ca2a
movq %r15, %rdi
callq 0x2ff79
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ff79
mulsd -0x30(%rbp), %xmm0
jmp 0x2c919
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2c972
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
imulq %rax, %r15
movzbl %r12b, %esi
movq %rbx, %rdi
movq %r15, %rdx
jmp 0x2c972
movq %r15, %rdi
callq 0x2fe4c
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2fe4c
cmpltss -0x40(%rbp), %xmm0
jmp 0x2c81a
movq %r15, %rdi
callq 0x2ff79
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2ff79
cmpltsd -0x40(%rbp), %xmm0
jmp 0x2c83f
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
xorl %edx, %edx
cmpq %rax, %r15
seta %dl
jmp 0x2c96b
movq %r15, %rdi
callq 0x2fe4c
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2fe4c
cmpless -0x40(%rbp), %xmm0
movss 0x1c91e(%rip), %xmm1    # 0x49140
jmp 0x2c890
movq %r15, %rdi
callq 0x2ff79
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2ff79
cmplesd -0x40(%rbp), %xmm0
movsd 0x1c8e9(%rip), %xmm1    # 0x49130
jmp 0x2c915
movq %r15, %rdi
callq 0x2fe4c
movaps %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2fe4c
movaps -0x40(%rbp), %xmm1
cmpltss %xmm0, %xmm1
jmp 0x2c888
movq %r15, %rdi
callq 0x2fe4c
movaps %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2fe4c
movaps -0x40(%rbp), %xmm1
cmpless %xmm0, %xmm1
movss 0x1c8b0(%rip), %xmm0    # 0x49140
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 0x2ff6b
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
xorl %edx, %edx
cmpq %rax, %r15
setae %dl
jmp 0x2c96b
movq %r15, %rdi
callq 0x2ff79
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2ff79
movapd -0x40(%rbp), %xmm1
cmpltsd %xmm0, %xmm1
jmp 0x2c90d
movq %r15, %rdi
callq 0x2ff79
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x2ff79
movapd -0x40(%rbp), %xmm1
cmplesd %xmm0, %xmm1
movsd 0x1c81b(%rip), %xmm0    # 0x49130
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 0x30098
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
xorl %edx, %edx
cmpq %rax, %r15
setb %dl
jmp 0x2c96b
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
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 0x2fd92
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
jmp 0x2c997
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
movq %rdx, 0x88(%rbx)
movb $0x5, 0x71(%rbx)
jmp 0x2c9cc
addb $-0x6, %r12b
cmpb $0x3, %r12b
ja 0x2cea8
movq %r15, %rdi
callq 0x2fc67
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 0x2fe4c
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2fe4c
movss -0x30(%rbp), %xmm1
subss %xmm0, %xmm1
movzbl -0x40(%rbp), %esi
movq %rbx, %rdi
movaps %xmm1, %xmm0
jmp 0x2c89a
movq %r15, %rdi
callq 0x2ff79
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ff79
movsd -0x30(%rbp), %xmm1
subsd %xmm0, %xmm1
movzbl -0x40(%rbp), %esi
movq %rbx, %rdi
movapd %xmm1, %xmm0
jmp 0x2c920
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
subq %rax, %r15
jmp 0x2cb79
movq %r15, %rdi
callq 0x2fe4c
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2fe4c
cmpneqss -0x30(%rbp), %xmm0
jmp 0x2cac3
movq %r15, %rdi
callq 0x2ff79
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ff79
cmpneqsd -0x30(%rbp), %xmm0
jmp 0x2caeb
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
jmp 0x2cb14
movq %r15, %rdi
callq 0x2fe4c
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2fe4c
cmpeqss -0x30(%rbp), %xmm0
movss 0x1c675(%rip), %xmm1    # 0x49140
andps %xmm1, %xmm0
jmp 0x2cb37
movq %r15, %rdi
callq 0x2ff79
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ff79
cmpeqsd -0x30(%rbp), %xmm0
movsd 0x1c63d(%rip), %xmm1    # 0x49130
andpd %xmm1, %xmm0
jmp 0x2cb5a
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
movzbl -0x40(%rbp), %esi
jmp 0x2c96f
movq %r15, %rdi
callq 0x2fe4c
movss %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2fe4c
addss -0x30(%rbp), %xmm0
movzbl -0x40(%rbp), %esi
jmp 0x2c897
movq %r15, %rdi
callq 0x2ff79
movsd %xmm0, -0x30(%rbp)
movq %r14, %rdi
callq 0x2ff79
addsd -0x30(%rbp), %xmm0
movzbl -0x40(%rbp), %esi
jmp 0x2c91d
movq %r15, %rdi
callq 0x2fc67
movq %rax, %r15
movq %r14, %rdi
callq 0x2fc67
addq %rax, %r15
movzbl -0x40(%rbp), %esi
jmp 0x2c79a
leaq 0x1d787(%rip), %rdi     # 0x4a310
leaq 0x1c5e0(%rip), %rsi     # 0x49170
leaq 0x1d9d7(%rip), %rcx     # 0x4a56e
movl $0x7ae, %edx            # imm = 0x7AE
callq 0x30a0
leaq 0x1d770(%rip), %rdi     # 0x4a318
leaq 0x1c5c1(%rip), %rsi     # 0x49170
leaq 0x1d9b8(%rip), %rcx     # 0x4a56e
movl $0x7af, %edx            # imm = 0x7AF
callq 0x30a0
leaq 0x1d770(%rip), %rdi     # 0x4a337
leaq 0x1c5a2(%rip), %rsi     # 0x49170
leaq 0x1d999(%rip), %rcx     # 0x4a56e
movl $0x7b0, %edx            # imm = 0x7B0
callq 0x30a0
leaq 0x132e4(%rip), %rdi     # 0x3feca
leaq 0x1c583(%rip), %rsi     # 0x49170
leaq 0x1d97a(%rip), %rcx     # 0x4a56e
movl $0x7b1, %edx            # imm = 0x7B1
callq 0x30a0
leaq 0x1d759(%rip), %rdi     # 0x4a35e
leaq 0x1c564(%rip), %rsi     # 0x49170
leaq 0x1d95b(%rip), %rcx     # 0x4a56e
movl $0x7b2, %edx            # imm = 0x7B2
callq 0x30a0
leaq 0x1d759(%rip), %rdi     # 0x4a37d
leaq 0x1c545(%rip), %rsi     # 0x49170
leaq 0x1d93c(%rip), %rcx     # 0x4a56e
movl $0x7b3, %edx            # imm = 0x7B3
callq 0x30a0
leaq 0xe726(%rip), %rdi      # 0x3b369
leaq 0x1c526(%rip), %rsi     # 0x49170
leaq 0x1d91d(%rip), %rcx     # 0x4a56e
movl $0x88c, %edx            # imm = 0x88C
callq 0x30a0
leaq 0xe707(%rip), %rdi      # 0x3b369
leaq 0x1c507(%rip), %rsi     # 0x49170
leaq 0x1d8fe(%rip), %rcx     # 0x4a56e
movl $0x887, %edx            # imm = 0x887
callq 0x30a0
leaq 0xe6e8(%rip), %rdi      # 0x3b369
leaq 0x1c4e8(%rip), %rsi     # 0x49170
leaq 0x1d8df(%rip), %rcx     # 0x4a56e
movl $0x808, %edx            # imm = 0x808
callq 0x30a0
leaq 0xe6c9(%rip), %rdi      # 0x3b369
leaq 0x1c4c9(%rip), %rsi     # 0x49170
leaq 0x1d8c0(%rip), %rcx     # 0x4a56e
movl $0x886, %edx            # imm = 0x886
callq 0x30a0
leaq 0xe6aa(%rip), %rdi      # 0x3b369
leaq 0x1c4aa(%rip), %rsi     # 0x49170
leaq 0x1d8a1(%rip), %rcx     # 0x4a56e
movl $0x889, %edx            # imm = 0x889
callq 0x30a0
leaq 0xe68b(%rip), %rdi      # 0x3b369
leaq 0x1c48b(%rip), %rsi     # 0x49170
leaq 0x1d882(%rip), %rcx     # 0x4a56e
movl $0x888, %edx            # imm = 0x888
callq 0x30a0
leaq 0xe66c(%rip), %rdi      # 0x3b369
leaq 0x1c46c(%rip), %rsi     # 0x49170
leaq 0x1d863(%rip), %rcx     # 0x4a56e
movl $0x88a, %edx            # imm = 0x88A
callq 0x30a0
leaq 0xe64d(%rip), %rdi      # 0x3b369
leaq 0x1c44d(%rip), %rsi     # 0x49170
leaq 0x1d844(%rip), %rcx     # 0x4a56e
movl $0x87e, %edx            # imm = 0x87E
callq 0x30a0
leaq 0xe62e(%rip), %rdi      # 0x3b369
leaq 0x1c42e(%rip), %rsi     # 0x49170
leaq 0x1d825(%rip), %rcx     # 0x4a56e
movl $0x86c, %edx            # imm = 0x86C
callq 0x30a0
leaq 0xe60f(%rip), %rdi      # 0x3b369
leaq 0x1c40f(%rip), %rsi     # 0x49170
leaq 0x1d806(%rip), %rcx     # 0x4a56e
movl $0x7f8, %edx            # imm = 0x7F8
callq 0x30a0
leaq 0xe5f0(%rip), %rdi      # 0x3b369
leaq 0x1c3f0(%rip), %rsi     # 0x49170
leaq 0x1d7e7(%rip), %rcx     # 0x4a56e
movl $0x7f9, %edx            # imm = 0x7F9
callq 0x30a0
leaq 0xe5d1(%rip), %rdi      # 0x3b369
leaq 0x1c3d1(%rip), %rsi     # 0x49170
leaq 0x1d7c8(%rip), %rcx     # 0x4a56e
movl $0x860, %edx            # imm = 0x860
callq 0x30a0
leaq 0xe5b2(%rip), %rdi      # 0x3b369
leaq 0x1c3b2(%rip), %rsi     # 0x49170
leaq 0x1d7a9(%rip), %rcx     # 0x4a56e
movl $0x85e, %edx            # imm = 0x85E
callq 0x30a0
leaq 0xe593(%rip), %rdi      # 0x3b369
leaq 0x1c393(%rip), %rsi     # 0x49170
leaq 0x1d78a(%rip), %rcx     # 0x4a56e
movl $0x861, %edx            # imm = 0x861
callq 0x30a0
leaq 0xe574(%rip), %rdi      # 0x3b369
leaq 0x1c374(%rip), %rsi     # 0x49170
leaq 0x1d76b(%rip), %rcx     # 0x4a56e
movl $0x85f, %edx            # imm = 0x85F
callq 0x30a0
leaq 0xe555(%rip), %rdi      # 0x3b369
leaq 0x1c355(%rip), %rsi     # 0x49170
leaq 0x1d74c(%rip), %rcx     # 0x4a56e
movl $0x823, %edx            # imm = 0x823
callq 0x30a0
leaq 0xe536(%rip), %rdi      # 0x3b369
leaq 0x1c336(%rip), %rsi     # 0x49170
leaq 0x1d72d(%rip), %rcx     # 0x4a56e
movl $0x856, %edx            # imm = 0x856
callq 0x30a0
leaq 0xe517(%rip), %rdi      # 0x3b369
leaq 0x1c317(%rip), %rsi     # 0x49170
leaq 0x1d70e(%rip), %rcx     # 0x4a56e
movl $0x85a, %edx            # imm = 0x85A
callq 0x30a0
leaq 0xe4f8(%rip), %rdi      # 0x3b369
leaq 0x1c2f8(%rip), %rsi     # 0x49170
leaq 0x1d6ef(%rip), %rcx     # 0x4a56e
movl $0x882, %edx            # imm = 0x882
callq 0x30a0
leaq 0xe4d9(%rip), %rdi      # 0x3b369
leaq 0x1c2d9(%rip), %rsi     # 0x49170
leaq 0x1d6d0(%rip), %rcx     # 0x4a56e
movl $0x870, %edx            # imm = 0x870
callq 0x30a0
leaq 0xe4ba(%rip), %rdi      # 0x3b369
leaq 0x1c2ba(%rip), %rsi     # 0x49170
leaq 0x1d6b1(%rip), %rcx     # 0x4a56e
movl $0x839, %edx            # imm = 0x839
callq 0x30a0
leaq 0xe49b(%rip), %rdi      # 0x3b369
leaq 0x1c29b(%rip), %rsi     # 0x49170
leaq 0x1d692(%rip), %rcx     # 0x4a56e
movl $0x83d, %edx            # imm = 0x83D
callq 0x30a0