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

	CHECK_ERROR();
	CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
	ADJUST_LOCAL_OFFSET(dst, dstw);
	ADJUST_LOCAL_OFFSET(src1, src1w);
	ADJUST_LOCAL_OFFSET(src2, src2w);

#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
	compiler->mode32 = 1;
#endif

	if (FAST_IS_REG(dst)) {
		dst_r = dst;
		if (dst == src1)
			; /* Do nothing here. */
		else if (dst == src2 && (op == SLJIT_DADD || op == SLJIT_DMUL)) {
			/* Swap arguments. */
			src2 = src1;
			src2w = src1w;
		}
		else if (dst != src2)
			FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, dst_r, src1, src1w));
		else {
			dst_r = TMP_FREG;
			FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, TMP_FREG, src1, src1w));
		}
	}
	else {
		dst_r = TMP_FREG;
		FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, TMP_FREG, src1, src1w));
	}

	switch (GET_OPCODE(op)) {
	case SLJIT_DADD:
		FAIL_IF(emit_sse2(compiler, ADDSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
		break;

	case SLJIT_DSUB:
		FAIL_IF(emit_sse2(compiler, SUBSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
		break;

	case SLJIT_DMUL:
		FAIL_IF(emit_sse2(compiler, MULSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
		break;

	case SLJIT_DDIV:
		FAIL_IF(emit_sse2(compiler, DIVSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
		break;
	}

	if (dst_r == TMP_FREG)
		return emit_sse2_store(compiler, op & SLJIT_SINGLE_OP, dst, dstw, TMP_FREG);
	return SLJIT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq 0x18(%rbp), %rax
movl 0x10(%rbp), %eax
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 0x26fec
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x272a7
jmp 0x26fee
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movq -0x20(%rbp), %rcx
movl -0x24(%rbp), %r8d
movq -0x30(%rbp), %r9
movl 0x10(%rbp), %r10d
movq 0x18(%rbp), %rax
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x272b0
cmpl $0x8d, -0x18(%rbp)
jne 0x2702f
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x20(%rbp)
cmpl $0x8d, -0x24(%rbp)
jne 0x27044
movq -0x30(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x30(%rbp)
cmpl $0x8d, 0x10(%rbp)
jne 0x27059
movq 0x18(%rbp), %rax
addq $0x8, %rax
movq %rax, 0x18(%rbp)
movq -0x10(%rbp), %rax
movl $0x1, 0x70(%rax)
cmpl $0x3f, -0x18(%rbp)
jg 0x27127
movl -0x18(%rbp), %eax
movl %eax, -0x34(%rbp)
movl -0x18(%rbp), %eax
cmpl -0x24(%rbp), %eax
jne 0x27081
jmp 0x27125
movl -0x18(%rbp), %eax
cmpl 0x10(%rbp), %eax
jne 0x270ab
cmpl $0xa0, -0x14(%rbp)
je 0x2709b
cmpl $0xa2, -0x14(%rbp)
jne 0x270ab
movl -0x24(%rbp), %eax
movl %eax, 0x10(%rbp)
movq -0x30(%rbp), %rax
movq %rax, 0x18(%rbp)
jmp 0x27123
movl -0x18(%rbp), %eax
cmpl 0x10(%rbp), %eax
je 0x270e8
jmp 0x270b5
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
andl $0x100, %esi            # imm = 0x100
movl -0x34(%rbp), %edx
movl -0x24(%rbp), %ecx
movq -0x30(%rbp), %r8
callq 0x26e90
cmpl $0x0, %eax
je 0x270e4
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x272a7
jmp 0x270e6
jmp 0x27121
movl $0x0, -0x34(%rbp)
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
andl $0x100, %esi            # imm = 0x100
movl -0x24(%rbp), %ecx
movq -0x30(%rbp), %r8
xorl %edx, %edx
callq 0x26e90
cmpl $0x0, %eax
je 0x2711d
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x272a7
jmp 0x2711f
jmp 0x27121
jmp 0x27123
jmp 0x27125
jmp 0x27160
movl $0x0, -0x34(%rbp)
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
andl $0x100, %esi            # imm = 0x100
movl -0x24(%rbp), %ecx
movq -0x30(%rbp), %r8
xorl %edx, %edx
callq 0x26e90
cmpl $0x0, %eax
je 0x2715c
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x272a7
jmp 0x2715e
jmp 0x27160
movl -0x14(%rbp), %eax
andl $0xffff80ff, %eax       # imm = 0xFFFF80FF
addl $0xffffff60, %eax       # imm = 0xFFFFFF60
movl %eax, %ecx
movq %rcx, -0x40(%rbp)
subl $0x3, %eax
ja 0x27279
movq -0x40(%rbp), %rax
leaq 0x9545(%rip), %rcx      # 0x306cc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x27192
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %edx
andl $0x100, %edx            # imm = 0x100
movl -0x34(%rbp), %ecx
movl 0x10(%rbp), %r8d
movq 0x18(%rbp), %r9
movl $0x58, %esi
callq 0x28180
cmpl $0x0, %eax
je 0x271c7
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x272a7
jmp 0x271c9
jmp 0x27279
jmp 0x271d0
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %edx
andl $0x100, %edx            # imm = 0x100
movl -0x34(%rbp), %ecx
movl 0x10(%rbp), %r8d
movq 0x18(%rbp), %r9
movl $0x5c, %esi
callq 0x28180
cmpl $0x0, %eax
je 0x27205
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x272a7
jmp 0x27207
jmp 0x27279
jmp 0x2720b
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %edx
andl $0x100, %edx            # imm = 0x100
movl -0x34(%rbp), %ecx
movl 0x10(%rbp), %r8d
movq 0x18(%rbp), %r9
movl $0x59, %esi
callq 0x28180
cmpl $0x0, %eax
je 0x2723d
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x272a7
jmp 0x2723f
jmp 0x27279
jmp 0x27243
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %edx
andl $0x100, %edx            # imm = 0x100
movl -0x34(%rbp), %ecx
movl 0x10(%rbp), %r8d
movq 0x18(%rbp), %r9
movl $0x5e, %esi
callq 0x28180
cmpl $0x0, %eax
je 0x27275
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0x272a7
jmp 0x27277
jmp 0x27279
cmpl $0x0, -0x34(%rbp)
jne 0x272a0
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
andl $0x100, %esi            # imm = 0x100
movl -0x18(%rbp), %edx
movq -0x20(%rbp), %rcx
xorl %r8d, %r8d
callq 0x26ed0
movl %eax, -0x4(%rbp)
jmp 0x272a7
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq