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

	ParserASTNode *ins_node = data->ins_node;

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

	ParserASTNode *source = data->ins_node->childs[1];

	EncoderInstruction enc_ins;

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

	int arch = ASM_PARSER_CONTEXT_DATA_GET_ARCH(data->ctx);

	enc_ins.mod_rm_used = true;
	enc_ins.mod_rm.reg = ins->opcode_ext.reg;

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

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

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x201ac
jmp 0x201cb
leaq 0x29953(%rip), %rdi     # 0x49b06
leaq 0x2ae66(%rip), %rsi     # 0x4b020
movl $0x296, %edx            # imm = 0x296
leaq 0x2b364(%rip), %rcx     # 0x4b52a
callq 0xa0b0
cmpq $0x0, -0x10(%rbp)
je 0x201d4
jmp 0x201f3
leaq 0x2fe14(%rip), %rdi     # 0x4ffef
leaq 0x2ae3e(%rip), %rsi     # 0x4b020
movl $0x296, %edx            # imm = 0x296
leaq 0x2b33c(%rip), %rcx     # 0x4b52a
callq 0xa0b0
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x201ff
jmp 0x2021e
leaq 0x2ae77(%rip), %rdi     # 0x4b07d
leaq 0x2ae13(%rip), %rsi     # 0x4b020
movl $0x296, %edx            # imm = 0x296
leaq 0x2b311(%rip), %rcx     # 0x4b52a
callq 0xa0b0
movq -0x10(%rbp), %rax
movq (%rax), %rax
cmpl $0x2, 0x44(%rax)
jne 0x2022d
jmp 0x2024c
leaq 0x2ae58(%rip), %rdi     # 0x4b08c
leaq 0x2ade5(%rip), %rsi     # 0x4b020
movl $0x296, %edx            # imm = 0x296
leaq 0x2b2e3(%rip), %rcx     # 0x4b52a
callq 0xa0b0
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x18(%rbp), %rdx
leaq -0x88(%rbp), %rcx
movq %rcx, -0xa8(%rbp)
callq 0x1a9e0
movq -0xa8(%rbp), %rcx
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movl 0xb0(%rax), %eax
movl %eax, -0x8c(%rbp)
movb $0x1, -0x72(%rbp)
movq -0x8(%rbp), %rax
movb 0x22(%rax), %al
shrb $0x2, %al
andb $0x7, %al
movb %al, -0x70(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x1ad40
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x20(%rbp), %rsi
callq 0x1c580
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0xa0(%rbp)
subq $0x2, %rax
je 0x2032e
jmp 0x20310
movq -0xa0(%rbp), %rax
subq $0x4, %rax
je 0x2034c
jmp 0x2031f
movq -0xa0(%rbp), %rax
subq $0x8, %rax
je 0x2034c
jmp 0x2036a
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq -0x88(%rbp), %rcx
callq 0x1b950
jmp 0x20389
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq -0x88(%rbp), %rcx
callq 0x1baa0
jmp 0x20389
leaq 0x270f4(%rip), %rdi     # 0x47465
leaq 0x2aca8(%rip), %rsi     # 0x4b020
movl $0x2b5, %edx            # imm = 0x2B5
leaq 0x2b1a6(%rip), %rcx     # 0x4b52a
callq 0xa0b0
movq -0x10(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1e570
addq $0xb0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)