// File: /workspace/github_c_makefile_star2_O1/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 0x2f25a
movq %rcx, %r15
movzbl 0x1(%rcx), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2f279
cmpb $0x0, 0x70(%r15)
je 0x2f298
movq %r8, %r14
testq %r8, %r8
je 0x2f2b7
movzbl 0x1(%r14), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2f2d6
cmpb $0x0, 0x70(%r14)
je 0x2f2f5
movq %rdx, %rbx
movb 0x60(%rdx), %cl
movb 0x60(%r15), %r12b
movb 0x60(%r14), %r13b
cmpl $0xe7f, %esi            # imm = 0xE7F
jle 0x2e66a
cmpl $0xea0, %esi            # imm = 0xEA0
jg 0x2e6d7
leal -0xe80(%rsi), %eax
cmpl $0x3, %eax
ja 0x2e85b
movl %ecx, %r12d
leaq 0x1c901(%rip), %rcx     # 0x4af18
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f44a
leaq 0x1c973(%rip), %rcx     # 0x4afb4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
xorl %edx, %edx
cmpq %rax, %r15
setl %dl
jmp 0x2f01c
cmpl $0xe4f, %esi            # imm = 0xE4F
jle 0x2e744
cmpl $0xe6f, %esi            # imm = 0xE6F
jg 0x2e7a5
cmpl $0xe50, %esi            # imm = 0xE50
je 0x2e8ea
cmpl $0xe60, %esi            # imm = 0xE60
jne 0x2f314
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
cmpb $0x9, %al
je 0x2ec52
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f333
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
andq %rax, %r15
jmp 0x2ed4b
cmpl $0xeb0, %esi            # imm = 0xEB0
jg 0x2e7fe
cmpl $0xea1, %esi            # imm = 0xEA1
je 0x2e9f9
cmpl $0xeb0, %esi            # imm = 0xEB0
jne 0x2f314
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f469
leaq 0x1c905(%rip), %rcx     # 0x4b024
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
imulq %rax, %r15
jmp 0x2ed4b
cmpl $0xe20, %esi            # imm = 0xE20
je 0x2e972
cmpl $0xe30, %esi            # imm = 0xE30
je 0x2ead6
cmpl $0xe40, %esi            # imm = 0xE40
jne 0x2f314
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
cmpb $0x9, %al
je 0x2eccb
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f371
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
orq %rax, %r15
jmp 0x2ed4b
cmpl $0xe70, %esi            # imm = 0xE70
je 0x2e927
cmpl $0xe71, %esi            # imm = 0xE71
jne 0x2f314
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2eba2
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2effe
cmpl $0x1, %edx
jne 0x2f3ed
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
jmp 0x2e963
cmpl $0xeb1, %esi            # imm = 0xEB1
je 0x2ea32
cmpl $0xeb2, %esi            # imm = 0xEB2
jne 0x2f314
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
cmpb $0x9, %al
je 0x2ec85
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f390
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
jmp 0x2f01c
cmpl $0xea0, %esi            # imm = 0xEA0
jne 0x2f314
cmpb $0x10, %r12b
jne 0x2eb1b
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x334fe
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2ece6
movq %r14, %rdi
callq 0x32cd8
jmp 0x2ecfc
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f42b
leaq 0x1c6bb(%rip), %rcx     # 0x4af7c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
xorl %edx, %edx
cmpq %rax, %r15
setg %dl
jmp 0x2f01c
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
cmpb $0x9, %al
je 0x2ec37
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f352
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
xorq %rax, %r15
jmp 0x2ed4b
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2eb55
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2eff4
cmpl $0x1, %edx
jne 0x2f40c
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
movl %edx, 0x88(%rbx)
movb $0x4, 0x71(%rbx)
jmp 0x2f05e
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
cmpb $0x9, %al
je 0x2ec6d
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f3af
movq %r15, %rdi
callq 0x32cd8
movl $0x1, %edx
testq %rax, %rax
jne 0x2f01c
jmp 0x2eb09
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f488
leaq 0x1c590(%rip), %rcx     # 0x4af60
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
xorl %edx, %edx
cmpq %rax, %r15
setge %dl
jmp 0x2f01c
cmpb $0x10, %r12b
jne 0x2ebef
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x334fe
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2ed5a
movq %r14, %rdi
callq 0x32cd8
jmp 0x2ed70
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f4a7
leaq 0x1c5b2(%rip), %rcx     # 0x4b008
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2f023
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f4c6
leaq 0x1c4eb(%rip), %rcx     # 0x4af98
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
xorl %edx, %edx
cmpq %rax, %r15
setle %dl
jmp 0x2f01c
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
cmpb $0x9, %al
je 0x2eca8
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f3ce
movq %r15, %rdi
callq 0x32cd8
testq %rax, %rax
je 0x2f01a
movq %r14, %rdi
callq 0x32cd8
xorl %edx, %edx
testq %rax, %rax
jmp 0x2ebe7
cmpb $0x10, %r13b
jne 0x2ed08
movq 0x68(%r14), %rdx
movq %r14, %rsi
callq 0x334fe
movq %rax, %r13
movq 0x88(%r14), %r14
leal -0x1(%r12), %eax
cmpb $0x4, %al
ja 0x2f036
movq %r15, %rdi
callq 0x32cd8
jmp 0x2f04c
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f523
leaq 0x1c3cb(%rip), %rcx     # 0x4af44
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
jmp 0x2f01c
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f542
leaq 0x1c362(%rip), %rcx     # 0x4af28
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
jmp 0x2f01c
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f561
leaq 0x1c3bd(%rip), %rcx     # 0x4afd0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
subq %rax, %r15
jmp 0x2ed4b
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
xorq %rax, %r15
jmp 0x2f23d
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
andq %rax, %r15
jmp 0x2f23d
movq %r15, %rdi
callq 0x33019
movl $0x1, %edx
testq %rax, %rax
jne 0x2f15d
jmp 0x2ecb9
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
jmp 0x2f15d
movq %r15, %rdi
callq 0x33019
testq %rax, %rax
je 0x2f013
movq %r14, %rdi
callq 0x33019
xorl %edx, %edx
testq %rax, %rax
jmp 0x2f15a
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
orq %rax, %r15
jmp 0x2f23d
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2f4e5
movq %r14, %rdi
callq 0x33019
imulq %r12, %rax
addq %r15, %rax
jmp 0x2f053
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32df2
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f59f
leaq 0x1c2c0(%rip), %rcx     # 0x4afec
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32cd8
movq %rax, %r15
movq %r14, %rdi
callq 0x32cd8
addq %rax, %r15
movzbl %r12b, %esi
movq %rbx, %rdi
movq %r15, %rdx
jmp 0x2f023
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2f504
movq %r14, %rdi
callq 0x33019
imulq %r12, %rax
subq %rax, %r15
movq %r15, 0x88(%rbx)
jmp 0x2f05a
movq %r15, %rdi
callq 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x2eeb4
jmp 0x2f099
movq %r15, %rdi
callq 0x3331d
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
cmpltsd -0x40(%rbp), %xmm0
jmp 0x2f114
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
xorl %edx, %edx
cmpq %rax, %r15
seta %dl
jmp 0x2f15d
movq %r15, %rdi
callq 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jb 0x2eeb4
jmp 0x2f099
movq %r15, %rdi
callq 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
movss -0x40(%rbp), %xmm1
divss %xmm0, %xmm1
jmp 0x2f187
movq %r15, %rdi
callq 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
mulss -0x40(%rbp), %xmm0
jmp 0x2f1ed
movq %r15, %rdi
callq 0x3331d
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
cmplesd -0x40(%rbp), %xmm0
jmp 0x2f114
movq %r15, %rdi
callq 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
ucomiss -0x40(%rbp), %xmm0
jbe 0x2eeb4
jmp 0x2f099
movq %r15, %rdi
callq 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
ucomiss -0x40(%rbp), %xmm0
jae 0x2f099
xorps %xmm0, %xmm0
jmp 0x2f1f1
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
xorl %edx, %edx
cmpq %rax, %r15
setae %dl
jmp 0x2f15d
movq %r15, %rdi
callq 0x3331d
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
movsd -0x40(%rbp), %xmm1
divsd %xmm0, %xmm1
jmp 0x2f1ae
movq %r15, %rdi
callq 0x3331d
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
mulsd -0x40(%rbp), %xmm0
jmp 0x2f1f1
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2f247
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
imulq %rax, %r15
jmp 0x2f23d
movq %r15, %rdi
callq 0x3331d
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
movapd -0x40(%rbp), %xmm1
cmpltsd %xmm0, %xmm1
jmp 0x2efa7
movq %r15, %rdi
callq 0x3331d
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
movapd -0x40(%rbp), %xmm1
cmplesd %xmm0, %xmm1
movsd 0x1c861(%rip), %xmm0    # 0x4b810
jmp 0x2f11c
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
xorl %edx, %edx
cmpq %rax, %r15
setb %dl
jmp 0x2f15d
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
xorl %edx, %edx
cmpq %rax, %r15
setbe %dl
jmp 0x2f15d
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
jmp 0x2f006
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
movq %rdx, 0x88(%rbx)
movb $0x5, 0x71(%rbx)
jmp 0x2f05e
xorl %edx, %edx
jmp 0x2f15d
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 0x32f9b
addb $-0x6, %r12b
cmpb $0x3, %r12b
ja 0x2f580
movq %r15, %rdi
callq 0x33019
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 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
xorps %xmm0, %xmm0
jne 0x2f1f1
jp 0x2f1f1
movsd 0x1c76f(%rip), %xmm0    # 0x4b810
jmp 0x2f1f1
movq %r15, %rdi
callq 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
movsd 0x1c745(%rip), %xmm0    # 0x4b810
jne 0x2f1f1
jnp 0x2eeb4
jmp 0x2f1f1
movq %r15, %rdi
callq 0x3331d
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
cmpeqsd -0x40(%rbp), %xmm0
jmp 0x2f114
movq %r15, %rdi
callq 0x3331d
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
cmpneqsd -0x40(%rbp), %xmm0
movsd 0x1c6f4(%rip), %xmm1    # 0x4b810
andpd %xmm1, %xmm0
jmp 0x2f1f1
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
jmp 0x2f15d
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
movzbl %r12b, %esi
movq %rbx, %rdi
jmp 0x2f247
movq %r15, %rdi
callq 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
movss -0x40(%rbp), %xmm1
subss %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
jmp 0x2f1f1
movq %r15, %rdi
callq 0x3331d
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
movsd -0x40(%rbp), %xmm1
subsd %xmm0, %xmm1
movzbl %r12b, %esi
movq %rbx, %rdi
movapd %xmm1, %xmm0
jmp 0x2f1f8
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
subq %rax, %r15
jmp 0x2f23d
movq %r15, %rdi
callq 0x331fe
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x331fe
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 0x3343c
movq %r15, %rdi
callq 0x3331d
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x3331d
addsd -0x40(%rbp), %xmm0
jmp 0x2f1f1
movq %r15, %rdi
callq 0x33019
movq %rax, %r15
movq %r14, %rdi
callq 0x33019
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 0x33144
leaq 0x1d97b(%rip), %rdi     # 0x4cbdc
leaq 0x1c5f2(%rip), %rsi     # 0x4b85a
leaq 0x1da6c(%rip), %rcx     # 0x4ccdb
movl $0xa96, %edx            # imm = 0xA96
callq 0x30a0
leaq 0x1d964(%rip), %rdi     # 0x4cbe4
leaq 0x1c5d3(%rip), %rsi     # 0x4b85a
leaq 0x1da4d(%rip), %rcx     # 0x4ccdb
movl $0xa97, %edx            # imm = 0xA97
callq 0x30a0
leaq 0x1d964(%rip), %rdi     # 0x4cc03
leaq 0x1c5b4(%rip), %rsi     # 0x4b85a
leaq 0x1da2e(%rip), %rcx     # 0x4ccdb
movl $0xa98, %edx            # imm = 0xA98
callq 0x30a0
leaq 0x1d96c(%rip), %rdi     # 0x4cc2a
leaq 0x1c595(%rip), %rsi     # 0x4b85a
leaq 0x1da0f(%rip), %rcx     # 0x4ccdb
movl $0xa99, %edx            # imm = 0xA99
callq 0x30a0
leaq 0x1d955(%rip), %rdi     # 0x4cc32
leaq 0x1c576(%rip), %rsi     # 0x4b85a
leaq 0x1d9f0(%rip), %rcx     # 0x4ccdb
movl $0xa9a, %edx            # imm = 0xA9A
callq 0x30a0
leaq 0x1d955(%rip), %rdi     # 0x4cc51
leaq 0x1c557(%rip), %rsi     # 0x4b85a
leaq 0x1d9d1(%rip), %rcx     # 0x4ccdb
movl $0xa9b, %edx            # imm = 0xA9B
callq 0x30a0
leaq 0x11069(%rip), %rdi     # 0x40384
leaq 0x1c538(%rip), %rsi     # 0x4b85a
leaq 0x1d9b2(%rip), %rcx     # 0x4ccdb
movl $0xb74, %edx            # imm = 0xB74
callq 0x30a0
leaq 0x1104a(%rip), %rdi     # 0x40384
leaq 0x1c519(%rip), %rsi     # 0x4b85a
leaq 0x1d993(%rip), %rcx     # 0x4ccdb
movl $0xb6e, %edx            # imm = 0xB6E
callq 0x30a0
leaq 0x1102b(%rip), %rdi     # 0x40384
leaq 0x1c4fa(%rip), %rsi     # 0x4b85a
leaq 0x1d974(%rip), %rcx     # 0x4ccdb
movl $0xb6f, %edx            # imm = 0xB6F
callq 0x30a0
leaq 0x1100c(%rip), %rdi     # 0x40384
leaq 0x1c4db(%rip), %rsi     # 0x4b85a
leaq 0x1d955(%rip), %rcx     # 0x4ccdb
movl $0xb70, %edx            # imm = 0xB70
callq 0x30a0
leaq 0x10fed(%rip), %rdi     # 0x40384
leaq 0x1c4bc(%rip), %rsi     # 0x4b85a
leaq 0x1d936(%rip), %rcx     # 0x4ccdb
movl $0xaf0, %edx            # imm = 0xAF0
callq 0x30a0
leaq 0x10fce(%rip), %rdi     # 0x40384
leaq 0x1c49d(%rip), %rsi     # 0x4b85a
leaq 0x1d917(%rip), %rcx     # 0x4ccdb
movl $0xb72, %edx            # imm = 0xB72
callq 0x30a0
leaq 0x10faf(%rip), %rdi     # 0x40384
leaq 0x1c47e(%rip), %rsi     # 0x4b85a
leaq 0x1d8f8(%rip), %rcx     # 0x4ccdb
movl $0xb71, %edx            # imm = 0xB71
callq 0x30a0
leaq 0x10f90(%rip), %rdi     # 0x40384
leaq 0x1c45f(%rip), %rsi     # 0x4b85a
leaq 0x1d8d9(%rip), %rcx     # 0x4ccdb
movl $0xb66, %edx            # imm = 0xB66
callq 0x30a0
leaq 0x10f71(%rip), %rdi     # 0x40384
leaq 0x1c440(%rip), %rsi     # 0x4b85a
leaq 0x1d8ba(%rip), %rcx     # 0x4ccdb
movl $0xb54, %edx            # imm = 0xB54
callq 0x30a0
leaq 0x10f52(%rip), %rdi     # 0x40384
leaq 0x1c421(%rip), %rsi     # 0x4b85a
leaq 0x1d89b(%rip), %rcx     # 0x4ccdb
movl $0xb48, %edx            # imm = 0xB48
callq 0x30a0
leaq 0x10f33(%rip), %rdi     # 0x40384
leaq 0x1c402(%rip), %rsi     # 0x4b85a
leaq 0x1d87c(%rip), %rcx     # 0x4ccdb
movl $0xb46, %edx            # imm = 0xB46
callq 0x30a0
leaq 0x10f14(%rip), %rdi     # 0x40384
leaq 0x1c3e3(%rip), %rsi     # 0x4b85a
leaq 0x1d85d(%rip), %rcx     # 0x4ccdb
movl $0xae0, %edx            # imm = 0xAE0
callq 0x30a0
leaq 0x10ef5(%rip), %rdi     # 0x40384
leaq 0x1c3c4(%rip), %rsi     # 0x4b85a
leaq 0x1d83e(%rip), %rcx     # 0x4ccdb
movl $0xb49, %edx            # imm = 0xB49
callq 0x30a0
leaq 0x10ed6(%rip), %rdi     # 0x40384
leaq 0x1c3a5(%rip), %rsi     # 0x4b85a
leaq 0x1d81f(%rip), %rcx     # 0x4ccdb
movl $0xae1, %edx            # imm = 0xAE1
callq 0x30a0
leaq 0x10eb7(%rip), %rdi     # 0x40384
leaq 0x1c386(%rip), %rsi     # 0x4b85a
leaq 0x1d800(%rip), %rcx     # 0x4ccdb
movl $0xb47, %edx            # imm = 0xB47
callq 0x30a0
leaq 0x10e98(%rip), %rdi     # 0x40384
leaq 0x1c367(%rip), %rsi     # 0x4b85a
leaq 0x1d7e1(%rip), %rcx     # 0x4ccdb
movl $0xb0b, %edx            # imm = 0xB0B
callq 0x30a0
leaq 0x10e79(%rip), %rdi     # 0x40384
leaq 0x1c348(%rip), %rsi     # 0x4b85a
leaq 0x1d7c2(%rip), %rcx     # 0x4ccdb
movl $0xb3e, %edx            # imm = 0xB3E
callq 0x30a0
leaq 0x10e5a(%rip), %rdi     # 0x40384
leaq 0x1c329(%rip), %rsi     # 0x4b85a
leaq 0x1d7a3(%rip), %rcx     # 0x4ccdb
movl $0xb58, %edx            # imm = 0xB58
callq 0x30a0
leaq 0x10e3b(%rip), %rdi     # 0x40384
leaq 0x1c30a(%rip), %rsi     # 0x4b85a
leaq 0x1d784(%rip), %rcx     # 0x4ccdb
movl $0xb6a, %edx            # imm = 0xB6A
callq 0x30a0
leaq 0x10e1c(%rip), %rdi     # 0x40384
leaq 0x1c2eb(%rip), %rsi     # 0x4b85a
leaq 0x1d765(%rip), %rcx     # 0x4ccdb
movl $0xb42, %edx            # imm = 0xB42
callq 0x30a0
leaq 0x10dfd(%rip), %rdi     # 0x40384
leaq 0x1c2cc(%rip), %rsi     # 0x4b85a
leaq 0x1d746(%rip), %rcx     # 0x4ccdb
movl $0xb21, %edx            # imm = 0xB21
callq 0x30a0
leaq 0x10dde(%rip), %rdi     # 0x40384
leaq 0x1c2ad(%rip), %rsi     # 0x4b85a
leaq 0x1d727(%rip), %rcx     # 0x4ccdb
movl $0xb25, %edx            # imm = 0xB25
callq 0x30a0