// File: /workspace/github_c_makefile_star2_O1/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 0x30148
movq %rcx, %r15
movzbl 0x1(%rcx), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x30167
cmpb $0x0, 0x70(%r15)
je 0x30186
movq %r8, %r14
testq %r8, %r8
je 0x301a5
movzbl 0x1(%r14), %eax
shll $0x8, %eax
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x301c4
cmpb $0x0, 0x70(%r14)
je 0x301e3
movq %rdx, %rbx
movb 0x60(%rdx), %cl
movb 0x60(%r15), %r12b
movb 0x60(%r14), %r13b
cmpl $0xe7f, %esi            # imm = 0xE7F
jle 0x2f558
cmpl $0xea0, %esi            # imm = 0xEA0
jg 0x2f5c5
leal -0xe80(%rsi), %eax
cmpl $0x3, %eax
ja 0x2f749
movl %ecx, %r12d
leaq 0x1e353(%rip), %rcx     # 0x4d858
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x30338
leaq 0x1e3c5(%rip), %rcx     # 0x4d8f4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
xorl %edx, %edx
cmpq %rax, %r15
setl %dl
jmp 0x2ff0a
cmpl $0xe4f, %esi            # imm = 0xE4F
jle 0x2f632
cmpl $0xe6f, %esi            # imm = 0xE6F
jg 0x2f693
cmpl $0xe50, %esi            # imm = 0xE50
je 0x2f7d8
cmpl $0xe60, %esi            # imm = 0xE60
jne 0x30202
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
cmpb $0x9, %al
je 0x2fb40
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x30221
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
andq %rax, %r15
jmp 0x2fc39
cmpl $0xeb0, %esi            # imm = 0xEB0
jg 0x2f6ec
cmpl $0xea1, %esi            # imm = 0xEA1
je 0x2f8e7
cmpl $0xeb0, %esi            # imm = 0xEB0
jne 0x30202
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x30357
leaq 0x1e357(%rip), %rcx     # 0x4d964
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
imulq %rax, %r15
jmp 0x2fc39
cmpl $0xe20, %esi            # imm = 0xE20
je 0x2f860
cmpl $0xe30, %esi            # imm = 0xE30
je 0x2f9c4
cmpl $0xe40, %esi            # imm = 0xE40
jne 0x30202
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
cmpb $0x9, %al
je 0x2fbb9
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x3025f
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
orq %rax, %r15
jmp 0x2fc39
cmpl $0xe70, %esi            # imm = 0xE70
je 0x2f815
cmpl $0xe71, %esi            # imm = 0xE71
jne 0x30202
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2fa90
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2feec
cmpl $0x1, %edx
jne 0x302db
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
jmp 0x2f851
cmpl $0xeb1, %esi            # imm = 0xEB1
je 0x2f920
cmpl $0xeb2, %esi            # imm = 0xEB2
jne 0x30202
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
cmpb $0x9, %al
je 0x2fb73
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x3027e
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
jmp 0x2ff0a
cmpl $0xea0, %esi            # imm = 0xEA0
jne 0x30202
cmpb $0x10, %r12b
jne 0x2fa09
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x33b63
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2fbd4
movq %r14, %rdi
callq 0x3333d
jmp 0x2fbea
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x30319
leaq 0x1e10d(%rip), %rcx     # 0x4d8bc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
xorl %edx, %edx
cmpq %rax, %r15
setg %dl
jmp 0x2ff0a
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
cmpb $0x9, %al
je 0x2fb25
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x30240
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
xorq %rax, %r15
jmp 0x2fc39
xorb $0x10, %r12b
xorb $0x10, %r13b
orb %r12b, %r13b
jne 0x2fa43
movq 0x88(%r15), %rax
movq 0x88(%r14), %rcx
movl 0x30(%rdi), %edx
cmpl $0x2, %edx
je 0x2fee2
cmpl $0x1, %edx
jne 0x302fa
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
movl %edx, 0x88(%rbx)
movb $0x4, 0x71(%rbx)
jmp 0x2ff4c
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
cmpb $0x9, %al
je 0x2fb5b
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x3029d
movq %r15, %rdi
callq 0x3333d
movl $0x1, %edx
testq %rax, %rax
jne 0x2ff0a
jmp 0x2f9f7
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x30376
leaq 0x1dfe2(%rip), %rcx     # 0x4d8a0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
xorl %edx, %edx
cmpq %rax, %r15
setge %dl
jmp 0x2ff0a
cmpb $0x10, %r12b
jne 0x2fadd
movq 0x68(%r15), %rdx
movq %r15, %rsi
callq 0x33b63
movq %rax, %r12
movq 0x88(%r15), %r15
leal -0x1(%r13), %eax
cmpb $0x4, %al
ja 0x2fc48
movq %r14, %rdi
callq 0x3333d
jmp 0x2fc5e
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x30395
leaq 0x1e004(%rip), %rcx     # 0x4d948
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
movq %rax, %rcx
movq %r15, %rax
cqto
idivq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x2ff11
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x303b4
leaq 0x1df3d(%rip), %rcx     # 0x4d8d8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
xorl %edx, %edx
cmpq %rax, %r15
setle %dl
jmp 0x2ff0a
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
cmpb $0x9, %al
je 0x2fb96
movzbl %al, %eax
cmpl $0x5, %eax
jne 0x302bc
movq %r15, %rdi
callq 0x3333d
testq %rax, %rax
je 0x2ff08
movq %r14, %rdi
callq 0x3333d
xorl %edx, %edx
testq %rax, %rax
jmp 0x2fad5
cmpb $0x10, %r13b
jne 0x2fbf6
movq 0x68(%r14), %rdx
movq %r14, %rsi
callq 0x33b63
movq %rax, %r13
movq 0x88(%r14), %r14
leal -0x1(%r12), %eax
cmpb $0x4, %al
ja 0x2ff24
movq %r15, %rdi
callq 0x3333d
jmp 0x2ff3a
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x30411
leaq 0x1de1d(%rip), %rcx     # 0x4d884
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
jmp 0x2ff0a
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x30430
leaq 0x1ddb4(%rip), %rcx     # 0x4d868
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
jmp 0x2ff0a
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x3044f
leaq 0x1de0f(%rip), %rcx     # 0x4d910
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
subq %rax, %r15
jmp 0x2fc39
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
xorq %rax, %r15
jmp 0x3012b
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
andq %rax, %r15
jmp 0x3012b
movq %r15, %rdi
callq 0x3367e
movl $0x1, %edx
testq %rax, %rax
jne 0x3004b
jmp 0x2fba7
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
jmp 0x3004b
movq %r15, %rdi
callq 0x3367e
testq %rax, %rax
je 0x2ff01
movq %r14, %rdi
callq 0x3367e
xorl %edx, %edx
testq %rax, %rax
jmp 0x30048
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
orq %rax, %r15
jmp 0x3012b
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x303d3
movq %r14, %rdi
callq 0x3367e
imulq %r12, %rax
addq %r15, %rax
jmp 0x2ff41
movl %ecx, %r12d
movq %r15, %rdi
movq %r14, %rsi
callq 0x33457
movzbl %al, %eax
addl $-0x5, %eax
cmpl $0x6, %eax
ja 0x3048d
leaq 0x1dd12(%rip), %rcx     # 0x4d92c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x3333d
movq %rax, %r15
movq %r14, %rdi
callq 0x3333d
addq %rax, %r15
movzbl %r12b, %esi
movq %rbx, %rdi
movq %r15, %rdx
jmp 0x2ff11
addb $-0x6, %r13b
cmpb $0x3, %r13b
ja 0x303f2
movq %r14, %rdi
callq 0x3367e
imulq %r12, %rax
subq %rax, %r15
movq %r15, 0x88(%rbx)
jmp 0x2ff48
movq %r15, %rdi
callq 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jbe 0x2fda2
jmp 0x2ff87
movq %r15, %rdi
callq 0x33982
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
cmpltsd -0x40(%rbp), %xmm0
jmp 0x30002
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
xorl %edx, %edx
cmpq %rax, %r15
seta %dl
jmp 0x3004b
movq %r15, %rdi
callq 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
jb 0x2fda2
jmp 0x2ff87
movq %r15, %rdi
callq 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
movss -0x40(%rbp), %xmm1
divss %xmm0, %xmm1
jmp 0x30075
movq %r15, %rdi
callq 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
mulss -0x40(%rbp), %xmm0
jmp 0x300db
movq %r15, %rdi
callq 0x33982
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
cmplesd -0x40(%rbp), %xmm0
jmp 0x30002
movq %r15, %rdi
callq 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
ucomiss -0x40(%rbp), %xmm0
jbe 0x2fda2
jmp 0x2ff87
movq %r15, %rdi
callq 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
ucomiss -0x40(%rbp), %xmm0
jae 0x2ff87
xorps %xmm0, %xmm0
jmp 0x300df
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
xorl %edx, %edx
cmpq %rax, %r15
setae %dl
jmp 0x3004b
movq %r15, %rdi
callq 0x33982
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
movsd -0x40(%rbp), %xmm1
divsd %xmm0, %xmm1
jmp 0x3009c
movq %r15, %rdi
callq 0x33982
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
mulsd -0x40(%rbp), %xmm0
jmp 0x300df
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
movq %rax, %rcx
movq %r15, %rax
xorl %edx, %edx
divq %rcx
movzbl %r12b, %esi
movq %rbx, %rdi
movq %rax, %rdx
jmp 0x30135
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
imulq %rax, %r15
jmp 0x3012b
movq %r15, %rdi
callq 0x33982
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
movapd -0x40(%rbp), %xmm1
cmpltsd %xmm0, %xmm1
jmp 0x2fe95
movq %r15, %rdi
callq 0x33982
movapd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
movapd -0x40(%rbp), %xmm1
cmplesd %xmm0, %xmm1
movsd 0x1e293(%rip), %xmm0    # 0x4e130
jmp 0x3000a
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
xorl %edx, %edx
cmpq %rax, %r15
setb %dl
jmp 0x3004b
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
xorl %edx, %edx
cmpq %rax, %r15
setbe %dl
jmp 0x3004b
xorl %edx, %edx
cmpq %rcx, %rax
sete %dl
jmp 0x2fef4
xorl %edx, %edx
cmpq %rcx, %rax
setne %dl
movq %rdx, 0x88(%rbx)
movb $0x5, 0x71(%rbx)
jmp 0x2ff4c
xorl %edx, %edx
jmp 0x3004b
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 0x33600
addb $-0x6, %r12b
cmpb $0x3, %r12b
ja 0x3046e
movq %r15, %rdi
callq 0x3367e
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 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
xorps %xmm0, %xmm0
jne 0x300df
jp 0x300df
movsd 0x1e1a1(%rip), %xmm0    # 0x4e130
jmp 0x300df
movq %r15, %rdi
callq 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
movss -0x40(%rbp), %xmm1
ucomiss %xmm0, %xmm1
movsd 0x1e177(%rip), %xmm0    # 0x4e130
jne 0x300df
jnp 0x2fda2
jmp 0x300df
movq %r15, %rdi
callq 0x33982
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
cmpeqsd -0x40(%rbp), %xmm0
jmp 0x30002
movq %r15, %rdi
callq 0x33982
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
cmpneqsd -0x40(%rbp), %xmm0
movsd 0x1e126(%rip), %xmm1    # 0x4e130
andpd %xmm1, %xmm0
jmp 0x300df
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
xorl %edx, %edx
cmpq %rax, %r15
sete %dl
jmp 0x3004b
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
xorl %edx, %edx
cmpq %rax, %r15
setne %dl
movzbl %r12b, %esi
movq %rbx, %rdi
jmp 0x30135
movq %r15, %rdi
callq 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
movss -0x40(%rbp), %xmm1
subss %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
jmp 0x300df
movq %r15, %rdi
callq 0x33982
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
movsd -0x40(%rbp), %xmm1
subsd %xmm0, %xmm1
movzbl %r12b, %esi
movq %rbx, %rdi
movapd %xmm1, %xmm0
jmp 0x300e6
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
subq %rax, %r15
jmp 0x3012b
movq %r15, %rdi
callq 0x33863
movss %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33863
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 0x33aa1
movq %r15, %rdi
callq 0x33982
movsd %xmm0, -0x40(%rbp)
movq %r14, %rdi
callq 0x33982
addsd -0x40(%rbp), %xmm0
jmp 0x300df
movq %r15, %rdi
callq 0x3367e
movq %rax, %r15
movq %r14, %rdi
callq 0x3367e
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 0x337a9
leaq 0x1f1c1(%rip), %rdi     # 0x4f310
leaq 0x1e01a(%rip), %rsi     # 0x4e170
leaq 0x1f411(%rip), %rcx     # 0x4f56e
movl $0x7ae, %edx            # imm = 0x7AE
callq 0x30a0
leaq 0x1f1aa(%rip), %rdi     # 0x4f318
leaq 0x1dffb(%rip), %rsi     # 0x4e170
leaq 0x1f3f2(%rip), %rcx     # 0x4f56e
movl $0x7af, %edx            # imm = 0x7AF
callq 0x30a0
leaq 0x1f1aa(%rip), %rdi     # 0x4f337
leaq 0x1dfdc(%rip), %rsi     # 0x4e170
leaq 0x1f3d3(%rip), %rcx     # 0x4f56e
movl $0x7b0, %edx            # imm = 0x7B0
callq 0x30a0
leaq 0x14d2c(%rip), %rdi     # 0x44ed8
leaq 0x1dfbd(%rip), %rsi     # 0x4e170
leaq 0x1f3b4(%rip), %rcx     # 0x4f56e
movl $0x7b1, %edx            # imm = 0x7B1
callq 0x30a0
leaq 0x1f193(%rip), %rdi     # 0x4f35e
leaq 0x1df9e(%rip), %rsi     # 0x4e170
leaq 0x1f395(%rip), %rcx     # 0x4f56e
movl $0x7b2, %edx            # imm = 0x7B2
callq 0x30a0
leaq 0x1f193(%rip), %rdi     # 0x4f37d
leaq 0x1df7f(%rip), %rsi     # 0x4e170
leaq 0x1f376(%rip), %rcx     # 0x4f56e
movl $0x7b3, %edx            # imm = 0x7B3
callq 0x30a0
leaq 0x10184(%rip), %rdi     # 0x4038d
leaq 0x1df60(%rip), %rsi     # 0x4e170
leaq 0x1f357(%rip), %rcx     # 0x4f56e
movl $0x88c, %edx            # imm = 0x88C
callq 0x30a0
leaq 0x10165(%rip), %rdi     # 0x4038d
leaq 0x1df41(%rip), %rsi     # 0x4e170
leaq 0x1f338(%rip), %rcx     # 0x4f56e
movl $0x886, %edx            # imm = 0x886
callq 0x30a0
leaq 0x10146(%rip), %rdi     # 0x4038d
leaq 0x1df22(%rip), %rsi     # 0x4e170
leaq 0x1f319(%rip), %rcx     # 0x4f56e
movl $0x887, %edx            # imm = 0x887
callq 0x30a0
leaq 0x10127(%rip), %rdi     # 0x4038d
leaq 0x1df03(%rip), %rsi     # 0x4e170
leaq 0x1f2fa(%rip), %rcx     # 0x4f56e
movl $0x888, %edx            # imm = 0x888
callq 0x30a0
leaq 0x10108(%rip), %rdi     # 0x4038d
leaq 0x1dee4(%rip), %rsi     # 0x4e170
leaq 0x1f2db(%rip), %rcx     # 0x4f56e
movl $0x808, %edx            # imm = 0x808
callq 0x30a0
leaq 0x100e9(%rip), %rdi     # 0x4038d
leaq 0x1dec5(%rip), %rsi     # 0x4e170
leaq 0x1f2bc(%rip), %rcx     # 0x4f56e
movl $0x88a, %edx            # imm = 0x88A
callq 0x30a0
leaq 0x100ca(%rip), %rdi     # 0x4038d
leaq 0x1dea6(%rip), %rsi     # 0x4e170
leaq 0x1f29d(%rip), %rcx     # 0x4f56e
movl $0x889, %edx            # imm = 0x889
callq 0x30a0
leaq 0x100ab(%rip), %rdi     # 0x4038d
leaq 0x1de87(%rip), %rsi     # 0x4e170
leaq 0x1f27e(%rip), %rcx     # 0x4f56e
movl $0x87e, %edx            # imm = 0x87E
callq 0x30a0
leaq 0x1008c(%rip), %rdi     # 0x4038d
leaq 0x1de68(%rip), %rsi     # 0x4e170
leaq 0x1f25f(%rip), %rcx     # 0x4f56e
movl $0x86c, %edx            # imm = 0x86C
callq 0x30a0
leaq 0x1006d(%rip), %rdi     # 0x4038d
leaq 0x1de49(%rip), %rsi     # 0x4e170
leaq 0x1f240(%rip), %rcx     # 0x4f56e
movl $0x860, %edx            # imm = 0x860
callq 0x30a0
leaq 0x1004e(%rip), %rdi     # 0x4038d
leaq 0x1de2a(%rip), %rsi     # 0x4e170
leaq 0x1f221(%rip), %rcx     # 0x4f56e
movl $0x85e, %edx            # imm = 0x85E
callq 0x30a0
leaq 0x1002f(%rip), %rdi     # 0x4038d
leaq 0x1de0b(%rip), %rsi     # 0x4e170
leaq 0x1f202(%rip), %rcx     # 0x4f56e
movl $0x7f8, %edx            # imm = 0x7F8
callq 0x30a0
leaq 0x10010(%rip), %rdi     # 0x4038d
leaq 0x1ddec(%rip), %rsi     # 0x4e170
leaq 0x1f1e3(%rip), %rcx     # 0x4f56e
movl $0x861, %edx            # imm = 0x861
callq 0x30a0
leaq 0xfff1(%rip), %rdi      # 0x4038d
leaq 0x1ddcd(%rip), %rsi     # 0x4e170
leaq 0x1f1c4(%rip), %rcx     # 0x4f56e
movl $0x7f9, %edx            # imm = 0x7F9
callq 0x30a0
leaq 0xffd2(%rip), %rdi      # 0x4038d
leaq 0x1ddae(%rip), %rsi     # 0x4e170
leaq 0x1f1a5(%rip), %rcx     # 0x4f56e
movl $0x85f, %edx            # imm = 0x85F
callq 0x30a0
leaq 0xffb3(%rip), %rdi      # 0x4038d
leaq 0x1dd8f(%rip), %rsi     # 0x4e170
leaq 0x1f186(%rip), %rcx     # 0x4f56e
movl $0x823, %edx            # imm = 0x823
callq 0x30a0
leaq 0xff94(%rip), %rdi      # 0x4038d
leaq 0x1dd70(%rip), %rsi     # 0x4e170
leaq 0x1f167(%rip), %rcx     # 0x4f56e
movl $0x856, %edx            # imm = 0x856
callq 0x30a0
leaq 0xff75(%rip), %rdi      # 0x4038d
leaq 0x1dd51(%rip), %rsi     # 0x4e170
leaq 0x1f148(%rip), %rcx     # 0x4f56e
movl $0x870, %edx            # imm = 0x870
callq 0x30a0
leaq 0xff56(%rip), %rdi      # 0x4038d
leaq 0x1dd32(%rip), %rsi     # 0x4e170
leaq 0x1f129(%rip), %rcx     # 0x4f56e
movl $0x882, %edx            # imm = 0x882
callq 0x30a0
leaq 0xff37(%rip), %rdi      # 0x4038d
leaq 0x1dd13(%rip), %rsi     # 0x4e170
leaq 0x1f10a(%rip), %rcx     # 0x4f56e
movl $0x85a, %edx            # imm = 0x85A
callq 0x30a0
leaq 0xff18(%rip), %rdi      # 0x4038d
leaq 0x1dcf4(%rip), %rsi     # 0x4e170
leaq 0x1f0eb(%rip), %rcx     # 0x4f56e
movl $0x839, %edx            # imm = 0x839
callq 0x30a0
leaq 0xfef9(%rip), %rdi      # 0x4038d
leaq 0x1dcd5(%rip), %rsi     # 0x4e170
leaq 0x1f0cc(%rip), %rcx     # 0x4f56e
movl $0x83d, %edx            # imm = 0x83D
callq 0x30a0