// File: /workspace/github_c_makefile_star2_O3/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 0x704c0(%rip), %r14     # 0x9cc10
cmpl $0x16, 0x8(%rax,%r14)
movq (%rax,%r14), %rsi
jne 0x2c771
leaq 0x476cb(%rip), %rdi     # 0x73e2e
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq %rdi, %rbx
leaq 0x476b7(%rip), %rdi     # 0x73e32
xorl %eax, %eax
callq 0x12110
movl (%rbx), %eax
shlq $0x4, %rax
movl 0x8(%rax,%r14), %eax
cmpq $0x15, %rax
ja 0x2c9a3
leaq 0x473a2(%rip), %rcx     # 0x73b40
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%rbx), %rsi
leaq 0x47727(%rip), %rdi     # 0x73ed9
jmp 0x2c763
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x47710(%rip), %rdi     # 0x73ed3
jmp 0x2c93d
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x4767d(%rip), %rdi     # 0x73e54
jmp 0x2c93d
movq 0x8(%rbx), %rsi
movl 0x10(%rbx), %edx
leaq 0x4768b(%rip), %rdi     # 0x73e75
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 0x47665(%rip), %rdi     # 0x73e6f
jmp 0x2c880
movq 0x8(%rbx), %rsi
movsd 0x10(%rbx), %xmm0
leaq 0x47669(%rip), %rdi     # 0x73e85
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 0x47690(%rip), %rdi     # 0x73ecd
jmp 0x2c973
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x475f9(%rip), %rdi     # 0x73e4e
jmp 0x2c973
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x4767b(%rip), %rdi     # 0x73ee4
jmp 0x2c93d
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movl 0x18(%rbx), %ecx
leaq 0x475df(%rip), %rdi     # 0x73e5f
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 0x4760a(%rip), %rdi     # 0x73eab
jmp 0x2c973
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
movq 0x20(%rbx), %r8
leaq 0x4757a(%rip), %rdi     # 0x73e37
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 0x4755f(%rip), %rdi     # 0x73e3d
jmp 0x2c973
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movsd 0x18(%rbx), %xmm0
leaq 0x47588(%rip), %rdi     # 0x73e7f
jmp 0x2c995
movl 0x8(%rbx), %esi
leaq 0x47576(%rip), %rdi     # 0x73e7c
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movsd 0x8(%rbx), %xmm0
leaq 0x4756c(%rip), %rdi     # 0x73e8c
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12110
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
leaq 0x47506(%rip), %rdi     # 0x73e43
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 0x47532(%rip), %rdi     # 0x73e90
jmp 0x2c973
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x18(%rbx), %rcx
leaq 0x4756b(%rip), %rdi     # 0x73ede
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 0x47527(%rip), %rdi     # 0x73ebc
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 0x474a4(%rip), %rdi     # 0x73e5a
jmp 0x2c763