// File: /workspace/github_c_makefile_star2_O0/mmcco[P]sljit/sljit_src/sljitLir.c
// Function: sljit_emit_cmp
struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, int type,
	int src1, long src1w,
	int src2, long src2w)
{
	/* Default compare for most architectures. */
	int flags, tmp_src, condition;
	long tmp_srcw;

	CHECK_ERROR_PTR();
	CHECK_PTR(check_sljit_emit_cmp(compiler, type, src1, src1w, src2, src2w));

	condition = type & 0xff;
#if (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64)
	if ((condition == SLJIT_EQUAL || condition == SLJIT_NOT_EQUAL)) {
		if ((src1 & SLJIT_IMM) && !src1w) {
			src1 = src2;
			src1w = src2w;
			src2 = SLJIT_IMM;
			src2w = 0;
		}
		if ((src2 & SLJIT_IMM) && !src2w)
			return emit_cmp_to0(compiler, type, src1, src1w);
	}
#endif

	if ((src1 & SLJIT_IMM) && !(src2 & SLJIT_IMM)) {
		/* Immediate is prefered as second argument by most architectures. */
		switch (condition) {
		case SLJIT_LESS:
			condition = SLJIT_GREATER;
			break;
		case SLJIT_GREATER_EQUAL:
			condition = SLJIT_LESS_EQUAL;
			break;
		case SLJIT_GREATER:
			condition = SLJIT_LESS;
			break;
		case SLJIT_LESS_EQUAL:
			condition = SLJIT_GREATER_EQUAL;
			break;
		case SLJIT_SIG_LESS:
			condition = SLJIT_SIG_GREATER;
			break;
		case SLJIT_SIG_GREATER_EQUAL:
			condition = SLJIT_SIG_LESS_EQUAL;
			break;
		case SLJIT_SIG_GREATER:
			condition = SLJIT_SIG_LESS;
			break;
		case SLJIT_SIG_LESS_EQUAL:
			condition = SLJIT_SIG_GREATER_EQUAL;
			break;
		}
		type = condition | (type & (SLJIT_INT_OP | SLJIT_REWRITABLE_JUMP));
		tmp_src = src1;
		src1 = src2;
		src2 = tmp_src;
		tmp_srcw = src1w;
		src1w = src2w;
		src2w = tmp_srcw;
	}

	if (condition <= SLJIT_NOT_ZERO)
		flags = SLJIT_SET_E;
	else if (condition <= SLJIT_LESS_EQUAL)
		flags = SLJIT_SET_U;
	else
		flags = SLJIT_SET_S;

#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
		|| (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
	compiler->skip_checks = 1;
#endif
	if (sljit_emit_op2(compiler, SLJIT_SUB | flags | (type & SLJIT_INT_OP),
	    SLJIT_UNUSED, 0, src1, src1w, src2, src2w))
		return NULL;
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
		|| (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
	compiler->skip_checks = 1;
#endif
	return sljit_emit_jump(compiler, condition | (type & SLJIT_REWRITABLE_JUMP));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movl %edx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movl %r8d, -0x24(%rbp)
movq %r9, -0x30(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x2acb4
movq $0x0, -0x8(%rbp)
jmp 0x2ae42
jmp 0x2acb6
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movq -0x20(%rbp), %rcx
movl -0x24(%rbp), %r8d
movq -0x30(%rbp), %r9
callq 0x2ae50
movl -0x14(%rbp), %eax
andl $0xff, %eax
movl %eax, -0x3c(%rbp)
movl -0x18(%rbp), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0x2ada0
movl -0x24(%rbp), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0x2ada0
movl -0x3c(%rbp), %eax
addl $-0x2, %eax
movl %eax, %ecx
movq %rcx, -0x50(%rbp)
subl $0x7, %eax
ja 0x2ad65
movq -0x50(%rbp), %rax
leaq 0x5a1e(%rip), %rcx      # 0x30734
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x4, -0x3c(%rbp)
jmp 0x2ad65
movl $0x5, -0x3c(%rbp)
jmp 0x2ad65
movl $0x2, -0x3c(%rbp)
jmp 0x2ad65
movl $0x3, -0x3c(%rbp)
jmp 0x2ad65
movl $0x8, -0x3c(%rbp)
jmp 0x2ad65
movl $0x9, -0x3c(%rbp)
jmp 0x2ad65
movl $0x6, -0x3c(%rbp)
jmp 0x2ad65
movl $0x7, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
movl -0x14(%rbp), %ecx
andl $0x1100, %ecx           # imm = 0x1100
orl %ecx, %eax
movl %eax, -0x14(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x38(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x18(%rbp)
movl -0x38(%rbp), %eax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x30(%rbp)
cmpl $0x1, -0x3c(%rbp)
jg 0x2adaf
movl $0x200, -0x34(%rbp)     # imm = 0x200
jmp 0x2adc7
cmpl $0x5, -0x3c(%rbp)
jg 0x2adbe
movl $0x400, -0x34(%rbp)     # imm = 0x400
jmp 0x2adc5
movl $0x800, -0x34(%rbp)     # imm = 0x800
jmp 0x2adc7
movq -0x10(%rbp), %rax
movl $0x1, 0x84(%rax)
movq -0x10(%rbp), %rdi
movl -0x34(%rbp), %esi
orl $0x62, %esi
movl -0x14(%rbp), %eax
andl $0x100, %eax            # imm = 0x100
orl %eax, %esi
movl -0x18(%rbp), %r8d
movq -0x20(%rbp), %r9
movl -0x24(%rbp), %r10d
movq -0x30(%rbp), %rax
xorl %edx, %edx
xorl %ecx, %ecx
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x1f8d0
cmpl $0x0, %eax
je 0x2ae1a
movq $0x0, -0x8(%rbp)
jmp 0x2ae42
movq -0x10(%rbp), %rax
movl $0x1, 0x84(%rax)
movq -0x10(%rbp), %rdi
movl -0x3c(%rbp), %esi
movl -0x14(%rbp), %eax
andl $0x1000, %eax           # imm = 0x1000
orl %eax, %esi
callq 0x283d0
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)