// File: /workspace/github_c_makefile_star2_O3/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 0x2f64b
movq %rcx, %r15
movzbl 0x1(%rcx), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2f66a
cmpb $0x0, 0x70(%r15)
je 0x2f689
movq %r8, %r14
testq %r8, %r8
je 0x2f6a8
movzbl 0x1(%r14), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x2f6c7
cmpb $0x0, 0x70(%r14)
je 0x2f6e6
movq %rdx, %rbx
movb 0x60(%rdx), %cl
movb 0x60(%r15), %r12b
movb 0x60(%r14), %r13b
cmpl $0xe7f, %esi            # imm = 0xE7F
jle 0x2ea5b
cmpl $0xea0, %esi            # imm = 0xEA0
jg 0x2eac8
leal -0xe80(%rsi), %eax
cmpl $0x3, %eax
ja 0x2ec4c
movl %ecx, %r12d
leaq 0x1ce20(%rip), %rcx     # 0x4b828
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f83b
leaq 0x1ce92(%rip), %rcx     # 0x4b8c4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
xorl %edx, %edx
cmpq %rax, %r15
setl %dl
jmp 0x2f40d
cmpl $0xe4f, %esi            # imm = 0xE4F
jle 0x2eb35
cmpl $0xe6f, %esi            # imm = 0xE6F
jg 0x2eb96
cmpl $0xe50, %esi            # imm = 0xE50
je 0x2ecdb
cmpl $0xe60, %esi            # imm = 0xE60
jne 0x2f705
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
cmpb $0x9, %al
je 0x2f043
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f724
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
andq %rax, %r15
jmp 0x2f13c
cmpl $0xeb0, %esi            # imm = 0xEB0
jg 0x2ebef
cmpl $0xea1, %esi            # imm = 0xEA1
je 0x2edea
cmpl $0xeb0, %esi            # imm = 0xEB0
jne 0x2f705
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f85a
leaq 0x1ce24(%rip), %rcx     # 0x4b934
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
imulq %rax, %r15
jmp 0x2f13c
cmpl $0xe20, %esi            # imm = 0xE20
je 0x2ed63
cmpl $0xe30, %esi            # imm = 0xE30
je 0x2eec7
cmpl $0xe40, %esi            # imm = 0xE40
jne 0x2f705
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
cmpb $0x9, %al
je 0x2f0bc
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f762
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
orq %rax, %r15
jmp 0x2f13c
cmpl $0xe70, %esi            # imm = 0xE70
je 0x2ed18
cmpl $0xe71, %esi            # imm = 0xE71
jne 0x2f705
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2ef93
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2f3ef
cmpl $0x1, %edx
jne 0x2f7de
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
jmp 0x2ed54
cmpl $0xeb1, %esi            # imm = 0xEB1
je 0x2ee23
cmpl $0xeb2, %esi            # imm = 0xEB2
jne 0x2f705
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
cmpb $0x9, %al
je 0x2f076
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f781
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
jmp 0x2f40d
cmpl $0xea0, %esi            # imm = 0xEA0
jne 0x2f705
cmpb $0x10, %r12b
jne 0x2ef0c
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x32d1a
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2f0d7
movq %r14, %rdi
callq 0x32516
jmp 0x2f0ed
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f81c
leaq 0x1cbda(%rip), %rcx     # 0x4b88c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
xorl %edx, %edx
cmpq %rax, %r15
setg %dl
jmp 0x2f40d
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
cmpb $0x9, %al
je 0x2f028
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f743
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
xorq %rax, %r15
jmp 0x2f13c
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2ef46
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2f3e5
cmpl $0x1, %edx
jne 0x2f7fd
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
movl %edx, 0x88(%rbx)
movb $0x4, 0x71(%rbx)
jmp 0x2f44f
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
cmpb $0x9, %al
je 0x2f05e
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f7a0
movq %r15, %rdi
callq 0x32516
movl $0x1, %edx
testq %rax, %rax
jne 0x2f40d
jmp 0x2eefa
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f879
leaq 0x1caaf(%rip), %rcx     # 0x4b870
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
xorl %edx, %edx
cmpq %rax, %r15
setge %dl
jmp 0x2f40d
cmpb $0x10, %r12b
jne 0x2efe0
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x32d1a
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2f14b
movq %r14, %rdi
callq 0x32516
jmp 0x2f161
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f898
leaq 0x1cad1(%rip), %rcx     # 0x4b918
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2f414
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f8b7
leaq 0x1ca0a(%rip), %rcx     # 0x4b8a8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
xorl %edx, %edx
cmpq %rax, %r15
setle %dl
jmp 0x2f40d
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
cmpb $0x9, %al
je 0x2f099
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x2f7bf
movq %r15, %rdi
callq 0x32516
testq %rax, %rax
je 0x2f40b
movq %r14, %rdi
callq 0x32516
xorl %edx, %edx
testq %rax, %rax
jmp 0x2efd8
cmpb $0x10, %r13b
jne 0x2f0f9
movq 0x68(%r14), %rdx
movq %r14, %rsi
callq 0x32d1a
movq %rax, %r13
movq 0x88(%r14), %r14
leal -0x1(%r12), %eax
cmpb $0x4, %al
ja 0x2f427
movq %r15, %rdi
callq 0x32516
jmp 0x2f43d
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f914
leaq 0x1c8ea(%rip), %rcx     # 0x4b854
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
jmp 0x2f40d
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f933
leaq 0x1c881(%rip), %rcx     # 0x4b838
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
jmp 0x2f40d
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f952
leaq 0x1c8dc(%rip), %rcx     # 0x4b8e0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
subq %rax, %r15
jmp 0x2f13c
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
xorq %rax, %r15
jmp 0x2f62e
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
andq %rax, %r15
jmp 0x2f62e
movq %r15, %rdi
callq 0x32835
movl $0x1, %edx
testq %rax, %rax
jne 0x2f54e
jmp 0x2f0aa
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
jmp 0x2f54e
movq %r15, %rdi
callq 0x32835
testq %rax, %rax
je 0x2f404
movq %r14, %rdi
callq 0x32835
xorl %edx, %edx
testq %rax, %rax
jmp 0x2f54b
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
orq %rax, %r15
jmp 0x2f62e
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2f8d6
movq %r14, %rdi
callq 0x32835
imulq %r12, %rax
addq %r15, %rax
jmp 0x2f444
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x32630
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x2f990
leaq 0x1c7df(%rip), %rcx     # 0x4b8fc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x32516
movq %rax, %r15
movq %r14, %rdi
callq 0x32516
addq %rax, %r15
movzbl %r12b, %esi
movq %rbx, %rdi
movq %r15, %rdx
jmp 0x2f414
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x2f8f5
movq %r14, %rdi
callq 0x32835
imulq %r12, %rax
subq %rax, %r15
movq %r15, 0x88(%rbx)
jmp 0x2f44b
movq %r15, %rdi
callq 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x2f2a5
jmp 0x2f48a
movq %r15, %rdi
callq 0x32b39
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
cmpltsd -0x40(%rbp), %xmm0
jmp 0x2f505
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
xorl %edx, %edx
cmpq %rax, %r15
seta %dl
jmp 0x2f54e
movq %r15, %rdi
callq 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jb 0x2f2a5
jmp 0x2f48a
movq %r15, %rdi
callq 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
movss -0x40(%rbp), %xmm1
divss %xmm0, %xmm1
jmp 0x2f578
movq %r15, %rdi
callq 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
mulss -0x40(%rbp), %xmm0
jmp 0x2f5de
movq %r15, %rdi
callq 0x32b39
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
cmplesd -0x40(%rbp), %xmm0
jmp 0x2f505
movq %r15, %rdi
callq 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
ucomiss -0x40(%rbp), %xmm0
jbe 0x2f2a5
jmp 0x2f48a
movq %r15, %rdi
callq 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
ucomiss -0x40(%rbp), %xmm0
jae 0x2f48a
xorps %xmm0, %xmm0
jmp 0x2f5e2
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
xorl %edx, %edx
cmpq %rax, %r15
setae %dl
jmp 0x2f54e
movq %r15, %rdi
callq 0x32b39
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
movsd -0x40(%rbp), %xmm1
divsd %xmm0, %xmm1
jmp 0x2f59f
movq %r15, %rdi
callq 0x32b39
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
mulsd -0x40(%rbp), %xmm0
jmp 0x2f5e2
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2f638
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
imulq %rax, %r15
jmp 0x2f62e
movq %r15, %rdi
callq 0x32b39
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
movapd -0x40(%rbp), %xmm1
cmpltsd %xmm0, %xmm1
jmp 0x2f398
movq %r15, %rdi
callq 0x32b39
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
movapd -0x40(%rbp), %xmm1
cmplesd %xmm0, %xmm1
movsd 0x1cd60(%rip), %xmm0    # 0x4c100
jmp 0x2f50d
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
xorl %edx, %edx
cmpq %rax, %r15
setb %dl
jmp 0x2f54e
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
xorl %edx, %edx
cmpq %rax, %r15
setbe %dl
jmp 0x2f54e
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
jmp 0x2f3f7
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
movq %rdx, 0x88(%rbx)
movb $0x5, 0x71(%rbx)
jmp 0x2f44f
xorl %edx, %edx
jmp 0x2f54e
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 0x327b7
addb $-0x6, %r12b
cmpb $0x3, %r12b
ja 0x2f971
movq %r15, %rdi
callq 0x32835
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 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
xorps %xmm0, %xmm0
jne 0x2f5e2
jp 0x2f5e2
movsd 0x1cc6e(%rip), %xmm0    # 0x4c100
jmp 0x2f5e2
movq %r15, %rdi
callq 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
movsd 0x1cc44(%rip), %xmm0    # 0x4c100
jne 0x2f5e2
jnp 0x2f2a5
jmp 0x2f5e2
movq %r15, %rdi
callq 0x32b39
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
cmpeqsd -0x40(%rbp), %xmm0
jmp 0x2f505
movq %r15, %rdi
callq 0x32b39
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
cmpneqsd -0x40(%rbp), %xmm0
movsd 0x1cbf3(%rip), %xmm1    # 0x4c100
andpd %xmm1, %xmm0
jmp 0x2f5e2
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
jmp 0x2f54e
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
movzbl %r12b, %esi
movq %rbx, %rdi
jmp 0x2f638
movq %r15, %rdi
callq 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
movss -0x40(%rbp), %xmm1
subss %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
jmp 0x2f5e2
movq %r15, %rdi
callq 0x32b39
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
movsd -0x40(%rbp), %xmm1
subsd %xmm0, %xmm1
movzbl %r12b, %esi
movq %rbx, %rdi
movapd %xmm1, %xmm0
jmp 0x2f5e9
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
subq %rax, %r15
jmp 0x2f62e
movq %r15, %rdi
callq 0x32a1a
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32a1a
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 0x32c58
movq %r15, %rdi
callq 0x32b39
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x32b39
addsd -0x40(%rbp), %xmm0
jmp 0x2f5e2
movq %r15, %rdi
callq 0x32835
movq %rax, %r15
movq %r14, %rdi
callq 0x32835
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 0x32960
leaq 0x1dc8e(%rip), %rdi     # 0x4d2e0
leaq 0x1cae7(%rip), %rsi     # 0x4c140
leaq 0x1dede(%rip), %rcx     # 0x4d53e
movl $0x7ae, %edx            # imm = 0x7AE
callq 0x30a0
leaq 0x1dc77(%rip), %rdi     # 0x4d2e8
leaq 0x1cac8(%rip), %rsi     # 0x4c140
leaq 0x1debf(%rip), %rcx     # 0x4d53e
movl $0x7af, %edx            # imm = 0x7AF
callq 0x30a0
leaq 0x1dc77(%rip), %rdi     # 0x4d307
leaq 0x1caa9(%rip), %rsi     # 0x4c140
leaq 0x1dea0(%rip), %rcx     # 0x4d53e
movl $0x7b0, %edx            # imm = 0x7B0
callq 0x30a0
leaq 0x137e9(%rip), %rdi     # 0x42e98
leaq 0x1ca8a(%rip), %rsi     # 0x4c140
leaq 0x1de81(%rip), %rcx     # 0x4d53e
movl $0x7b1, %edx            # imm = 0x7B1
callq 0x30a0
leaq 0x1dc60(%rip), %rdi     # 0x4d32e
leaq 0x1ca6b(%rip), %rsi     # 0x4c140
leaq 0x1de62(%rip), %rcx     # 0x4d53e
movl $0x7b2, %edx            # imm = 0x7B2
callq 0x30a0
leaq 0x1dc60(%rip), %rdi     # 0x4d34d
leaq 0x1ca4c(%rip), %rsi     # 0x4c140
leaq 0x1de43(%rip), %rcx     # 0x4d53e
movl $0x7b3, %edx            # imm = 0x7B3
callq 0x30a0
leaq 0xec5d(%rip), %rdi      # 0x3e369
leaq 0x1ca2d(%rip), %rsi     # 0x4c140
leaq 0x1de24(%rip), %rcx     # 0x4d53e
movl $0x88c, %edx            # imm = 0x88C
callq 0x30a0
leaq 0xec3e(%rip), %rdi      # 0x3e369
leaq 0x1ca0e(%rip), %rsi     # 0x4c140
leaq 0x1de05(%rip), %rcx     # 0x4d53e
movl $0x886, %edx            # imm = 0x886
callq 0x30a0
leaq 0xec1f(%rip), %rdi      # 0x3e369
leaq 0x1c9ef(%rip), %rsi     # 0x4c140
leaq 0x1dde6(%rip), %rcx     # 0x4d53e
movl $0x887, %edx            # imm = 0x887
callq 0x30a0
leaq 0xec00(%rip), %rdi      # 0x3e369
leaq 0x1c9d0(%rip), %rsi     # 0x4c140
leaq 0x1ddc7(%rip), %rcx     # 0x4d53e
movl $0x888, %edx            # imm = 0x888
callq 0x30a0
leaq 0xebe1(%rip), %rdi      # 0x3e369
leaq 0x1c9b1(%rip), %rsi     # 0x4c140
leaq 0x1dda8(%rip), %rcx     # 0x4d53e
movl $0x808, %edx            # imm = 0x808
callq 0x30a0
leaq 0xebc2(%rip), %rdi      # 0x3e369
leaq 0x1c992(%rip), %rsi     # 0x4c140
leaq 0x1dd89(%rip), %rcx     # 0x4d53e
movl $0x88a, %edx            # imm = 0x88A
callq 0x30a0
leaq 0xeba3(%rip), %rdi      # 0x3e369
leaq 0x1c973(%rip), %rsi     # 0x4c140
leaq 0x1dd6a(%rip), %rcx     # 0x4d53e
movl $0x889, %edx            # imm = 0x889
callq 0x30a0
leaq 0xeb84(%rip), %rdi      # 0x3e369
leaq 0x1c954(%rip), %rsi     # 0x4c140
leaq 0x1dd4b(%rip), %rcx     # 0x4d53e
movl $0x87e, %edx            # imm = 0x87E
callq 0x30a0
leaq 0xeb65(%rip), %rdi      # 0x3e369
leaq 0x1c935(%rip), %rsi     # 0x4c140
leaq 0x1dd2c(%rip), %rcx     # 0x4d53e
movl $0x86c, %edx            # imm = 0x86C
callq 0x30a0
leaq 0xeb46(%rip), %rdi      # 0x3e369
leaq 0x1c916(%rip), %rsi     # 0x4c140
leaq 0x1dd0d(%rip), %rcx     # 0x4d53e
movl $0x860, %edx            # imm = 0x860
callq 0x30a0
leaq 0xeb27(%rip), %rdi      # 0x3e369
leaq 0x1c8f7(%rip), %rsi     # 0x4c140
leaq 0x1dcee(%rip), %rcx     # 0x4d53e
movl $0x85e, %edx            # imm = 0x85E
callq 0x30a0
leaq 0xeb08(%rip), %rdi      # 0x3e369
leaq 0x1c8d8(%rip), %rsi     # 0x4c140
leaq 0x1dccf(%rip), %rcx     # 0x4d53e
movl $0x7f8, %edx            # imm = 0x7F8
callq 0x30a0
leaq 0xeae9(%rip), %rdi      # 0x3e369
leaq 0x1c8b9(%rip), %rsi     # 0x4c140
leaq 0x1dcb0(%rip), %rcx     # 0x4d53e
movl $0x861, %edx            # imm = 0x861
callq 0x30a0
leaq 0xeaca(%rip), %rdi      # 0x3e369
leaq 0x1c89a(%rip), %rsi     # 0x4c140
leaq 0x1dc91(%rip), %rcx     # 0x4d53e
movl $0x7f9, %edx            # imm = 0x7F9
callq 0x30a0
leaq 0xeaab(%rip), %rdi      # 0x3e369
leaq 0x1c87b(%rip), %rsi     # 0x4c140
leaq 0x1dc72(%rip), %rcx     # 0x4d53e
movl $0x85f, %edx            # imm = 0x85F
callq 0x30a0
leaq 0xea8c(%rip), %rdi      # 0x3e369
leaq 0x1c85c(%rip), %rsi     # 0x4c140
leaq 0x1dc53(%rip), %rcx     # 0x4d53e
movl $0x823, %edx            # imm = 0x823
callq 0x30a0
leaq 0xea6d(%rip), %rdi      # 0x3e369
leaq 0x1c83d(%rip), %rsi     # 0x4c140
leaq 0x1dc34(%rip), %rcx     # 0x4d53e
movl $0x856, %edx            # imm = 0x856
callq 0x30a0
leaq 0xea4e(%rip), %rdi      # 0x3e369
leaq 0x1c81e(%rip), %rsi     # 0x4c140
leaq 0x1dc15(%rip), %rcx     # 0x4d53e
movl $0x870, %edx            # imm = 0x870
callq 0x30a0
leaq 0xea2f(%rip), %rdi      # 0x3e369
leaq 0x1c7ff(%rip), %rsi     # 0x4c140
leaq 0x1dbf6(%rip), %rcx     # 0x4d53e
movl $0x882, %edx            # imm = 0x882
callq 0x30a0
leaq 0xea10(%rip), %rdi      # 0x3e369
leaq 0x1c7e0(%rip), %rsi     # 0x4c140
leaq 0x1dbd7(%rip), %rcx     # 0x4d53e
movl $0x85a, %edx            # imm = 0x85A
callq 0x30a0
leaq 0xe9f1(%rip), %rdi      # 0x3e369
leaq 0x1c7c1(%rip), %rsi     # 0x4c140
leaq 0x1dbb8(%rip), %rcx     # 0x4d53e
movl $0x839, %edx            # imm = 0x839
callq 0x30a0
leaq 0xe9d2(%rip), %rdi      # 0x3e369
leaq 0x1c7a2(%rip), %rsi     # 0x4c140
leaq 0x1db99(%rip), %rcx     # 0x4d53e
movl $0x83d, %edx            # imm = 0x83D
callq 0x30a0