// File: /workspace/github_c_makefile_star2_O0/Encryptr[P]O-plus-plus/opp/ir/ir.c
// Function: oppir_eval_jmp
static void oppir_eval_jmp(struct OppIr* ir, struct OppIr_Jmp* jmp)
{
	if (jmp->loc >= ir->offsets.allocated) {
		printf("LABEL REALLOC NEEDED\n");
	}

	if (jmp->type == PURE_JMP)
		IR_EMIT(0xe9);
	else
		IR_EMIT(0x0f);

	switch (jmp->type)
	{
		case TEQEQ:  IR_EMIT(0x84); break;
		case TNOTEQ: IR_EMIT(0x85); break;
		case TGT:    IR_EMIT(0x8f); break;
		case TLE:    IR_EMIT(0x8e); break;
		case TLT:    IR_EMIT(0x8c); break;
		case TGE:    IR_EMIT(0x8d); break;
	}
	ir->offsets.jmp_table[ir->offsets.jmp_idx].loc = ir->code.idx;
	ir->offsets.jmp_table[ir->offsets.jmp_idx].table_pos = jmp->loc;
	IR_EMIT(0x00);
	IR_EMIT(0x00);
	IR_EMIT(0x00);
	IR_EMIT(0x00);

	ir->offsets.jmp_idx++;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq %rsi, 0x8(%rsp)
movq 0x8(%rsp), %rax
movl 0x4(%rax), %eax
movq 0x10(%rsp), %rcx
cmpq 0x60(%rcx), %rax
jb 0xad9f
leaq 0x9841(%rip), %rdi      # 0x145d9
movb $0x0, %al
callq 0x10c0
movq 0x8(%rsp), %rax
cmpl $0x0, (%rax)
jne 0xadcb
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $-0x17, (%rax,%rcx)
jmp 0xadeb
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $0xf, (%rax,%rcx)
movq 0x8(%rsp), %rax
movl (%rax), %eax
addl $-0x9, %eax
movl %eax, %ecx
movq %rcx, (%rsp)
subl $0x5, %eax
ja 0xaee8
movq (%rsp), %rax
leaq 0x9549(%rip), %rcx      # 0x14358
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $-0x7c, (%rax,%rcx)
jmp 0xaee8
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $-0x7b, (%rax,%rcx)
jmp 0xaee8
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $-0x71, (%rax,%rcx)
jmp 0xaee8
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $-0x72, (%rax,%rcx)
jmp 0xaee8
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $-0x74, (%rax,%rcx)
jmp 0xaee8
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $-0x73, (%rax,%rcx)
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rcx
movq 0x10(%rsp), %rax
movq 0x78(%rax), %rax
movq 0x10(%rsp), %rdx
movl 0x68(%rdx), %edx
shlq $0x4, %rdx
addq %rdx, %rax
movq %rcx, (%rax)
movq 0x8(%rsp), %rax
movl 0x4(%rax), %ecx
movq 0x10(%rsp), %rax
movq 0x78(%rax), %rax
movq 0x10(%rsp), %rdx
movl 0x68(%rdx), %edx
shlq $0x4, %rdx
addq %rdx, %rax
movl %ecx, 0x8(%rax)
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $0x0, (%rax,%rcx)
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $0x0, (%rax,%rcx)
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $0x0, (%rax,%rcx)
movq 0x10(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rdx
movq 0x8(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x8(%rdx)
movb $0x0, (%rax,%rcx)
movq 0x10(%rsp), %rax
movl 0x68(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x68(%rax)
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)