// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/common/ir.c
// Function: prv_dump_instr
void prv_dump_instr(subtilis_ir_inst_t *instr)
{
	if (op_desc[instr->type].cls == SUBTILIS_OP_CLASS_NONE) {
		printf("\t%s", op_desc[instr->type].name);
		return;
	}

	printf("\t%s ", op_desc[instr->type].name);
	switch (op_desc[instr->type].cls) {
	case SUBTILIS_OP_CLASS_REG_REG_REG_REG:
		printf("r%zu, r%zu, r%zu, r%zu", instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].reg,
		       instr->operands[3].reg);
		break;
	case SUBTILIS_OP_CLASS_REG_REG_REG:
		printf("r%zu, r%zu, r%zu", instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].reg);
		break;
	case SUBTILIS_OP_CLASS_FREG_FREG_FREG:
		printf("f%zu, f%zu, f%zu", instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].reg);
		break;
	case SUBTILIS_OP_CLASS_REG_REG_I32:
		printf("r%zu, r%zu, #%" PRIi32, instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].integer);
		break;
	case SUBTILIS_OP_CLASS_FREG_REG_I32:
		printf("f%zu, r%zu, #%" PRIi32, instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].integer);
		break;
	case SUBTILIS_OP_CLASS_FREG_FREG_REAL:
		printf("f%zu, f%zu, #%lf", instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].real);
		break;
	case SUBTILIS_OP_CLASS_REG_LABEL_LABEL:
		printf("r%zu, label_%zu, label_%zu", instr->operands[0].reg,
		       instr->operands[1].label, instr->operands[2].label);
		break;
	case SUBTILIS_OP_CLASS_REG_FREG_FREG:
		printf("r%zu, f%zu, f%zu", instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].reg);
		break;
	case SUBTILIS_OP_CLASS_REG_FREG_REAL:
		printf("r%zu, f%zu, #%lf", instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].real);
		break;
	case SUBTILIS_OP_CLASS_REG_FREG_REG:
		printf("r%zu, f%zu, r%zu", instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].reg);
		break;
	case SUBTILIS_OP_CLASS_REG_REG_FREG:
		printf("r%zu, r%zu, f%zu", instr->operands[0].reg,
		       instr->operands[1].reg, instr->operands[2].reg);
		break;
	case SUBTILIS_OP_CLASS_REG_I32:
		printf("r%zu, #%" PRIi32, instr->operands[0].reg,
		       instr->operands[1].integer);
		break;
	case SUBTILIS_OP_CLASS_FREG_REAL:
		printf("f%zu, #%lf", instr->operands[0].reg,
		       instr->operands[1].real);
		break;
	case SUBTILIS_OP_CLASS_REG_REG:
		printf("r%zu, r%zu", instr->operands[0].reg,
		       instr->operands[1].reg);
		break;
	case SUBTILIS_OP_CLASS_FREG_FREG:
		printf("f%zu, f%zu", instr->operands[0].reg,
		       instr->operands[1].reg);
		break;
	case SUBTILIS_OP_CLASS_REG_FREG:
		printf("r%zu, f%zu", instr->operands[0].reg,
		       instr->operands[1].reg);
		break;
	case SUBTILIS_OP_CLASS_FREG_REG:
		printf("f%zu, r%zu", instr->operands[0].reg,
		       instr->operands[1].reg);
		break;
	case SUBTILIS_OP_CLASS_REG:
		printf("r%zu", instr->operands[0].reg);
		break;
	case SUBTILIS_OP_CLASS_FREG:
		printf("f%zu", instr->operands[0].reg);
		break;
	case SUBTILIS_OP_CLASS_I32:
		printf("%" PRIi32, instr->operands[0].integer);
		break;
	case SUBTILIS_OP_CLASS_REAL:
		printf("%lf", instr->operands[0].real);
		break;
	case SUBTILIS_OP_CLASS_LABEL:
		printf("r%zu", instr->operands[0].reg);
		break;
	case SUBTILIS_OP_CLASS_NONE:
		break;
	}
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl (%rdi), %eax
shlq $0x4, %rax
leaq 0x719be(%rip), %r14     # 0x9cc10
cmpl $0x16, 0x8(%rax,%r14)
movq (%rax,%r14), %rsi
jne 0x2b273
leaq 0x42b79(%rip), %rdi     # 0x6ddde
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq %rdi, %rbx
leaq 0x42b65(%rip), %rdi     # 0x6dde2
xorl %eax, %eax
callq 0x12110
movl (%rbx), %eax
shlq $0x4, %rax
movl 0x8(%rax,%r14), %eax
cmpq $0x15, %rax
ja 0x2b4a5
leaq 0x42850(%rip), %rcx     # 0x6daf0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%rbx), %rsi
leaq 0x42bd5(%rip), %rdi     # 0x6de89
jmp 0x2b265
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x42bbe(%rip), %rdi     # 0x6de83
jmp 0x2b43f
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x42b2b(%rip), %rdi     # 0x6de04
jmp 0x2b43f
movq 0x8(%rbx), %rsi
movl 0x10(%rbx), %edx
leaq 0x42b39(%rip), %rdi     # 0x6de25
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movl 0x18(%rbx), %ecx
leaq 0x42b13(%rip), %rdi     # 0x6de1f
jmp 0x2b382
movq 0x8(%rbx), %rsi
movsd 0x10(%rbx), %xmm0
leaq 0x42b17(%rip), %rdi     # 0x6de35
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x42b3e(%rip), %rdi     # 0x6de7d
jmp 0x2b475
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x42aa7(%rip), %rdi     # 0x6ddfe
jmp 0x2b475
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x42b29(%rip), %rdi     # 0x6de94
jmp 0x2b43f
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movl 0x18(%rbx), %ecx
leaq 0x42a8d(%rip), %rdi     # 0x6de0f
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x42ab8(%rip), %rdi     # 0x6de5b
jmp 0x2b475
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
movq 0x20(%rbx), %r8
leaq 0x42a28(%rip), %rdi     # 0x6dde7
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x42a0d(%rip), %rdi     # 0x6dded
jmp 0x2b475
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movsd 0x18(%rbx), %xmm0
leaq 0x42a36(%rip), %rdi     # 0x6de2f
jmp 0x2b497
movl 0x8(%rbx), %esi
leaq 0x42a24(%rip), %rdi     # 0x6de2c
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movsd 0x8(%rbx), %xmm0
leaq 0x42a1a(%rip), %rdi     # 0x6de3c
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x429b4(%rip), %rdi     # 0x6ddf3
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x429e0(%rip), %rdi     # 0x6de40
jmp 0x2b475
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x42a19(%rip), %rdi     # 0x6de8e
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movsd 0x18(%rbx), %xmm0
leaq 0x429d5(%rip), %rdi     # 0x6de6c
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq 0x8(%rbx), %rsi
leaq 0x42952(%rip), %rdi     # 0x6de0a
jmp 0x2b265