// File: /workspace/github_c_makefile_star2_O1/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 0x70165(%rip), %r14     # 0x9cc10
cmpl $0x16, 0x8(%rax,%r14)
movq (%rax,%r14), %rsi
jne 0x2cacc
leaq 0x47350(%rip), %rdi     # 0x73e0e
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq %rdi, %rbx
leaq 0x4733c(%rip), %rdi     # 0x73e12
xorl %eax, %eax
callq 0x12110
movl (%rbx), %eax
shlq $0x4, %rax
movl 0x8(%rax,%r14), %eax
cmpq $0x15, %rax
ja 0x2ccfe
leaq 0x47027(%rip), %rcx     # 0x73b20
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%rbx), %rsi
leaq 0x473ac(%rip), %rdi     # 0x73eb9
jmp 0x2cabe
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x47395(%rip), %rdi     # 0x73eb3
jmp 0x2cc98
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x47302(%rip), %rdi     # 0x73e34
jmp 0x2cc98
movq 0x8(%rbx), %rsi
movl 0x10(%rbx), %edx
leaq 0x47310(%rip), %rdi     # 0x73e55
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 0x472ea(%rip), %rdi     # 0x73e4f
jmp 0x2cbdb
movq 0x8(%rbx), %rsi
movsd 0x10(%rbx), %xmm0
leaq 0x472ee(%rip), %rdi     # 0x73e65
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 0x47315(%rip), %rdi     # 0x73ead
jmp 0x2ccce
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x4727e(%rip), %rdi     # 0x73e2e
jmp 0x2ccce
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x47300(%rip), %rdi     # 0x73ec4
jmp 0x2cc98
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movl 0x18(%rbx), %ecx
leaq 0x47264(%rip), %rdi     # 0x73e3f
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 0x4728f(%rip), %rdi     # 0x73e8b
jmp 0x2ccce
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
movq 0x20(%rbx), %r8
leaq 0x471ff(%rip), %rdi     # 0x73e17
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 0x471e4(%rip), %rdi     # 0x73e1d
jmp 0x2ccce
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movsd 0x18(%rbx), %xmm0
leaq 0x4720d(%rip), %rdi     # 0x73e5f
jmp 0x2ccf0
movl 0x8(%rbx), %esi
leaq 0x471fb(%rip), %rdi     # 0x73e5c
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movsd 0x8(%rbx), %xmm0
leaq 0x471f1(%rip), %rdi     # 0x73e6c
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x4718b(%rip), %rdi     # 0x73e23
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 0x471b7(%rip), %rdi     # 0x73e70
jmp 0x2ccce
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x471f0(%rip), %rdi     # 0x73ebe
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 0x471ac(%rip), %rdi     # 0x73e9c
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 0x47129(%rip), %rdi     # 0x73e3a
jmp 0x2cabe