// File: /workspace/github_c_makefile_star2_O0/mmcco[P]sljit/sljit_src/sljitNativeX86_common.c
// Function: sljit_emit_op2
int sljit_emit_op2(struct sljit_compiler *compiler, int op,
	int dst, long dstw,
	int src1, long src1w,
	int src2, long src2w)
{
	CHECK_ERROR();
	CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
	ADJUST_LOCAL_OFFSET(dst, dstw);
	ADJUST_LOCAL_OFFSET(src1, src1w);
	ADJUST_LOCAL_OFFSET(src2, src2w);

	CHECK_EXTRA_REGS(dst, dstw, (void)0);
	CHECK_EXTRA_REGS(src1, src1w, (void)0);
	CHECK_EXTRA_REGS(src2, src2w, (void)0);
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
	compiler->mode32 = op & SLJIT_INT_OP;
#endif

	if (GET_OPCODE(op) >= SLJIT_MUL) {
		if (GET_FLAGS(op))
			compiler->flags_saved = 0;
		else if (op & SLJIT_KEEP_FLAGS && !compiler->flags_saved)
			FAIL_IF(emit_save_flags(compiler));
	}

	switch (GET_OPCODE(op)) {
	case SLJIT_ADD:
		if (!GET_FLAGS(op)) {
			if (emit_lea_binary(compiler, op & SLJIT_KEEP_FLAGS, dst, dstw, src1, src1w, src2, src2w) != SLJIT_ERR_UNSUPPORTED)
				return compiler->error;
		}
		else
			compiler->flags_saved = 0;
		if (op & SLJIT_KEEP_FLAGS && !compiler->flags_saved)
			FAIL_IF(emit_save_flags(compiler));
		return emit_cum_binary(compiler, ADD_r_rm, ADD_rm_r, ADD, ADD_EAX_i32,
			dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_ADDC:
		if (compiler->flags_saved) /* C flag must be restored. */
			FAIL_IF(emit_restore_flags(compiler, 1));
		else if (op & SLJIT_KEEP_FLAGS)
			FAIL_IF(emit_save_flags(compiler));
		if (GET_FLAGS(op))
			compiler->flags_saved = 0;
		return emit_cum_binary(compiler, ADC_r_rm, ADC_rm_r, ADC, ADC_EAX_i32,
			dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_SUB:
		if (!GET_FLAGS(op)) {
			if ((src2 & SLJIT_IMM) && emit_lea_binary(compiler, op & SLJIT_KEEP_FLAGS, dst, dstw, src1, src1w, SLJIT_IMM, -src2w) != SLJIT_ERR_UNSUPPORTED)
				return compiler->error;
		}
		else
			compiler->flags_saved = 0;
		if (op & SLJIT_KEEP_FLAGS && !compiler->flags_saved)
			FAIL_IF(emit_save_flags(compiler));
		if (dst == SLJIT_UNUSED)
			return emit_cmp_binary(compiler, src1, src1w, src2, src2w);
		return emit_non_cum_binary(compiler, SUB_r_rm, SUB_rm_r, SUB, SUB_EAX_i32,
			dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_SUBC:
		if (compiler->flags_saved) /* C flag must be restored. */
			FAIL_IF(emit_restore_flags(compiler, 1));
		else if (op & SLJIT_KEEP_FLAGS)
			FAIL_IF(emit_save_flags(compiler));
		if (GET_FLAGS(op))
			compiler->flags_saved = 0;
		return emit_non_cum_binary(compiler, SBB_r_rm, SBB_rm_r, SBB, SBB_EAX_i32,
			dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_MUL:
		return emit_mul(compiler, dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_AND:
		if (dst == SLJIT_UNUSED)
			return emit_test_binary(compiler, src1, src1w, src2, src2w);
		return emit_cum_binary(compiler, AND_r_rm, AND_rm_r, AND, AND_EAX_i32,
			dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_OR:
		return emit_cum_binary(compiler, OR_r_rm, OR_rm_r, OR, OR_EAX_i32,
			dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_XOR:
		return emit_cum_binary(compiler, XOR_r_rm, XOR_rm_r, XOR, XOR_EAX_i32,
			dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_SHL:
		return emit_shift_with_flags(compiler, SHL, GET_FLAGS(op),
			dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_LSHR:
		return emit_shift_with_flags(compiler, SHR, GET_FLAGS(op),
			dst, dstw, src1, src1w, src2, src2w);
	case SLJIT_ASHR:
		return emit_shift_with_flags(compiler, SAR, GET_FLAGS(op),
			dst, dstw, src1, src1w, src2, src2w);
	}

	return SLJIT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x60, %rsp
movq 0x18(%rbp), %rax
movl 0x10(%rbp), %eax
movq %rdi, -0x20(%rbp)
movl %esi, -0x24(%rbp)
movl %edx, -0x28(%rbp)
movq %rcx, -0x30(%rbp)
movl %r8d, -0x34(%rbp)
movq %r9, -0x40(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x1f90f
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1f911
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
movq -0x30(%rbp), %rcx
movl -0x34(%rbp), %r8d
movq -0x40(%rbp), %r9
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x1fff0
cmpl $0x8d, -0x28(%rbp)
jne 0x1f952
movq -0x30(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x30(%rbp)
cmpl $0x8d, -0x34(%rbp)
jne 0x1f967
movq -0x40(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x40(%rbp)
cmpl $0x8d, 0x10(%rbp)
jne 0x1f97c
movq 0x18(%rbp), %rax
addq $0x8, %rax
movq %rax, 0x18(%rbp)
movl -0x24(%rbp), %ecx
andl $0x100, %ecx            # imm = 0x100
movq -0x20(%rbp), %rax
movl %ecx, 0x70(%rax)
movl -0x24(%rbp), %eax
andl $0xffff80ff, %eax       # imm = 0xFFFF80FF
cmpl $0x64, %eax
jl 0x1f9f0
movl -0x24(%rbp), %eax
andl $0x3e00, %eax           # imm = 0x3E00
cmpl $0x0, %eax
je 0x1f9b3
movq -0x20(%rbp), %rax
movl $0x0, 0x74(%rax)
jmp 0x1f9ee
movl -0x24(%rbp), %eax
andl $0x4000, %eax           # imm = 0x4000
cmpl $0x0, %eax
je 0x1f9ec
movq -0x20(%rbp), %rax
cmpl $0x0, 0x74(%rax)
jne 0x1f9ec
jmp 0x1f9cc
movq -0x20(%rbp), %rdi
callq 0x1f390
cmpl $0x0, %eax
je 0x1f9e8
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1f9ea
jmp 0x1f9ec
jmp 0x1f9ee
jmp 0x1f9f0
movl -0x24(%rbp), %eax
andl $0xffff80ff, %eax       # imm = 0xFFFF80FF
addl $-0x60, %eax
movl %eax, %ecx
movq %rcx, -0x48(%rbp)
subl $0xa, %eax
ja 0x1ffd2
movq -0x48(%rbp), %rax
leaq 0x10adf(%rip), %rcx     # 0x304f4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x24(%rbp), %eax
andl $0x3e00, %eax           # imm = 0x3E00
cmpl $0x0, %eax
jne 0x1fa72
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %esi
andl $0x4000, %esi           # imm = 0x4000
movl -0x28(%rbp), %edx
movq -0x30(%rbp), %rcx
movl -0x34(%rbp), %r8d
movq -0x40(%rbp), %r9
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x21180
cmpl $0x4, %eax
je 0x1fa70
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1fa7d
movq -0x20(%rbp), %rax
movl $0x0, 0x74(%rax)
movl -0x24(%rbp), %eax
andl $0x4000, %eax           # imm = 0x4000
cmpl $0x0, %eax
je 0x1fab6
movq -0x20(%rbp), %rax
cmpl $0x0, 0x74(%rax)
jne 0x1fab6
jmp 0x1fa96
movq -0x20(%rbp), %rdi
callq 0x1f390
cmpl $0x0, %eax
je 0x1fab2
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1fab4
jmp 0x1fab6
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %r9d
movq -0x30(%rbp), %r14
movl -0x34(%rbp), %ebx
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0x3, %esi
movl $0x1, %edx
xorl %ecx, %ecx
movl $0x5, %r8d
movq %r14, (%rsp)
movl %ebx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movl %r10d, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x213c0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rax
cmpl $0x0, 0x74(%rax)
je 0x1fb38
jmp 0x1fb13
movq -0x20(%rbp), %rdi
movl $0x1, %esi
callq 0x21db0
cmpl $0x0, %eax
je 0x1fb34
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1fb36
jmp 0x1fb69
movl -0x24(%rbp), %eax
andl $0x4000, %eax           # imm = 0x4000
cmpl $0x0, %eax
je 0x1fb67
jmp 0x1fb47
movq -0x20(%rbp), %rdi
callq 0x1f390
cmpl $0x0, %eax
je 0x1fb63
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1fb65
jmp 0x1fb67
jmp 0x1fb69
movl -0x24(%rbp), %eax
andl $0x3e00, %eax           # imm = 0x3E00
cmpl $0x0, %eax
je 0x1fb81
movq -0x20(%rbp), %rax
movl $0x0, 0x74(%rax)
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %r9d
movq -0x30(%rbp), %r14
movl -0x34(%rbp), %ebx
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0x13, %esi
movl $0x11, %edx
movl $0x10, %ecx
movl $0x15, %r8d
movq %r14, (%rsp)
movl %ebx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movl %r10d, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x213c0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movl -0x24(%rbp), %eax
andl $0x3e00, %eax           # imm = 0x3E00
cmpl $0x0, %eax
jne 0x1fc35
movl 0x10(%rbp), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0x1fc33
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %esi
andl $0x4000, %esi           # imm = 0x4000
movl -0x28(%rbp), %edx
movq -0x30(%rbp), %rcx
movl -0x34(%rbp), %r8d
movq -0x40(%rbp), %r9
xorl %eax, %eax
subq 0x18(%rbp), %rax
movl $0x40, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x21180
cmpl $0x4, %eax
je 0x1fc33
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1fc40
movq -0x20(%rbp), %rax
movl $0x0, 0x74(%rax)
movl -0x24(%rbp), %eax
andl $0x4000, %eax           # imm = 0x4000
cmpl $0x0, %eax
je 0x1fc79
movq -0x20(%rbp), %rax
cmpl $0x0, 0x74(%rax)
jne 0x1fc79
jmp 0x1fc59
movq -0x20(%rbp), %rdi
callq 0x1f390
cmpl $0x0, %eax
je 0x1fc75
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1fc77
jmp 0x1fc79
cmpl $0x0, -0x28(%rbp)
jne 0x1fc9e
movq -0x20(%rbp), %rdi
movl -0x34(%rbp), %esi
movq -0x40(%rbp), %rdx
movl 0x10(%rbp), %ecx
movq 0x18(%rbp), %r8
callq 0x21e90
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %r9d
movq -0x30(%rbp), %r14
movl -0x34(%rbp), %ebx
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0x2b, %esi
movl $0x29, %edx
movl $0x28, %ecx
movl $0x2d, %r8d
movq %r14, (%rsp)
movl %ebx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movl %r10d, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x22280
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rax
cmpl $0x0, 0x74(%rax)
je 0x1fd23
jmp 0x1fcfe
movq -0x20(%rbp), %rdi
movl $0x1, %esi
callq 0x21db0
cmpl $0x0, %eax
je 0x1fd1f
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1fd21
jmp 0x1fd54
movl -0x24(%rbp), %eax
andl $0x4000, %eax           # imm = 0x4000
cmpl $0x0, %eax
je 0x1fd52
jmp 0x1fd32
movq -0x20(%rbp), %rdi
callq 0x1f390
cmpl $0x0, %eax
je 0x1fd4e
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
jmp 0x1fd50
jmp 0x1fd52
jmp 0x1fd54
movl -0x24(%rbp), %eax
andl $0x3e00, %eax           # imm = 0x3E00
cmpl $0x0, %eax
je 0x1fd6c
movq -0x20(%rbp), %rax
movl $0x0, 0x74(%rax)
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %r9d
movq -0x30(%rbp), %r14
movl -0x34(%rbp), %ebx
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0x1b, %esi
movl $0x19, %edx
movl $0x18, %ecx
movl $0x1d, %r8d
movq %r14, (%rsp)
movl %ebx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movl %r10d, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x22280
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %esi
movq -0x30(%rbp), %rdx
movl -0x34(%rbp), %ecx
movq -0x40(%rbp), %r8
movl 0x10(%rbp), %r9d
movq 0x18(%rbp), %rax
movq %rax, (%rsp)
callq 0x229e0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
cmpl $0x0, -0x28(%rbp)
jne 0x1fe10
movq -0x20(%rbp), %rdi
movl -0x34(%rbp), %esi
movq -0x40(%rbp), %rdx
movl 0x10(%rbp), %ecx
movq 0x18(%rbp), %r8
callq 0x230b0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %r9d
movq -0x30(%rbp), %r14
movl -0x34(%rbp), %ebx
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0x23, %esi
movl $0x21, %edx
movl $0x20, %ecx
movl $0x25, %r8d
movq %r14, (%rsp)
movl %ebx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movl %r10d, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x213c0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %r9d
movq -0x30(%rbp), %r14
movl -0x34(%rbp), %ebx
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0xb, %esi
movl $0x9, %edx
movl $0x8, %ecx
movl $0xd, %r8d
movq %r14, (%rsp)
movl %ebx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movl %r10d, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x213c0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %r9d
movq -0x30(%rbp), %r14
movl -0x34(%rbp), %ebx
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0x33, %esi
movl $0x31, %edx
movl $0x30, %ecx
movl $0x35, %r8d
movq %r14, (%rsp)
movl %ebx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movl %r10d, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x213c0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %edx
andl $0x3e00, %edx           # imm = 0x3E00
movl -0x28(%rbp), %ecx
movq -0x30(%rbp), %r8
movl -0x34(%rbp), %r9d
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0x20, %esi
movq %r11, (%rsp)
movl %r10d, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x235c0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %edx
andl $0x3e00, %edx           # imm = 0x3E00
movl -0x28(%rbp), %ecx
movq -0x30(%rbp), %r8
movl -0x34(%rbp), %r9d
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0x28, %esi
movq %r11, (%rsp)
movl %r10d, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x235c0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movq -0x20(%rbp), %rdi
movl -0x24(%rbp), %edx
andl $0x3e00, %edx           # imm = 0x3E00
movl -0x28(%rbp), %ecx
movq -0x30(%rbp), %r8
movl -0x34(%rbp), %r9d
movq -0x40(%rbp), %r11
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl $0x38, %esi
movq %r11, (%rsp)
movl %r10d, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x235c0
movl %eax, -0x14(%rbp)
jmp 0x1ffd9
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
addq $0x60, %rsp
popq %rbx
popq %r14
popq %rbp
retq
nopw %cs:(%rax,%rax)