// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_IMUL_Gv_Ev_Iz
void ins_enc_IMUL_Gv_Ev_Iz(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(3);

	ParserASTNode *ins_node = data->ins_node;

	ParserASTNode *target = ins_node->childs[0];

	ParserASTNode *source1 = ins_node->childs[1];

	ParserASTNode *source2 = ins_node->childs[2];

	EncoderInstruction enc_ins;

	ins_init(data->ctx, ins, ins_node, &enc_ins);

	ins_fill_GX(data->ctx, ins, target, &enc_ins);

	ins_fill_EX(data->ctx, ins, source1, &enc_ins);

	ins_check_operand_type(data->ctx, ins, target, source1, NULL);

	switch (ins_get_oprd_size(data->ctx, target)) {
		case 2: {
			ins_fill_imm16(data->ctx, ins, source2, &enc_ins);
			break;
		}
		case 4:
		case 8: {
			ins_fill_imm32(data->ctx, ins, source2, &enc_ins);
			break;
		}
		default: {
			assert(0);
			break;
		}
	}

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x2300c
jmp 0x2302b
leaq 0x26af3(%rip), %rdi     # 0x49b06
leaq 0x28006(%rip), %rsi     # 0x4b020
movl $0x6b7, %edx            # imm = 0x6B7
leaq 0x28bce(%rip), %rcx     # 0x4bbf4
callq 0xa0b0
cmpq $0x0, -0x10(%rbp)
je 0x23034
jmp 0x23053
leaq 0x2cfb4(%rip), %rdi     # 0x4ffef
leaq 0x27fde(%rip), %rsi     # 0x4b020
movl $0x6b7, %edx            # imm = 0x6B7
leaq 0x28ba6(%rip), %rcx     # 0x4bbf4
callq 0xa0b0
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x2305f
jmp 0x2307e
leaq 0x28017(%rip), %rdi     # 0x4b07d
leaq 0x27fb3(%rip), %rsi     # 0x4b020
movl $0x6b7, %edx            # imm = 0x6B7
leaq 0x28b7b(%rip), %rcx     # 0x4bbf4
callq 0xa0b0
movq -0x10(%rbp), %rax
movq (%rax), %rax
cmpl $0x3, 0x44(%rax)
jne 0x2308d
jmp 0x230ac
leaq 0x28ba4(%rip), %rdi     # 0x4bc38
leaq 0x27f85(%rip), %rsi     # 0x4b020
movl $0x6b7, %edx            # imm = 0x6B7
leaq 0x28b4d(%rip), %rcx     # 0x4bbf4
callq 0xa0b0
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x18(%rbp), %rdx
leaq -0x90(%rbp), %rcx
movq %rcx, -0xa0(%rbp)
callq 0x1a9e0
movq -0xa0(%rbp), %rcx
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x1ab40
movq -0xa0(%rbp), %rcx
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x1ad40
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
xorl %eax, %eax
movl %eax, %r8d
callq 0x1c600
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x20(%rbp), %rsi
callq 0x1c580
movq %rax, %rcx
movq %rcx, -0x98(%rbp)
subq $0x2, %rax
je 0x231a0
jmp 0x23182
movq -0x98(%rbp), %rax
subq $0x4, %rax
je 0x231be
jmp 0x23191
movq -0x98(%rbp), %rax
subq $0x8, %rax
je 0x231be
jmp 0x231dc
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq -0x90(%rbp), %rcx
callq 0x1b950
jmp 0x231fb
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq -0x90(%rbp), %rcx
callq 0x1baa0
jmp 0x231fb
leaq 0x24282(%rip), %rdi     # 0x47465
leaq 0x27e36(%rip), %rsi     # 0x4b020
movl $0x6d6, %edx            # imm = 0x6D6
leaq 0x289fe(%rip), %rcx     # 0x4bbf4
callq 0xa0b0
movq -0x10(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x1e570
addq $0xa0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)