// File: /workspace/github_c_makefile_star2_O3/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 0x2e61d
movq %rcx, %r15
movzbl 0x1(%rcx), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2e63c
cmpb $0x0, 0x70(%r15)
je 0x2e65b
movq %r8, %r14
testq %r8, %r8
je 0x2e67a
movzbl 0x1(%r14), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2e699
cmpb $0x0, 0x70(%r14)
je 0x2e6b8
movq %rdx, %rbx
movb 0x60(%rdx), %cl
movb 0x60(%r15), %r12b
movb 0x60(%r14), %r13b
cmpl $0xe7f, %esi            # imm = 0xE7F
jle 0x2da2d
cmpl $0xea0, %esi            # imm = 0xEA0
jg 0x2da9a
leal -0xe80(%rsi), %eax
cmpl $0x3, %eax
ja 0x2dc1e
movl %ecx, %r12d
leaq 0x1c60e(%rip), %rcx     # 0x49fe8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e80d
leaq 0x1c680(%rip), %rcx     # 0x4a084
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
xorl %edx, %edx
cmpq %rax, %r15
setl %dl
jmp 0x2e3df
cmpl $0xe4f, %esi            # imm = 0xE4F
jle 0x2db07
cmpl $0xe6f, %esi            # imm = 0xE6F
jg 0x2db68
cmpl $0xe50, %esi            # imm = 0xE50
je 0x2dcad
cmpl $0xe60, %esi            # imm = 0xE60
jne 0x2e6d7
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
cmpb $0x9, %al
je 0x2e015
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2e6f6
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
andq %rax, %r15
jmp 0x2e10e
cmpl $0xeb0, %esi            # imm = 0xEB0
jg 0x2dbc1
cmpl $0xea1, %esi            # imm = 0xEA1
je 0x2ddbc
cmpl $0xeb0, %esi            # imm = 0xEB0
jne 0x2e6d7
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e82c
leaq 0x1c612(%rip), %rcx     # 0x4a0f4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
imulq %rax, %r15
jmp 0x2e10e
cmpl $0xe20, %esi            # imm = 0xE20
je 0x2dd35
cmpl $0xe30, %esi            # imm = 0xE30
je 0x2de99
cmpl $0xe40, %esi            # imm = 0xE40
jne 0x2e6d7
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
cmpb $0x9, %al
je 0x2e08e
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2e734
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
orq %rax, %r15
jmp 0x2e10e
cmpl $0xe70, %esi            # imm = 0xE70
je 0x2dcea
cmpl $0xe71, %esi            # imm = 0xE71
jne 0x2e6d7
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2df65
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2e3c1
cmpl $0x1, %edx
jne 0x2e7b0
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
jmp 0x2dd26
cmpl $0xeb1, %esi            # imm = 0xEB1
je 0x2ddf5
cmpl $0xeb2, %esi            # imm = 0xEB2
jne 0x2e6d7
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
cmpb $0x9, %al
je 0x2e048
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2e753
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
jmp 0x2e3df
cmpl $0xea0, %esi            # imm = 0xEA0
jne 0x2e6d7
cmpb $0x10, %r12b
jne 0x2dede
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x326ff
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2e0a9
movq %r14, %rdi
callq 0x31efb
jmp 0x2e0bf
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e7ee
leaq 0x1c3c8(%rip), %rcx     # 0x4a04c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
xorl %edx, %edx
cmpq %rax, %r15
setg %dl
jmp 0x2e3df
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
cmpb $0x9, %al
je 0x2dffa
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2e715
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
xorq %rax, %r15
jmp 0x2e10e
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2df18
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2e3b7
cmpl $0x1, %edx
jne 0x2e7cf
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
movl %edx, 0x88(%rbx)
movb $0x4, 0x71(%rbx)
jmp 0x2e421
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
cmpb $0x9, %al
je 0x2e030
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2e772
movq %r15, %rdi
callq 0x31efb
movl $0x1, %edx
testq %rax, %rax
jne 0x2e3df
jmp 0x2decc
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e84b
leaq 0x1c29d(%rip), %rcx     # 0x4a030
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
xorl %edx, %edx
cmpq %rax, %r15
setge %dl
jmp 0x2e3df
cmpb $0x10, %r12b
jne 0x2dfb2
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x326ff
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2e11d
movq %r14, %rdi
callq 0x31efb
jmp 0x2e133
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e86a
leaq 0x1c2bf(%rip), %rcx     # 0x4a0d8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2e3e6
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e889
leaq 0x1c1f8(%rip), %rcx     # 0x4a068
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
xorl %edx, %edx
cmpq %rax, %r15
setle %dl
jmp 0x2e3df
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
cmpb $0x9, %al
je 0x2e06b
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2e791
movq %r15, %rdi
callq 0x31efb
testq %rax, %rax
je 0x2e3dd
movq %r14, %rdi
callq 0x31efb
xorl %edx, %edx
testq %rax, %rax
jmp 0x2dfaa
cmpb $0x10, %r13b
jne 0x2e0cb
movq 0x68(%r14), %rdx
movq %r14, %rsi
callq 0x326ff
movq %rax, %r13
movq 0x88(%r14), %r14
leal -0x1(%r12), %eax
cmpb $0x4, %al
ja 0x2e3f9
movq %r15, %rdi
callq 0x31efb
jmp 0x2e40f
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e8e6
leaq 0x1c0d8(%rip), %rcx     # 0x4a014
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
jmp 0x2e3df
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e905
leaq 0x1c06f(%rip), %rcx     # 0x49ff8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
jmp 0x2e3df
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e924
leaq 0x1c0ca(%rip), %rcx     # 0x4a0a0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
subq %rax, %r15
jmp 0x2e10e
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
xorq %rax, %r15
jmp 0x2e600
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
andq %rax, %r15
jmp 0x2e600
movq %r15, %rdi
callq 0x3221a
movl $0x1, %edx
testq %rax, %rax
jne 0x2e520
jmp 0x2e07c
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
jmp 0x2e520
movq %r15, %rdi
callq 0x3221a
testq %rax, %rax
je 0x2e3d6
movq %r14, %rdi
callq 0x3221a
xorl %edx, %edx
testq %rax, %rax
jmp 0x2e51d
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
orq %rax, %r15
jmp 0x2e600
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2e8a8
movq %r14, %rdi
callq 0x3221a
imulq %r12, %rax
addq %r15, %rax
jmp 0x2e416
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32015
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2e962
leaq 0x1bfcd(%rip), %rcx     # 0x4a0bc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x31efb
movq %rax, %r15
movq %r14, %rdi
callq 0x31efb
addq %rax, %r15
movzbl %r12b, %esi
movq %rbx, %rdi
movq %r15, %rdx
jmp 0x2e3e6
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2e8c7
movq %r14, %rdi
callq 0x3221a
imulq %r12, %rax
subq %rax, %r15
movq %r15, 0x88(%rbx)
jmp 0x2e41d
movq %r15, %rdi
callq 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x2e277
jmp 0x2e45c
movq %r15, %rdi
callq 0x3251e
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
cmpltsd -0x40(%rbp), %xmm0
jmp 0x2e4d7
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
xorl %edx, %edx
cmpq %rax, %r15
seta %dl
jmp 0x2e520
movq %r15, %rdi
callq 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jb 0x2e277
jmp 0x2e45c
movq %r15, %rdi
callq 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
movss -0x40(%rbp), %xmm1
divss %xmm0, %xmm1
jmp 0x2e54a
movq %r15, %rdi
callq 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
mulss -0x40(%rbp), %xmm0
jmp 0x2e5b0
movq %r15, %rdi
callq 0x3251e
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
cmplesd -0x40(%rbp), %xmm0
jmp 0x2e4d7
movq %r15, %rdi
callq 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
ucomiss -0x40(%rbp), %xmm0
jbe 0x2e277
jmp 0x2e45c
movq %r15, %rdi
callq 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
ucomiss -0x40(%rbp), %xmm0
jae 0x2e45c
xorps %xmm0, %xmm0
jmp 0x2e5b4
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
xorl %edx, %edx
cmpq %rax, %r15
setae %dl
jmp 0x2e520
movq %r15, %rdi
callq 0x3251e
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
movsd -0x40(%rbp), %xmm1
divsd %xmm0, %xmm1
jmp 0x2e571
movq %r15, %rdi
callq 0x3251e
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
mulsd -0x40(%rbp), %xmm0
jmp 0x2e5b4
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2e60a
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
imulq %rax, %r15
jmp 0x2e600
movq %r15, %rdi
callq 0x3251e
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
movapd -0x40(%rbp), %xmm1
cmpltsd %xmm0, %xmm1
jmp 0x2e36a
movq %r15, %rdi
callq 0x3251e
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
movapd -0x40(%rbp), %xmm1
cmplesd %xmm0, %xmm1
movsd 0x1c546(%rip), %xmm0    # 0x4a8b8
jmp 0x2e4df
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
xorl %edx, %edx
cmpq %rax, %r15
setb %dl
jmp 0x2e520
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
xorl %edx, %edx
cmpq %rax, %r15
setbe %dl
jmp 0x2e520
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
jmp 0x2e3c9
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
movq %rdx, 0x88(%rbx)
movb $0x5, 0x71(%rbx)
jmp 0x2e421
xorl %edx, %edx
jmp 0x2e520
xorl %edx, %edx
movzbl %r12b, %esi
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x3219c
addb $-0x6, %r12b
cmpb $0x3, %r12b
ja 0x2e943
movq %r15, %rdi
callq 0x3221a
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 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
xorps %xmm0, %xmm0
jne 0x2e5b4
jp 0x2e5b4
movsd 0x1c454(%rip), %xmm0    # 0x4a8b8
jmp 0x2e5b4
movq %r15, %rdi
callq 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
movsd 0x1c42a(%rip), %xmm0    # 0x4a8b8
jne 0x2e5b4
jnp 0x2e277
jmp 0x2e5b4
movq %r15, %rdi
callq 0x3251e
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
cmpeqsd -0x40(%rbp), %xmm0
jmp 0x2e4d7
movq %r15, %rdi
callq 0x3251e
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
cmpneqsd -0x40(%rbp), %xmm0
movsd 0x1c3d9(%rip), %xmm1    # 0x4a8b8
andpd %xmm1, %xmm0
jmp 0x2e5b4
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
jmp 0x2e520
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
movzbl %r12b, %esi
movq %rbx, %rdi
jmp 0x2e60a
movq %r15, %rdi
callq 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
movss -0x40(%rbp), %xmm1
subss %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
jmp 0x2e5b4
movq %r15, %rdi
callq 0x3251e
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
movsd -0x40(%rbp), %xmm1
subsd %xmm0, %xmm1
movzbl %r12b, %esi
movq %rbx, %rdi
movapd %xmm1, %xmm0
jmp 0x2e5bb
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
subq %rax, %r15
jmp 0x2e600
movq %r15, %rdi
callq 0x323ff
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x323ff
addss -0x40(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movzbl %r12b, %esi
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x3263d
movq %r15, %rdi
callq 0x3251e
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3251e
addsd -0x40(%rbp), %xmm0
jmp 0x2e5b4
movq %r15, %rdi
callq 0x3221a
movq %rax, %r15
movq %r14, %rdi
callq 0x3221a
addq %rax, %r15
movzbl %r12b, %esi
movq %rbx, %rdi
movq %r15, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x32345
leaq 0x1d658(%rip), %rdi     # 0x4bc7c
leaq 0x1c2cf(%rip), %rsi     # 0x4a8fa
leaq 0x1d749(%rip), %rcx     # 0x4bd7b
movl $0xa96, %edx            # imm = 0xA96
callq 0x30a0
leaq 0x1d641(%rip), %rdi     # 0x4bc84
leaq 0x1c2b0(%rip), %rsi     # 0x4a8fa
leaq 0x1d72a(%rip), %rcx     # 0x4bd7b
movl $0xa97, %edx            # imm = 0xA97
callq 0x30a0
leaq 0x1d641(%rip), %rdi     # 0x4bca3
leaq 0x1c291(%rip), %rsi     # 0x4a8fa
leaq 0x1d70b(%rip), %rcx     # 0x4bd7b
movl $0xa98, %edx            # imm = 0xA98
callq 0x30a0
leaq 0x1d649(%rip), %rdi     # 0x4bcca
leaq 0x1c272(%rip), %rsi     # 0x4a8fa
leaq 0x1d6ec(%rip), %rcx     # 0x4bd7b
movl $0xa99, %edx            # imm = 0xA99
callq 0x30a0
leaq 0x1d632(%rip), %rdi     # 0x4bcd2
leaq 0x1c253(%rip), %rsi     # 0x4a8fa
leaq 0x1d6cd(%rip), %rcx     # 0x4bd7b
movl $0xa9a, %edx            # imm = 0xA9A
callq 0x30a0
leaq 0x1d632(%rip), %rdi     # 0x4bcf1
leaq 0x1c234(%rip), %rsi     # 0x4a8fa
leaq 0x1d6ae(%rip), %rcx     # 0x4bd7b
movl $0xa9b, %edx            # imm = 0xA9B
callq 0x30a0
leaq 0x10c82(%rip), %rdi     # 0x3f360
leaq 0x1c215(%rip), %rsi     # 0x4a8fa
leaq 0x1d68f(%rip), %rcx     # 0x4bd7b
movl $0xb74, %edx            # imm = 0xB74
callq 0x30a0
leaq 0x10c63(%rip), %rdi     # 0x3f360
leaq 0x1c1f6(%rip), %rsi     # 0x4a8fa
leaq 0x1d670(%rip), %rcx     # 0x4bd7b
movl $0xb6e, %edx            # imm = 0xB6E
callq 0x30a0
leaq 0x10c44(%rip), %rdi     # 0x3f360
leaq 0x1c1d7(%rip), %rsi     # 0x4a8fa
leaq 0x1d651(%rip), %rcx     # 0x4bd7b
movl $0xb6f, %edx            # imm = 0xB6F
callq 0x30a0
leaq 0x10c25(%rip), %rdi     # 0x3f360
leaq 0x1c1b8(%rip), %rsi     # 0x4a8fa
leaq 0x1d632(%rip), %rcx     # 0x4bd7b
movl $0xb70, %edx            # imm = 0xB70
callq 0x30a0
leaq 0x10c06(%rip), %rdi     # 0x3f360
leaq 0x1c199(%rip), %rsi     # 0x4a8fa
leaq 0x1d613(%rip), %rcx     # 0x4bd7b
movl $0xaf0, %edx            # imm = 0xAF0
callq 0x30a0
leaq 0x10be7(%rip), %rdi     # 0x3f360
leaq 0x1c17a(%rip), %rsi     # 0x4a8fa
leaq 0x1d5f4(%rip), %rcx     # 0x4bd7b
movl $0xb72, %edx            # imm = 0xB72
callq 0x30a0
leaq 0x10bc8(%rip), %rdi     # 0x3f360
leaq 0x1c15b(%rip), %rsi     # 0x4a8fa
leaq 0x1d5d5(%rip), %rcx     # 0x4bd7b
movl $0xb71, %edx            # imm = 0xB71
callq 0x30a0
leaq 0x10ba9(%rip), %rdi     # 0x3f360
leaq 0x1c13c(%rip), %rsi     # 0x4a8fa
leaq 0x1d5b6(%rip), %rcx     # 0x4bd7b
movl $0xb66, %edx            # imm = 0xB66
callq 0x30a0
leaq 0x10b8a(%rip), %rdi     # 0x3f360
leaq 0x1c11d(%rip), %rsi     # 0x4a8fa
leaq 0x1d597(%rip), %rcx     # 0x4bd7b
movl $0xb54, %edx            # imm = 0xB54
callq 0x30a0
leaq 0x10b6b(%rip), %rdi     # 0x3f360
leaq 0x1c0fe(%rip), %rsi     # 0x4a8fa
leaq 0x1d578(%rip), %rcx     # 0x4bd7b
movl $0xb48, %edx            # imm = 0xB48
callq 0x30a0
leaq 0x10b4c(%rip), %rdi     # 0x3f360
leaq 0x1c0df(%rip), %rsi     # 0x4a8fa
leaq 0x1d559(%rip), %rcx     # 0x4bd7b
movl $0xb46, %edx            # imm = 0xB46
callq 0x30a0
leaq 0x10b2d(%rip), %rdi     # 0x3f360
leaq 0x1c0c0(%rip), %rsi     # 0x4a8fa
leaq 0x1d53a(%rip), %rcx     # 0x4bd7b
movl $0xae0, %edx            # imm = 0xAE0
callq 0x30a0
leaq 0x10b0e(%rip), %rdi     # 0x3f360
leaq 0x1c0a1(%rip), %rsi     # 0x4a8fa
leaq 0x1d51b(%rip), %rcx     # 0x4bd7b
movl $0xb49, %edx            # imm = 0xB49
callq 0x30a0
leaq 0x10aef(%rip), %rdi     # 0x3f360
leaq 0x1c082(%rip), %rsi     # 0x4a8fa
leaq 0x1d4fc(%rip), %rcx     # 0x4bd7b
movl $0xae1, %edx            # imm = 0xAE1
callq 0x30a0
leaq 0x10ad0(%rip), %rdi     # 0x3f360
leaq 0x1c063(%rip), %rsi     # 0x4a8fa
leaq 0x1d4dd(%rip), %rcx     # 0x4bd7b
movl $0xb47, %edx            # imm = 0xB47
callq 0x30a0
leaq 0x10ab1(%rip), %rdi     # 0x3f360
leaq 0x1c044(%rip), %rsi     # 0x4a8fa
leaq 0x1d4be(%rip), %rcx     # 0x4bd7b
movl $0xb0b, %edx            # imm = 0xB0B
callq 0x30a0
leaq 0x10a92(%rip), %rdi     # 0x3f360
leaq 0x1c025(%rip), %rsi     # 0x4a8fa
leaq 0x1d49f(%rip), %rcx     # 0x4bd7b
movl $0xb3e, %edx            # imm = 0xB3E
callq 0x30a0
leaq 0x10a73(%rip), %rdi     # 0x3f360
leaq 0x1c006(%rip), %rsi     # 0x4a8fa
leaq 0x1d480(%rip), %rcx     # 0x4bd7b
movl $0xb58, %edx            # imm = 0xB58
callq 0x30a0
leaq 0x10a54(%rip), %rdi     # 0x3f360
leaq 0x1bfe7(%rip), %rsi     # 0x4a8fa
leaq 0x1d461(%rip), %rcx     # 0x4bd7b
movl $0xb6a, %edx            # imm = 0xB6A
callq 0x30a0
leaq 0x10a35(%rip), %rdi     # 0x3f360
leaq 0x1bfc8(%rip), %rsi     # 0x4a8fa
leaq 0x1d442(%rip), %rcx     # 0x4bd7b
movl $0xb42, %edx            # imm = 0xB42
callq 0x30a0
leaq 0x10a16(%rip), %rdi     # 0x3f360
leaq 0x1bfa9(%rip), %rsi     # 0x4a8fa
leaq 0x1d423(%rip), %rcx     # 0x4bd7b
movl $0xb21, %edx            # imm = 0xB21
callq 0x30a0
leaq 0x109f7(%rip), %rdi     # 0x3f360
leaq 0x1bf8a(%rip), %rsi     # 0x4a8fa
leaq 0x1d404(%rip), %rcx     # 0x4bd7b
movl $0xb25, %edx            # imm = 0xB25
callq 0x30a0