LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_directive_enc.c
// Function: ins_enc_int8s
void ins_enc_int8s(
	Instruction *ins,
	InstructionEncoderData *data
) {
	assert(ins);
	assert(data);
	assert(data->ins_node->nchilds == 2);

	ParserASTNode *node_count = data->ins_node->childs[0];
	assert(node_count->type == ASM_NODE_EXPR);

	AsmExprEvalResult *result_count = &ASM_EXPR_AST_NODE_GET_RESULT(node_count);
	assert(result_count->type == ASM_EXPR_EVAL_RESULT_TYPE_UINT64);

	ASM_PARSER_CONTEXT_DATA_INC_ADDRESS_COUNTER(data->ctx, result_count->value.u64 * 1);
	if (ASM_PARSER_CONTEXT_DATA_GET_STEP(data->ctx) == ASM_STEP_SCAN) {
		return;
	}

	ParserASTNode *node_val = data->ins_node->childs[1];
	assert(node_val->type == ASM_NODE_EXPR);

	AsmExprEvalResult *result_val = &ASM_EXPR_AST_NODE_GET_RESULT(node_val);
	assert(result_val->type == ASM_EXPR_EVAL_RESULT_TYPE_UINT64);

	for (uint64_t i = 0; i < result_count->value.u64; i++) {
		fwrite(&result_val->value.u64, 1, 1, ASM_PARSER_CONTEXT_DATA_GET_OUT(data->ctx));
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
testq %rdi, %rdi
je 0x170da
movq %rsi, %rbx
testq %rsi, %rsi
je 0x170f9
movq (%rbx), %rax
cmpl $0x2, 0x44(%rax)
jne 0x17118
movq 0x48(%rax), %rax
movq (%rax), %r14
cmpl $0xe00, (%r14)          # imm = 0xE00
jne 0x17137
cmpb $0x1, 0x60(%r14)
jne 0x17156
movq 0x68(%r14), %rcx
movq 0x8(%rbx), %rdx
addq %rcx, 0xc0(%rdx)
cmpl $0x1, 0xc8(%rdx)
je 0x170d1
movq 0x8(%rax), %r15
cmpl $0xe00, (%r15)          # imm = 0xE00
jne 0x17175
cmpb $0x1, 0x60(%r15)
jne 0x17194
cmpq $0x0, 0x68(%r14)
je 0x170d1
xorl %r12d, %r12d
movq 0x8(%rbx), %rax
movq 0xb8(%rax), %rsi
movsbl 0x68(%r15), %edi
callq 0xa0d0
incq %r12
cmpq 0x68(%r14), %r12
jb 0x170b3
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x19649(%rip), %rdi     # 0x3072a
leaq 0x1a492(%rip), %rsi     # 0x3157a
leaq 0x1a78a(%rip), %rcx     # 0x31879
movl $0xc7, %edx
callq 0xa0b0
leaq 0x1f45b(%rip), %rdi     # 0x3655b
leaq 0x1a473(%rip), %rsi     # 0x3157a
leaq 0x1a76b(%rip), %rcx     # 0x31879
movl $0xc8, %edx
callq 0xa0b0
leaq 0x1a796(%rip), %rdi     # 0x318b5
leaq 0x1a454(%rip), %rsi     # 0x3157a
leaq 0x1a74c(%rip), %rcx     # 0x31879
movl $0xc9, %edx
callq 0xa0b0
leaq 0x1a794(%rip), %rdi     # 0x318d2
leaq 0x1a435(%rip), %rsi     # 0x3157a
leaq 0x1a72d(%rip), %rcx     # 0x31879
movl $0xcc, %edx
callq 0xa0b0
leaq 0x1a797(%rip), %rdi     # 0x318f4
leaq 0x1a416(%rip), %rsi     # 0x3157a
leaq 0x1a70e(%rip), %rcx     # 0x31879
movl $0xcf, %edx
callq 0xa0b0
leaq 0x1a7af(%rip), %rdi     # 0x3192b
leaq 0x1a3f7(%rip), %rsi     # 0x3157a
leaq 0x1a6ef(%rip), %rcx     # 0x31879
movl $0xd7, %edx
callq 0xa0b0
leaq 0x1a7b0(%rip), %rdi     # 0x3194b
leaq 0x1a3d8(%rip), %rsi     # 0x3157a
leaq 0x1a6d0(%rip), %rcx     # 0x31879
movl $0xda, %edx
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_directive_enc.c
// Function: ins_enc_int64s
void ins_enc_int64s(
	Instruction *ins,
	InstructionEncoderData *data
) {
	assert(ins);
	assert(data);
	assert(data->ins_node->nchilds == 2);

	ParserASTNode *node_count = data->ins_node->childs[0];
	assert(node_count->type == ASM_NODE_EXPR);

	AsmExprEvalResult *result_count = &ASM_EXPR_AST_NODE_GET_RESULT(node_count);
	assert(result_count->type == ASM_EXPR_EVAL_RESULT_TYPE_UINT64);

	ASM_PARSER_CONTEXT_DATA_INC_ADDRESS_COUNTER(data->ctx, result_count->value.u64 * 8);
	if (ASM_PARSER_CONTEXT_DATA_GET_STEP(data->ctx) == ASM_STEP_SCAN) {
		return;
	}

	ParserASTNode *node_val = data->ins_node->childs[1];
	assert(node_val->type == ASM_NODE_EXPR);

	AsmExprEvalResult *result_val = &ASM_EXPR_AST_NODE_GET_RESULT(node_val);
	assert(result_val->type == ASM_EXPR_EVAL_RESULT_TYPE_UINT64);

	for (uint64_t i = 0; i < result_count->value.u64; i++) {
		fwrite(&result_val->value.u64, 8, 1, ASM_PARSER_CONTEXT_DATA_GET_OUT(data->ctx));
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
testq %rdi, %rdi
je 0x175a7
movq %rsi, %rbx
testq %rsi, %rsi
je 0x175c6
movq (%rbx), %rax
cmpl $0x2, 0x44(%rax)
jne 0x175e5
movq 0x48(%rax), %rax
movq (%rax), %r15
cmpl $0xe00, (%r15)          # imm = 0xE00
jne 0x17604
cmpb $0x1, 0x60(%r15)
jne 0x17623
movq 0x68(%r15), %rcx
shlq $0x3, %rcx
movq 0x8(%rbx), %rdx
addq %rcx, 0xc0(%rdx)
cmpl $0x1, 0xc8(%rdx)
je 0x1759e
movq 0x8(%rax), %r14
cmpl $0xe00, (%r14)          # imm = 0xE00
jne 0x17642
cmpb $0x1, 0x60(%r14)
jne 0x17661
cmpq $0x0, 0x68(%r15)
je 0x1759e
addq $0x68, %r14
xorl %r12d, %r12d
movq 0x8(%rbx), %rax
movq 0xb8(%rax), %rcx
movl $0x8, %esi
movl $0x1, %edx
movq %r14, %rdi
callq 0xa180
incq %r12
cmpq 0x68(%r15), %r12
jb 0x17578
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1917c(%rip), %rdi     # 0x3072a
leaq 0x19fc5(%rip), %rsi     # 0x3157a
leaq 0x1a43e(%rip), %rcx     # 0x319fa
movl $0x121, %edx            # imm = 0x121
callq 0xa0b0
leaq 0x1ef8e(%rip), %rdi     # 0x3655b
leaq 0x19fa6(%rip), %rsi     # 0x3157a
leaq 0x1a41f(%rip), %rcx     # 0x319fa
movl $0x122, %edx            # imm = 0x122
callq 0xa0b0
leaq 0x1a2c9(%rip), %rdi     # 0x318b5
leaq 0x19f87(%rip), %rsi     # 0x3157a
leaq 0x1a400(%rip), %rcx     # 0x319fa
movl $0x123, %edx            # imm = 0x123
callq 0xa0b0
leaq 0x1a2c7(%rip), %rdi     # 0x318d2
leaq 0x19f68(%rip), %rsi     # 0x3157a
leaq 0x1a3e1(%rip), %rcx     # 0x319fa
movl $0x126, %edx            # imm = 0x126
callq 0xa0b0
leaq 0x1a2ca(%rip), %rdi     # 0x318f4
leaq 0x19f49(%rip), %rsi     # 0x3157a
leaq 0x1a3c2(%rip), %rcx     # 0x319fa
movl $0x129, %edx            # imm = 0x129
callq 0xa0b0
leaq 0x1a2e2(%rip), %rdi     # 0x3192b
leaq 0x19f2a(%rip), %rsi     # 0x3157a
leaq 0x1a3a3(%rip), %rcx     # 0x319fa
movl $0x131, %edx            # imm = 0x131
callq 0xa0b0
leaq 0x1a2e3(%rip), %rdi     # 0x3194b
leaq 0x19f0b(%rip), %rsi     # 0x3157a
leaq 0x1a384(%rip), %rcx     # 0x319fa
movl $0x134, %edx            # imm = 0x134
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_directive_enc.c
// Function: ins_enc_strings
void ins_enc_strings(
	Instruction *ins,
	InstructionEncoderData *data
) {
	assert(ins);
	assert(data);
	assert(data->ins_node->nchilds == 2);

	ParserASTNode *node_count = data->ins_node->childs[0];
	assert(node_count->type == ASM_NODE_EXPR);

	AsmExprEvalResult *result_count = &ASM_EXPR_AST_NODE_GET_RESULT(node_count);
	assert(result_count->type == ASM_EXPR_EVAL_RESULT_TYPE_UINT64);

	ParserASTNode *node_val = data->ins_node->childs[1];
	assert(node_val->type == ASM_NODE_EXPR);

	AsmExprEvalResult *result_val = &ASM_EXPR_AST_NODE_GET_RESULT(node_val);
	assert(result_val->type == ASM_EXPR_EVAL_RESULT_TYPE_STRING);

	ASM_PARSER_CONTEXT_DATA_INC_ADDRESS_COUNTER(data->ctx, result_count->value.u64 * result_val->value.str.len);
	if (ASM_PARSER_CONTEXT_DATA_GET_STEP(data->ctx) == ASM_STEP_SCAN) {
		return;
	}

	for (uint64_t i = 0; i < result_count->value.u64; i++) {
		fwrite(
			result_val->value.str.ptr,
			result_val->value.str.len,
			1,
			ASM_PARSER_CONTEXT_DATA_GET_OUT(data->ctx)
		);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
testq %rdi, %rdi
je 0x17a82
movq %rsi, %rbx
testq %rsi, %rsi
je 0x17aa1
movq (%rbx), %rax
cmpl $0x2, 0x44(%rax)
jne 0x17ac0
movq 0x48(%rax), %rax
movq (%rax), %r14
cmpl $0xe00, (%r14)          # imm = 0xE00
jne 0x17adf
cmpb $0x1, 0x60(%r14)
jne 0x17afe
movq 0x8(%rax), %r15
cmpl $0xe00, (%r15)          # imm = 0xE00
jne 0x17b1d
cmpb $0x3, 0x60(%r15)
jne 0x17b3c
movq 0x70(%r15), %rax
imulq 0x68(%r14), %rax
movq 0x8(%rbx), %rcx
addq %rax, 0xc0(%rcx)
cmpl $0x1, 0xc8(%rcx)
je 0x17a79
cmpq $0x0, 0x68(%r14)
je 0x17a79
xorl %r12d, %r12d
movq 0x68(%r15), %rdi
movq 0x70(%r15), %rsi
movq 0x8(%rbx), %rax
movq 0xb8(%rax), %rcx
movl $0x1, %edx
callq 0xa180
incq %r12
cmpq 0x68(%r14), %r12
jb 0x17a53
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x18ca1(%rip), %rdi     # 0x3072a
leaq 0x19aea(%rip), %rsi     # 0x3157a
leaq 0x1a050(%rip), %rcx     # 0x31ae7
movl $0x17d, %edx            # imm = 0x17D
callq 0xa0b0
leaq 0x1eab3(%rip), %rdi     # 0x3655b
leaq 0x19acb(%rip), %rsi     # 0x3157a
leaq 0x1a031(%rip), %rcx     # 0x31ae7
movl $0x17e, %edx            # imm = 0x17E
callq 0xa0b0
leaq 0x19dee(%rip), %rdi     # 0x318b5
leaq 0x19aac(%rip), %rsi     # 0x3157a
leaq 0x1a012(%rip), %rcx     # 0x31ae7
movl $0x17f, %edx            # imm = 0x17F
callq 0xa0b0
leaq 0x19dec(%rip), %rdi     # 0x318d2
leaq 0x19a8d(%rip), %rsi     # 0x3157a
leaq 0x19ff3(%rip), %rcx     # 0x31ae7
movl $0x182, %edx            # imm = 0x182
callq 0xa0b0
leaq 0x19def(%rip), %rdi     # 0x318f4
leaq 0x19a6e(%rip), %rsi     # 0x3157a
leaq 0x19fd4(%rip), %rcx     # 0x31ae7
movl $0x185, %edx            # imm = 0x185
callq 0xa0b0
leaq 0x19e07(%rip), %rdi     # 0x3192b
leaq 0x19a4f(%rip), %rsi     # 0x3157a
leaq 0x19fb5(%rip), %rcx     # 0x31ae7
movl $0x188, %edx            # imm = 0x188
callq 0xa0b0
leaq 0x19fe2(%rip), %rdi     # 0x31b25
leaq 0x19a30(%rip), %rsi     # 0x3157a
leaq 0x19f96(%rip), %rcx     # 0x31ae7
movl $0x18b, %edx            # imm = 0x18B
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_directive_enc.c
// Function: ins_enc_label
void ins_enc_label(
	Instruction *ins,
	InstructionEncoderData *data
) {
	assert(ins);
	assert(data);
	assert(data->ins_node->nchilds == 1);

	if (ASM_PARSER_CONTEXT_DATA_GET_STEP(data->ctx) == ASM_STEP_SCAN) {
		ParserASTNode *node_id = data->ins_node->childs[0];
		assert(node_id->type == ASM_NODE_IDENTIFIER);

		asm_parser_set_symbol_by_token_key(
			data->ctx, node_id->token, ASM_PARSER_CONTEXT_DATA_GET_ADDRESS_COUNTER(data->ctx)
		);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
testq %rdi, %rdi
je 0x17ba1
testq %rsi, %rsi
je 0x17bc0
movq (%rsi), %rax
cmpl $0x1, 0x44(%rax)
jne 0x17bdf
movq 0x8(%rsi), %rdi
cmpl $0x1, 0xc8(%rdi)
jne 0x17b9f
movq 0x48(%rax), %rax
movq (%rax), %rax
cmpl $0x200, (%rax)          # imm = 0x200
jne 0x17bfe
movq 0x10(%rax), %rsi
movq 0xc0(%rdi), %rdx
popq %rbp
jmp 0x206ee
popq %rbp
retq
leaq 0x18b82(%rip), %rdi     # 0x3072a
leaq 0x199cb(%rip), %rsi     # 0x3157a
leaq 0x19fa4(%rip), %rcx     # 0x31b5a
movl $0x1aa, %edx            # imm = 0x1AA
callq 0xa0b0
leaq 0x1e994(%rip), %rdi     # 0x3655b
leaq 0x199ac(%rip), %rsi     # 0x3157a
leaq 0x19f85(%rip), %rcx     # 0x31b5a
movl $0x1ab, %edx            # imm = 0x1AB
callq 0xa0b0
leaq 0x19aaa(%rip), %rdi     # 0x31690
leaq 0x1998d(%rip), %rsi     # 0x3157a
leaq 0x19f66(%rip), %rcx     # 0x31b5a
movl $0x1ac, %edx            # imm = 0x1AC
callq 0xa0b0
leaq 0x19f91(%rip), %rdi     # 0x31b96
leaq 0x1996e(%rip), %rsi     # 0x3157a
leaq 0x19f47(%rip), %rcx     # 0x31b5a
movl $0x1b0, %edx            # imm = 0x1B0
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_directive_enc.c
// Function: ins_enc_set
void ins_enc_set(
	Instruction *ins,
	InstructionEncoderData *data
) {
	assert(ins);
	assert(data);
	assert(data->ins_node->nchilds == 2);

	if (ASM_PARSER_CONTEXT_DATA_GET_STEP(data->ctx) == ASM_STEP_SCAN) {
		return;
	}

	ParserASTNode *node_id = data->ins_node->childs[0];
	assert(node_id->type == ASM_NODE_IDENTIFIER);

	ParserASTNode *node_val = data->ins_node->childs[1];
	assert(node_val->type == ASM_NODE_EXPR);

	AsmExprEvalResult *result = &ASM_EXPR_AST_NODE_GET_RESULT(node_val);
	assert(result->type == ASM_EXPR_EVAL_RESULT_TYPE_UINT64);

	asm_parser_set_symbol_by_token_key(
		data->ctx, node_id->token, result->value.u64
	);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
testq %rdi, %rdi
je 0x17c82
testq %rsi, %rsi
je 0x17ca1
movq (%rsi), %rax
cmpl $0x2, 0x44(%rax)
jne 0x17cc0
movq 0x8(%rsi), %rdi
cmpl $0x1, 0xc8(%rdi)
jne 0x17c47
popq %rbp
retq
movq 0x48(%rax), %rcx
movq (%rcx), %rax
cmpl $0x200, (%rax)          # imm = 0x200
jne 0x17cdf
movq 0x8(%rcx), %rcx
cmpl $0xe00, (%rcx)          # imm = 0xE00
jne 0x17cfe
cmpb $0x1, 0x60(%rcx)
jne 0x17d1d
movq 0x10(%rax), %rsi
movq 0x68(%rcx), %rdx
popq %rbp
jmp 0x206ee
leaq 0x18aa1(%rip), %rdi     # 0x3072a
leaq 0x198ea(%rip), %rsi     # 0x3157a
leaq 0x19f24(%rip), %rcx     # 0x31bbb
movl $0x1bc, %edx            # imm = 0x1BC
callq 0xa0b0
leaq 0x1e8b3(%rip), %rdi     # 0x3655b
leaq 0x198cb(%rip), %rsi     # 0x3157a
leaq 0x19f05(%rip), %rcx     # 0x31bbb
movl $0x1bd, %edx            # imm = 0x1BD
callq 0xa0b0
leaq 0x19bee(%rip), %rdi     # 0x318b5
leaq 0x198ac(%rip), %rsi     # 0x3157a
leaq 0x19ee6(%rip), %rcx     # 0x31bbb
movl $0x1be, %edx            # imm = 0x1BE
callq 0xa0b0
leaq 0x19eb0(%rip), %rdi     # 0x31b96
leaq 0x1988d(%rip), %rsi     # 0x3157a
leaq 0x19ec7(%rip), %rcx     # 0x31bbb
movl $0x1c5, %edx            # imm = 0x1C5
callq 0xa0b0
leaq 0x19c26(%rip), %rdi     # 0x3192b
leaq 0x1986e(%rip), %rsi     # 0x3157a
leaq 0x19ea8(%rip), %rcx     # 0x31bbb
movl $0x1c8, %edx            # imm = 0x1C8
callq 0xa0b0
leaq 0x18531(%rip), %rdi     # 0x30255
leaq 0x1984f(%rip), %rsi     # 0x3157a
leaq 0x19e89(%rip), %rcx     # 0x31bbb
movl $0x1cb, %edx            # imm = 0x1CB
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_directive_enc.c
// Function: ins_enc_print
void ins_enc_print(
	Instruction *ins,
	InstructionEncoderData *data
) {
	assert(ins);
	assert(data);
	assert(data->ins_node->nchilds == 1);

	if (ASM_PARSER_CONTEXT_DATA_GET_STEP(data->ctx) == ASM_STEP_SCAN) {
		return;
	}

	ParserASTNode *child = data->ins_node->childs[0];
	
	AsmExprEvalResult *result = &ASM_EXPR_AST_NODE_GET_RESULT(child);

	switch (result->type) {
		case ASM_EXPR_EVAL_RESULT_TYPE_UINT64: {
			printf("0x%llx, %llu\n", result->value.u64, result->value.u64);
			break;
		}
		case ASM_EXPR_EVAL_RESULT_TYPE_DOUBLE: {
			printf("%lf\n", result->value.d);
			break;
		}
		case ASM_EXPR_EVAL_RESULT_TYPE_STRING: {
			for (size_t i = 0; i < result->value.str.len; i++) {
				putchar(result->value.str.ptr[i]);
			}
			putchar('\n');
			break;
		}
		default: {
			assert(0);
			break;
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
testq %rdi, %rdi
je 0x17df1
testq %rsi, %rsi
je 0x17e10
movq (%rsi), %rax
cmpl $0x1, 0x44(%rax)
jne 0x17e2f
movq 0x8(%rsi), %rcx
cmpl $0x1, 0xc8(%rcx)
jne 0x17d74
popq %rbx
popq %r14
popq %rbp
retq
movq 0x48(%rax), %rax
movq (%rax), %rbx
movzbl 0x60(%rbx), %eax
cmpl $0x1, %eax
je 0x17dd8
cmpl $0x2, %eax
je 0x17dc1
cmpl $0x3, %eax
jne 0x17e4e
cmpq $0x0, 0x70(%rbx)
je 0x17db3
xorl %r14d, %r14d
movq 0x68(%rbx), %rax
movsbl (%rax,%r14), %edi
callq 0xa030
incq %r14
cmpq 0x70(%rbx), %r14
jb 0x17d9c
movl $0xa, %edi
popq %rbx
popq %r14
popq %rbp
jmp 0xa030
movsd 0x68(%rbx), %xmm0
leaq 0x19e72(%rip), %rdi     # 0x31c3f
movb $0x1, %al
popq %rbx
popq %r14
popq %rbp
jmp 0xa090
movq 0x68(%rbx), %rdx
leaq 0x19e4e(%rip), %rdi     # 0x31c31
movq %rdx, %rsi
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
jmp 0xa090
leaq 0x18932(%rip), %rdi     # 0x3072a
leaq 0x1977b(%rip), %rsi     # 0x3157a
leaq 0x19def(%rip), %rcx     # 0x31bf5
movl $0x1d6, %edx            # imm = 0x1D6
callq 0xa0b0
leaq 0x1e744(%rip), %rdi     # 0x3655b
leaq 0x1975c(%rip), %rsi     # 0x3157a
leaq 0x19dd0(%rip), %rcx     # 0x31bf5
movl $0x1d7, %edx            # imm = 0x1D7
callq 0xa0b0
leaq 0x1985a(%rip), %rdi     # 0x31690
leaq 0x1973d(%rip), %rsi     # 0x3157a
leaq 0x19db1(%rip), %rcx     # 0x31bf5
movl $0x1d8, %edx            # imm = 0x1D8
callq 0xa0b0
leaq 0x1651b(%rip), %rdi     # 0x2e370
leaq 0x1971e(%rip), %rsi     # 0x3157a
leaq 0x19d92(%rip), %rcx     # 0x31bf5
movl $0x1f3, %edx            # imm = 0x1F3
callq 0xa0b0
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: output
void _output(
	InstructionEncoderData *data,
	EncoderInstruction *enc_ins
) {
	uint8_t buffer[32];
	size_t len = enc_ins_encode(enc_ins, buffer, sizeof(buffer));

	ASM_PARSER_CONTEXT_DATA_INC_ADDRESS_COUNTER(data->ctx, len);
	if (ASM_PARSER_CONTEXT_DATA_GET_STEP(data->ctx) == ASM_STEP_SCAN) {
		return;
	}

	fwrite(buffer, len, 1, ASM_PARSER_CONTEXT_DATA_GET_OUT(data->ctx));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x28, %rsp
movq %rsi, %rax
movq %rdi, %rbx
leaq -0x30(%rbp), %rsi
movl $0x20, %edx
movq %rax, %rdi
callq 0x14644
movq 0x8(%rbx), %rcx
addq %rax, 0xc0(%rcx)
cmpl $0x1, 0xc8(%rcx)
je 0x17ebc
movq 0xb8(%rcx), %rcx
leaq -0x30(%rbp), %rdi
movl $0x1, %edx
movq %rax, %rsi
callq 0xa180
addq $0x28, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_XXX_Eb_Gb
void ins_enc_XXX_Eb_Gb(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(2);

	ParserASTNode *ins_node = data->ins_node;

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

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

	ins_check_operand_type(data->ctx, ins, eb_node, gb_node, NULL);

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

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

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

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
testq %rdi, %rdi
je 0x17f7c
movq %rsi, %rbx
testq %rsi, %rsi
je 0x17f85
movq (%rbx), %r12
testq %r12, %r12
je 0x17f8e
cmpl $0x2, 0x44(%r12)
jne 0x17f97
movq %rdi, %r14
movq 0x48(%r12), %rax
movq (%rax), %r13
movq 0x8(%rax), %r15
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x16741
movq 0x8(%rbx), %rdi
leaq -0x88(%rbp), %rcx
movq %r14, %rsi
movq %r12, %rdx
movq %rcx, %r12
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r12, %rcx
callq 0x15488
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x1534a
movq %rbx, %rdi
movq %r12, %rsi
callq 0x17e70
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x187a7(%rip), %rdi     # 0x3072a
jmp 0x17f9e
leaq 0x1e5cf(%rip), %rdi     # 0x3655b
jmp 0x17f9e
leaq 0x19d0c(%rip), %rdi     # 0x31ca1
jmp 0x17f9e
leaq 0x19d12(%rip), %rdi     # 0x31cb0
leaq 0x19c9f(%rip), %rsi     # 0x31c44
leaq 0x19cb5(%rip), %rcx     # 0x31c61
movl $0x32, %edx
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_XXX_Ev_Gv
void ins_enc_XXX_Ev_Gv(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(2);

	ParserASTNode *ins_node = data->ins_node;

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

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

	ins_check_operand_type(data->ctx, ins, ev_node, gv_node, NULL);

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

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

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

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
testq %rdi, %rdi
je 0x1806f
movq %rsi, %rbx
testq %rsi, %rsi
je 0x18078
movq (%rbx), %r12
testq %r12, %r12
je 0x18081
cmpl $0x2, 0x44(%r12)
jne 0x1808a
movq %rdi, %r14
movq 0x48(%r12), %rax
movq (%rax), %r13
movq 0x8(%rax), %r15
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x16741
movq 0x8(%rbx), %rdi
leaq -0x88(%rbp), %rcx
movq %r14, %rsi
movq %r12, %rdx
movq %rcx, %r12
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r12, %rcx
callq 0x15488
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x1534a
movq %rbx, %rdi
movq %r12, %rsi
callq 0x17e70
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x186b4(%rip), %rdi     # 0x3072a
jmp 0x18091
leaq 0x1e4dc(%rip), %rdi     # 0x3655b
jmp 0x18091
leaq 0x19c19(%rip), %rdi     # 0x31ca1
jmp 0x18091
leaq 0x19c1f(%rip), %rdi     # 0x31cb0
leaq 0x19bac(%rip), %rsi     # 0x31c44
leaq 0x19c30(%rip), %rcx     # 0x31ccf
movl $0x4b, %edx
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_XXX_Gb_Eb
void ins_enc_XXX_Gb_Eb(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(2);

	ParserASTNode *ins_node = data->ins_node;

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

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

	ins_check_operand_type(data->ctx, ins, gb_node, eb_node, NULL);

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

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

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

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
testq %rdi, %rdi
je 0x18162
movq %rsi, %rbx
testq %rsi, %rsi
je 0x1816b
movq (%rbx), %r12
testq %r12, %r12
je 0x18174
cmpl $0x2, 0x44(%r12)
jne 0x1817d
movq %rdi, %r14
movq 0x48(%r12), %rax
movq (%rax), %r13
movq 0x8(%rax), %r15
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x16741
movq 0x8(%rbx), %rdi
leaq -0x88(%rbp), %rcx
movq %r14, %rsi
movq %r12, %rdx
movq %rcx, %r12
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r12, %rcx
callq 0x1534a
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x15488
movq %rbx, %rdi
movq %r12, %rsi
callq 0x17e70
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x185c1(%rip), %rdi     # 0x3072a
jmp 0x18184
leaq 0x1e3e9(%rip), %rdi     # 0x3655b
jmp 0x18184
leaq 0x19b26(%rip), %rdi     # 0x31ca1
jmp 0x18184
leaq 0x19b2c(%rip), %rdi     # 0x31cb0
leaq 0x19ab9(%rip), %rsi     # 0x31c44
leaq 0x19b7d(%rip), %rcx     # 0x31d0f
movl $0x64, %edx
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_XXX_Gv_Ev
void ins_enc_XXX_Gv_Ev(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(2);

	ParserASTNode *ins_node = data->ins_node;

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

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

	ins_check_operand_type(data->ctx, ins, gv_node, ev_node, NULL);

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

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

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

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
testq %rdi, %rdi
je 0x18255
movq %rsi, %rbx
testq %rsi, %rsi
je 0x1825e
movq (%rbx), %r12
testq %r12, %r12
je 0x18267
cmpl $0x2, 0x44(%r12)
jne 0x18270
movq %rdi, %r14
movq 0x48(%r12), %rax
movq (%rax), %r13
movq 0x8(%rax), %r15
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r15, %rcx
xorl %r8d, %r8d
callq 0x16741
movq 0x8(%rbx), %rdi
leaq -0x88(%rbp), %rcx
movq %r14, %rsi
movq %r12, %rdx
movq %rcx, %r12
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r12, %rcx
callq 0x1534a
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x15488
movq %rbx, %rdi
movq %r12, %rsi
callq 0x17e70
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x184ce(%rip), %rdi     # 0x3072a
jmp 0x18277
leaq 0x1e2f6(%rip), %rdi     # 0x3655b
jmp 0x18277
leaq 0x19a33(%rip), %rdi     # 0x31ca1
jmp 0x18277
leaq 0x19a39(%rip), %rdi     # 0x31cb0
leaq 0x199c6(%rip), %rsi     # 0x31c44
leaq 0x19aca(%rip), %rcx     # 0x31d4f
movl $0x7d, %edx
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_XXX_Gv_Ew
void ins_enc_XXX_Gv_Ew(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(2);

	ins_enc_XXX_Gv_Ev(
		ins,
		data
	);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
testq %rdi, %rdi
je 0x182b1
testq %rsi, %rsi
je 0x182ba
movq (%rsi), %rax
testq %rax, %rax
je 0x182c3
cmpl $0x2, 0x44(%rax)
jne 0x182cc
popq %rbp
jmp 0x1819c
leaq 0x18472(%rip), %rdi     # 0x3072a
jmp 0x182d3
leaq 0x1e29a(%rip), %rdi     # 0x3655b
jmp 0x182d3
leaq 0x199d7(%rip), %rdi     # 0x31ca1
jmp 0x182d3
leaq 0x199dd(%rip), %rdi     # 0x31cb0
leaq 0x1996a(%rip), %rsi     # 0x31c44
leaq 0x19aae(%rip), %rcx     # 0x31d8f
movl $0x96, %edx
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_XXX_AL_Ib
void ins_enc_XXX_AL_Ib(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(2);

	ParserASTNode *ins_node = data->ins_node;

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

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

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

	ins_fill_imm8(data->ctx, ins, ib_node, &enc_ins);

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x60, %rsp
testq %rdi, %rdi
je 0x1835d
movq %rsi, %rbx
testq %rsi, %rsi
je 0x18366
movq (%rbx), %rdx
testq %rdx, %rdx
je 0x1836f
cmpl $0x2, 0x44(%rdx)
jne 0x18378
movq %rdi, %r14
movq 0x48(%rdx), %rax
movq 0x8(%rax), %r15
movq 0x8(%rbx), %rdi
leaq -0x80(%rbp), %r12
movq %r14, %rsi
movq %r12, %rcx
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x15c51
movq %rbx, %rdi
movq %r12, %rsi
callq 0x17e70
addq $0x60, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x183c6(%rip), %rdi     # 0x3072a
jmp 0x1837f
leaq 0x1e1ee(%rip), %rdi     # 0x3655b
jmp 0x1837f
leaq 0x1992b(%rip), %rdi     # 0x31ca1
jmp 0x1837f
leaq 0x19931(%rip), %rdi     # 0x31cb0
leaq 0x198be(%rip), %rsi     # 0x31c44
leaq 0x19a42(%rip), %rcx     # 0x31dcf
movl $0xa2, %edx
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_opcode
void ins_enc_opcode(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS_WITHOUT_OPRD_COUNT();

	ParserASTNode *ins_node = data->ins_node;

	EncoderInstruction enc_ins;

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

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x60, %rsp
testq %rdi, %rdi
je 0x185f5
movq %rsi, %rbx
testq %rsi, %rsi
je 0x185fe
movq (%rbx), %rdx
testq %rdx, %rdx
je 0x18607
movq %rdi, %rsi
movq 0x8(%rbx), %rdi
leaq -0x70(%rbp), %r14
movq %r14, %rcx
callq 0x1524f
movq %rbx, %rdi
movq %r14, %rsi
callq 0x17e70
addq $0x60, %rsp
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x1812e(%rip), %rdi     # 0x3072a
jmp 0x1860e
leaq 0x1df56(%rip), %rdi     # 0x3655b
jmp 0x1860e
leaq 0x19693(%rip), %rdi     # 0x31ca1
leaq 0x1962f(%rip), %rsi     # 0x31c44
leaq 0x19888(%rip), %rcx     # 0x31ea4
movl $0x121, %edx            # imm = 0x121
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_opcode_eXX
void ins_enc_opcode_eXX(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(1);

	ParserASTNode *ins_node = data->ins_node;

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

	EncoderInstruction enc_ins;

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

	int arch = ASM_PARSER_CONTEXT_DATA_GET_ARCH(data->ctx);

	InsRegister *target_reg = ASM_REG_AST_NODE_GET_REG(target);

	switch (arch) {
		case ASM_ARCH_BIT16: {
			switch (target_reg->type) {
				case INS_REGISTER_GENERAL_2BYTE: {
					// 无需操作数大小前缀。
					break;
				}
				case INS_REGISTER_GENERAL_4BYTE: {
					enc_ins.legacy_prefix.operand_size_override = true;
					break;
				}
				default: {
					assert(0);
					break;
				}
			}
			break;
		}
		case ASM_ARCH_BIT32: {
			switch (target_reg->type) {
				case INS_REGISTER_GENERAL_2BYTE: {
					enc_ins.legacy_prefix.operand_size_override = true;
					break;
				}
				case INS_REGISTER_GENERAL_4BYTE: {
					// 无需操作数大小前缀。
					break;
				}
				default: {
					assert(0);
					break;
				}
			}
			break;
		}
		default: {
			assert(0);
			break;
		}
	}

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x60, %rsp
testq %rdi, %rdi
je 0x18700
movq %rsi, %rbx
testq %rsi, %rsi
je 0x18709
movq (%rbx), %rdx
testq %rdx, %rdx
je 0x18712
cmpl $0x1, 0x44(%rdx)
jne 0x1871b
movq %rdi, %rsi
movq 0x48(%rdx), %rax
movq (%rax), %r14
movq 0x8(%rbx), %rdi
leaq -0x70(%rbp), %rcx
callq 0x1524f
movq 0x8(%rbx), %rax
movl 0xb0(%rax), %ecx
movq 0x60(%r14), %rax
cmpl $0x2, %ecx
je 0x186bb
cmpl $0x1, %ecx
jne 0x1873a
movl 0xc(%rax), %eax
cmpl $0x3, %eax
je 0x186eb
cmpl $0x4, %eax
je 0x186e7
leaq 0x15ccd(%rip), %rdi     # 0x2e370
leaq 0x1959a(%rip), %rsi     # 0x31c44
leaq 0x19830(%rip), %rcx     # 0x31ee1
movl $0x14a, %edx            # imm = 0x14A
callq 0xa0b0
movl 0xc(%rax), %eax
cmpl $0x3, %eax
je 0x186e7
cmpl $0x4, %eax
je 0x186eb
leaq 0x15ca1(%rip), %rdi     # 0x2e370
leaq 0x1956e(%rip), %rsi     # 0x31c44
leaq 0x19804(%rip), %rcx     # 0x31ee1
movl $0x15b, %edx            # imm = 0x15B
callq 0xa0b0
movb $0x1, -0x65(%rbp)
leaq -0x70(%rbp), %rsi
movq %rbx, %rdi
callq 0x17e70
addq $0x60, %rsp
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x18023(%rip), %rdi     # 0x3072a
jmp 0x18722
leaq 0x1de4b(%rip), %rdi     # 0x3655b
jmp 0x18722
leaq 0x19588(%rip), %rdi     # 0x31ca1
jmp 0x18722
leaq 0x19800(%rip), %rdi     # 0x31f22
leaq 0x1951b(%rip), %rsi     # 0x31c44
leaq 0x197b1(%rip), %rcx     # 0x31ee1
movl $0x130, %edx            # imm = 0x130
callq 0xa0b0
leaq 0x15c2f(%rip), %rdi     # 0x2e370
leaq 0x194fc(%rip), %rsi     # 0x31c44
leaq 0x19792(%rip), %rcx     # 0x31ee1
movl $0x162, %edx            # imm = 0x162
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_bound_Gv_Ma
void ins_enc_bound_Gv_Ma(
	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];

	size_t target_size = ins_get_oprd_size(data->ctx, target);
	if (target_size != 2 && target_size != 4) {
		data->ctx->syntax_error_node_msg(data->ctx, target, "operand type not matched.");
	}

	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, source, &enc_ins);

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
testq %rdi, %rdi
je 0x189d3
movq %rsi, %rbx
testq %rsi, %rsi
je 0x189dc
movq (%rbx), %r12
testq %r12, %r12
je 0x189e5
cmpl $0x2, 0x44(%r12)
jne 0x189ee
movq %rdi, %r14
movq 0x48(%r12), %rax
movq (%rax), %r13
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq 0x8(%rbx), %rdi
movq %r13, %rsi
callq 0x166ef
cmpq $0x2, %rax
je 0x1897b
cmpq $0x4, %rax
je 0x1897b
movq 0x8(%rbx), %rdi
leaq 0x18382(%rip), %rdx     # 0x30cf7
movq %r13, %rsi
callq *0x58(%rdi)
movq 0x8(%rbx), %rdi
leaq -0x90(%rbp), %r15
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r15, %rcx
callq 0x1534a
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq -0x30(%rbp), %rdx
movq %r15, %rcx
callq 0x15488
movq %rbx, %rdi
movq %r15, %rsi
callq 0x17e70
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x17d50(%rip), %rdi     # 0x3072a
jmp 0x189f5
leaq 0x1db78(%rip), %rdi     # 0x3655b
jmp 0x189f5
leaq 0x192b5(%rip), %rdi     # 0x31ca1
jmp 0x189f5
leaq 0x192bb(%rip), %rdi     # 0x31cb0
leaq 0x19248(%rip), %rsi     # 0x31c44
leaq 0x195a9(%rip), %rcx     # 0x31fac
movl $0x1d5, %edx            # imm = 0x1D5
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_arpl_Ew_Gw
void ins_enc_arpl_Ew_Gw(
	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);

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

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

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
testq %rdi, %rdi
je 0x18a9b
movq %rsi, %rbx
testq %rsi, %rsi
je 0x18aa4
movq (%rbx), %rdx
testq %rdx, %rdx
je 0x18aad
cmpl $0x2, 0x44(%rdx)
jne 0x18ab6
movq %rdi, %r14
movq 0x48(%rdx), %rax
movq (%rax), %r15
movq 0x8(%rax), %r12
movq 0x8(%rbx), %rdi
leaq -0x88(%rbp), %r13
movq %r14, %rsi
movq %r13, %rcx
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r13, %rcx
callq 0x15488
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x1534a
movq %rbx, %rdi
movq %r13, %rsi
callq 0x17e70
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x17c88(%rip), %rdi     # 0x3072a
jmp 0x18abd
leaq 0x1dab0(%rip), %rdi     # 0x3655b
jmp 0x18abd
leaq 0x191ed(%rip), %rdi     # 0x31ca1
jmp 0x18abd
leaq 0x191f3(%rip), %rdi     # 0x31cb0
leaq 0x19180(%rip), %rsi     # 0x31c44
leaq 0x19523(%rip), %rcx     # 0x31fee
movl $0x1f1, %edx            # imm = 0x1F1
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_pushad_popad
void ins_enc_pushad_popad(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(0);

	ParserASTNode *ins_node = data->ins_node;

	EncoderInstruction enc_ins;

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

	int arch = ASM_PARSER_CONTEXT_DATA_GET_ARCH(data->ctx);

	switch (arch) {
		case ASM_ARCH_BIT16: {
			enc_ins.legacy_prefix.operand_size_override = true;
			break;
		}
		case ASM_ARCH_BIT32: {
			break;
		}
		case ASM_ARCH_BIT64: {
			data->ctx->syntax_error_node_msg(
				data->ctx,
				ins_node,
				"instruction not supported in 64-bit mode."
			);
			break;
		}
		default: {
			assert(0);
			break;
		}
	}

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x60, %rsp
testq %rdi, %rdi
je 0x18b50
movq %rsi, %rbx
testq %rsi, %rsi
je 0x18b59
movq (%rbx), %r14
testq %r14, %r14
je 0x18b62
cmpl $0x0, 0x44(%r14)
jne 0x18b6b
movq %rdi, %rsi
movq 0x8(%rbx), %rdi
leaq -0x70(%rbp), %rcx
movq %r14, %rdx
callq 0x1524f
movq 0x8(%rbx), %rdi
movl 0xb0(%rdi), %eax
cmpl $0x4, %eax
je 0x18b2e
cmpl $0x2, %eax
je 0x18b3b
cmpl $0x1, %eax
jne 0x18b8a
movb $0x1, -0x65(%rbp)
jmp 0x18b3b
leaq 0x1944d(%rip), %rdx     # 0x31f82
movq %r14, %rsi
callq *0x58(%rdi)
leaq -0x70(%rbp), %rsi
movq %rbx, %rdi
callq 0x17e70
addq $0x60, %rsp
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x17bd3(%rip), %rdi     # 0x3072a
jmp 0x18b72
leaq 0x1d9fb(%rip), %rdi     # 0x3655b
jmp 0x18b72
leaq 0x19138(%rip), %rdi     # 0x31ca1
jmp 0x18b72
leaq 0x19500(%rip), %rdi     # 0x32072
leaq 0x190cb(%rip), %rsi     # 0x31c44
leaq 0x194af(%rip), %rcx     # 0x3202f
movl $0x208, %edx            # imm = 0x208
callq 0xa0b0
leaq 0x157df(%rip), %rdi     # 0x2e370
leaq 0x190ac(%rip), %rsi     # 0x31c44
leaq 0x19490(%rip), %rcx     # 0x3202f
movl $0x223, %edx            # imm = 0x223
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_movsxd
void ins_enc_movsxd(
	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];

	size_t target_size = ins_get_oprd_size(data->ctx, target);
	if (target_size != 8) {
		data->ctx->syntax_error_node_msg(
			data->ctx,
			target,
			"operand type not matched."
		);
	}

	size_t source_size = ins_get_oprd_size(data->ctx, source);
	if (source_size != 4) {
		data->ctx->syntax_error_node_msg(
			data->ctx,
			target,
			"operand type not matched."
		);
	}

	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, source, &enc_ins);

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
testq %rdi, %rdi
je 0x18c98
movq %rsi, %rbx
testq %rsi, %rsi
je 0x18ca1
movq (%rbx), %r12
testq %r12, %r12
je 0x18caa
cmpl $0x2, 0x44(%r12)
jne 0x18cb3
movq %rdi, %r14
movq 0x48(%r12), %rax
movq (%rax), %r13
movq 0x8(%rax), %r15
movq 0x8(%rbx), %rdi
movq %r13, %rsi
callq 0x166ef
cmpq $0x8, %rax
je 0x18c19
movq 0x8(%rbx), %rdi
leaq 0x180e4(%rip), %rdx     # 0x30cf7
movq %r13, %rsi
callq *0x58(%rdi)
movq 0x8(%rbx), %rdi
movq %r15, -0x30(%rbp)
movq %r15, %rsi
callq 0x166ef
cmpq $0x4, %rax
je 0x18c40
movq 0x8(%rbx), %rdi
leaq 0x180bd(%rip), %rdx     # 0x30cf7
movq %r13, %rsi
callq *0x58(%rdi)
movq 0x8(%rbx), %rdi
leaq -0x90(%rbp), %r15
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r15, %rcx
callq 0x1534a
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq -0x30(%rbp), %rdx
movq %r15, %rcx
callq 0x15488
movq %rbx, %rdi
movq %r15, %rsi
callq 0x17e70
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x17a8b(%rip), %rdi     # 0x3072a
jmp 0x18cba
leaq 0x1d8b3(%rip), %rdi     # 0x3655b
jmp 0x18cba
leaq 0x18ff0(%rip), %rdi     # 0x31ca1
jmp 0x18cba
leaq 0x18ff6(%rip), %rdi     # 0x31cb0
leaq 0x18f83(%rip), %rsi     # 0x31c44
leaq 0x193c9(%rip), %rcx     # 0x32091
movl $0x22f, %edx            # imm = 0x22F
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_Jb
void ins_enc_Jb(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(1);

	ParserASTNode *ins_node = data->ins_node;

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

	uint64_t addr = asm_parser_get_symbol_by_token_key(data->ctx, node_label->token);

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

	enc_ins.disp_len = 1;
	enc_ins.disp = 0;

	uint8_t buffer[32];
	size_t len = enc_ins_encode(&enc_ins, buffer, sizeof(buffer));

	uint64_t ip = ASM_PARSER_CONTEXT_DATA_GET_ADDRESS_COUNTER(data->ctx) + len;
	uint64_t offset = addr - ip;
	enc_ins.disp = offset;

	len = enc_ins_encode(&enc_ins, buffer, sizeof(buffer));

	ASM_PARSER_CONTEXT_DATA_INC_ADDRESS_COUNTER(data->ctx, len);
	if (ASM_PARSER_CONTEXT_DATA_GET_STEP(data->ctx) == ASM_STEP_SCAN) {
		return;
	}

	fwrite(buffer, len, 1, ASM_PARSER_CONTEXT_DATA_GET_OUT(data->ctx));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x88, %rsp
testq %rdi, %rdi
je 0x18dc8
movq %rsi, %rbx
testq %rsi, %rsi
je 0x18dd1
movq (%rbx), %r12
testq %r12, %r12
je 0x18dda
cmpl $0x1, 0x44(%r12)
jne 0x18de3
movq %rdi, %r14
movq 0x48(%r12), %rax
movq (%rax), %rax
movq 0x8(%rbx), %rdi
movq 0x10(%rax), %rsi
callq 0x207e9
movq %rax, %r13
movq 0x8(%rbx), %rdi
leaq -0xb0(%rbp), %r15
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x1524f
movb $0x1, 0x1e(%r15)
movq $0x0, 0x20(%r15)
leaq -0x50(%rbp), %r14
movl $0x20, %edx
movq %r15, %rdi
movq %r14, %rsi
callq 0x14644
movq 0x8(%rbx), %rcx
addq 0xc0(%rcx), %rax
subq %rax, %r13
movq %r13, 0x20(%r15)
movl $0x20, %edx
movq %r15, %rdi
movq %r14, %rsi
callq 0x14644
movq 0x8(%rbx), %rcx
addq %rax, 0xc0(%rcx)
cmpl $0x1, 0xc8(%rcx)
je 0x18db6
movq 0xb8(%rcx), %rcx
leaq -0x50(%rbp), %rdi
movl $0x1, %edx
movq %rax, %rsi
callq 0xa180
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1795b(%rip), %rdi     # 0x3072a
jmp 0x18dea
leaq 0x1d783(%rip), %rdi     # 0x3655b
jmp 0x18dea
leaq 0x18ec0(%rip), %rdi     # 0x31ca1
jmp 0x18dea
leaq 0x19138(%rip), %rdi     # 0x31f22
leaq 0x18e53(%rip), %rsi     # 0x31c44
leaq 0x192d6(%rip), %rcx     # 0x320ce
movl $0x258, %edx            # imm = 0x258
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_opcode_ext_Eb_Ib
void ins_enc_opcode_ext_Eb_Ib(
	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);

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

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

	ins_fill_imm8(data->ctx, ins, source, &enc_ins);

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
testq %rdi, %rdi
je 0x18eb2
movq %rsi, %rbx
testq %rsi, %rsi
je 0x18ebb
movq (%rbx), %rdx
testq %rdx, %rdx
je 0x18ec4
cmpl $0x2, 0x44(%rdx)
jne 0x18ecd
movq %rdi, %r14
movq 0x48(%rdx), %rax
movq (%rax), %r13
movq 0x8(%rax), %r12
movq 0x8(%rbx), %rdi
leaq -0x88(%rbp), %r15
movq %r14, %rsi
movq %r15, %rcx
callq 0x1524f
movb $0x1, 0x16(%r15)
movb 0x22(%r14), %al
shrb $0x2, %al
andb $0x7, %al
movb %al, 0x18(%r15)
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %r15, %rcx
callq 0x15488
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x15c51
movq %rbx, %rdi
movq %r15, %rsi
callq 0x17e70
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x17871(%rip), %rdi     # 0x3072a
jmp 0x18ed4
leaq 0x1d699(%rip), %rdi     # 0x3655b
jmp 0x18ed4
leaq 0x18dd6(%rip), %rdi     # 0x31ca1
jmp 0x18ed4
leaq 0x18ddc(%rip), %rdi     # 0x31cb0
leaq 0x18d69(%rip), %rsi     # 0x31c44
leaq 0x19225(%rip), %rcx     # 0x32107
movl $0x27c, %edx            # imm = 0x27C
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/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
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
testq %rdi, %rdi
je 0x18fde
movq %rsi, %rbx
testq %rsi, %rsi
je 0x18fe7
movq (%rbx), %rdx
testq %rdx, %rdx
je 0x18ff0
cmpl $0x2, 0x44(%rdx)
jne 0x18ff9
movq %rdi, %r14
movq 0x48(%rdx), %rax
movq (%rax), %r12
movq 0x8(%rax), %r15
movq 0x8(%rbx), %rdi
leaq -0x88(%rbp), %r13
movq %r14, %rsi
movq %r13, %rcx
callq 0x1524f
movb $0x1, 0x16(%r13)
movb 0x22(%r14), %al
shrb $0x2, %al
andb $0x7, %al
movb %al, 0x18(%r13)
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0x15488
movq 0x8(%rbx), %rdi
movq %r12, %rsi
callq 0x166ef
cmpq $0x8, %rax
je 0x18faa
cmpq $0x4, %rax
je 0x18faa
cmpq $0x2, %rax
jne 0x19018
movq 0x8(%rbx), %rdi
leaq -0x88(%rbp), %rcx
movq %r14, %rsi
movq %r15, %rdx
callq 0x15d47
jmp 0x18fc0
movq 0x8(%rbx), %rdi
leaq -0x88(%rbp), %rcx
movq %r14, %rsi
movq %r15, %rdx
callq 0x15e3d
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x17e70
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x17745(%rip), %rdi     # 0x3072a
jmp 0x19000
leaq 0x1d56d(%rip), %rdi     # 0x3655b
jmp 0x19000
leaq 0x18caa(%rip), %rdi     # 0x31ca1
jmp 0x19000
leaq 0x18cb0(%rip), %rdi     # 0x31cb0
leaq 0x18c3d(%rip), %rsi     # 0x31c44
leaq 0x19140(%rip), %rcx     # 0x3214e
movl $0x296, %edx            # imm = 0x296
callq 0xa0b0
leaq 0x15351(%rip), %rdi     # 0x2e370
leaq 0x18c1e(%rip), %rsi     # 0x31c44
leaq 0x19121(%rip), %rcx     # 0x3214e
movl $0x2b5, %edx            # imm = 0x2B5
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_pause
void ins_enc_pause(
	Instruction *ins,
	InstructionEncoderData *data
) {
	_CHECK_PARAMS(0);

	ParserASTNode *ins_node = data->ins_node;

	EncoderInstruction enc_ins;

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

	enc_ins.legacy_prefix.rep = true;

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x60, %rsp
testq %rdi, %rdi
je 0x19173
movq %rsi, %rbx
testq %rsi, %rsi
je 0x1917c
movq (%rbx), %rdx
testq %rdx, %rdx
je 0x19185
cmpl $0x0, 0x44(%rdx)
jne 0x1918e
movq %rdi, %rsi
movq 0x8(%rbx), %rdi
leaq -0x70(%rbp), %r14
movq %r14, %rcx
callq 0x1524f
movb $0x1, 0x2(%r14)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x17e70
addq $0x60, %rsp
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x175b0(%rip), %rdi     # 0x3072a
jmp 0x19195
leaq 0x1d3d8(%rip), %rdi     # 0x3655b
jmp 0x19195
leaq 0x18b15(%rip), %rdi     # 0x31ca1
jmp 0x19195
leaq 0x18edd(%rip), %rdi     # 0x32072
leaq 0x18aa8(%rip), %rsi     # 0x31c44
leaq 0x19039(%rip), %rcx     # 0x321dc
movl $0x2db, %edx            # imm = 0x2DB
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_mov_rAX_Ob
void ins_enc_mov_rAX_Ob(
	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);

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

	int arch = ASM_PARSER_CONTEXT_DATA_GET_ARCH(data->ctx);
	if (arch == ASM_ARCH_BIT64) {
		enc_ins.disp_len = 8;
	}

	enc_ins.mod_rm_used = false;

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x60, %rsp
testq %rdi, %rdi
je 0x193fc
movq %rsi, %rbx
testq %rsi, %rsi
je 0x19405
movq (%rbx), %rdx
testq %rdx, %rdx
je 0x1940e
cmpl $0x2, 0x44(%rdx)
jne 0x19417
movq %rdi, %r14
movq 0x48(%rdx), %rax
movq 0x8(%rax), %r15
movq 0x8(%rbx), %rdi
leaq -0x80(%rbp), %r12
movq %r14, %rsi
movq %r12, %rcx
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x15488
movq 0x8(%rbx), %rax
cmpl $0x4, 0xb0(%rax)
jne 0x193df
movb $0x8, -0x62(%rbp)
leaq -0x80(%rbp), %rsi
movb $0x0, 0x16(%rsi)
movq %rbx, %rdi
callq 0x17e70
addq $0x60, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x17327(%rip), %rdi     # 0x3072a
jmp 0x1941e
leaq 0x1d14f(%rip), %rdi     # 0x3655b
jmp 0x1941e
leaq 0x1888c(%rip), %rdi     # 0x31ca1
jmp 0x1941e
leaq 0x18892(%rip), %rdi     # 0x31cb0
leaq 0x1881f(%rip), %rsi     # 0x31c44
leaq 0x18e2f(%rip), %rcx     # 0x3225b
movl $0x35c, %edx            # imm = 0x35C
callq 0xa0b0
// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/assembler/ins_enc.c
// Function: ins_enc_mov_Ob_rAX
void ins_enc_mov_Ob_rAX(
	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);

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

	int arch = ASM_PARSER_CONTEXT_DATA_GET_ARCH(data->ctx);
	if (arch == ASM_ARCH_BIT64) {
		enc_ins.disp_len = 8;
	}

	enc_ins.mod_rm_used = false;

	_output(data, &enc_ins);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x60, %rsp
testq %rdi, %rdi
je 0x194bd
movq %rsi, %rbx
testq %rsi, %rsi
je 0x194c6
movq (%rbx), %rdx
testq %rdx, %rdx
je 0x194cf
cmpl $0x2, 0x44(%rdx)
jne 0x194d8
movq %rdi, %r14
movq 0x48(%rdx), %rax
movq (%rax), %r15
movq 0x8(%rbx), %rdi
leaq -0x80(%rbp), %r12
movq %r14, %rsi
movq %r12, %rcx
callq 0x1524f
movq 0x8(%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x15488
movq 0x8(%rbx), %rax
cmpl $0x4, 0xb0(%rax)
jne 0x194a0
movb $0x8, -0x62(%rbp)
leaq -0x80(%rbp), %rsi
movb $0x0, 0x16(%rsi)
movq %rbx, %rdi
callq 0x17e70
addq $0x60, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x17266(%rip), %rdi     # 0x3072a
jmp 0x194df
leaq 0x1d08e(%rip), %rdi     # 0x3655b
jmp 0x194df
leaq 0x187cb(%rip), %rdi     # 0x31ca1
jmp 0x194df
leaq 0x187d1(%rip), %rdi     # 0x31cb0
leaq 0x1875e(%rip), %rsi     # 0x31c44
leaq 0x18daf(%rip), %rcx     # 0x3229c
movl $0x378, %edx            # imm = 0x378
callq 0xa0b0