LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_file.c
// Function: subtilis_parser_put_hash
void subtilis_parser_put_hash(subtilis_parser_t *p, subtilis_token_t *t,
			      subtilis_error_t *err)
{
	subtilis_ir_operand_t handle;
	subtilis_ir_operand_t data;
	subtilis_ir_operand_t skip_label;
	subtilis_ir_operand_t array_size;
	subtilis_ir_operand_t put_label;
	bool check_dims;
	bool arg1_tmp;
	size_t val_reg;
	size_t el_size;
	bool cow = false;

	skip_label.label = subtilis_ir_section_new_label(p->current);
	put_label.label = subtilis_ir_section_new_label(p->current);

	check_dims =
	    prv_block_operation_prep(p, t, &handle, &array_size, &val_reg, &cow,
				     &arg1_tmp, &el_size, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	if (check_dims) {
		subtilis_ir_section_add_instr_reg(
		    p->current, SUBTILIS_OP_INSTR_JMPC, array_size, put_label,
		    skip_label, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;

		subtilis_ir_section_add_label(p->current, put_label.label, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

	data.reg = subtilis_reference_get_data(p, val_reg, 0, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_ir_section_add_instr_reg(p->current,
					  SUBTILIS_OP_INSTR_BLOCK_PUT, handle,
					  data, array_size, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_exp_handle_errors(p, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	if (check_dims)
		subtilis_ir_section_add_label(p->current, skip_label.label,
					      err);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdx, %rbx
movq %rsi, %r13
movq %rdi, %r14
movq 0x48(%rdi), %rdi
callq 0x2b774
movq %rax, %r15
movq 0x48(%r14), %rdi
callq 0x2b774
movq %rax, %r12
subq $0x8, %rsp
leaq 0x28(%rsp), %rax
leaq 0xf(%rsp), %r10
leaq 0x20(%rsp), %rdx
leaq 0x10(%rsp), %rcx
leaq 0x18(%rsp), %r8
leaq 0xe(%rsp), %r9
movq %r14, %rdi
movq %r13, %rsi
pushq %rbx
pushq %rax
pushq %r10
callq 0x20541
addq $0x20, %rsp
cmpl $0x0, (%rbx)
je 0x20767
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl %eax, %ebp
testb %al, %al
je 0x207a0
movq 0x48(%r14), %rdi
movq 0x8(%rsp), %rdx
pushq $0x43
popq %rsi
movq %r12, %rcx
movq %r15, %r8
movq %rbx, %r9
callq 0x2a8c1
cmpl $0x0, (%rbx)
jne 0x20758
movq 0x48(%r14), %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x2b781
cmpl $0x0, (%rbx)
jne 0x20758
movq 0x10(%rsp), %rsi
movq %r14, %rdi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x4a690
cmpl $0x0, (%rbx)
jne 0x20758
movq 0x48(%r14), %rdi
movq 0x18(%rsp), %rdx
movq 0x8(%rsp), %r8
movl $0x92, %esi
movq %rax, %rcx
movq %rbx, %r9
callq 0x2a8c1
cmpl $0x0, (%rbx)
jne 0x20758
movq %r14, %rdi
movq %rbx, %rsi
callq 0x29c49
cmpl $0x0, (%rbx)
sete %al
andb %bpl, %al
cmpb $0x1, %al
jne 0x20758
movq 0x48(%r14), %rdi
movq %r15, %rsi
movq %rbx, %rdx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2b781
nop
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_loops.c
// Function: prv_numeric_expression
static subtilis_exp_t *prv_numeric_expression(subtilis_parser_t *p,
					      subtilis_token_t *t,
					      subtilis_error_t *err)
{
	subtilis_exp_t *e;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;
	e = subtilis_parser_priority7(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;
	if (!subtilis_type_if_is_numeric(&e->type)) {
		subtilis_exp_delete(e);
		subtilis_error_set_numeric_exp_expected(err, p->l->stream->name,
							p->l->line);
		return NULL;
	}

	return e;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r14
movq (%rdi), %rdi
callq 0x12e0e
cmpl $0x0, (%rbx)
jne 0x21c2e
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x1dccf
cmpl $0x0, (%rbx)
jne 0x21c2e
movq %rax, %r15
movq %rax, %rdi
callq 0x35655
testb %al, %al
jne 0x21c31
movq %r15, %rdi
callq 0x29d88
movq (%r14), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0x4bd29(%rip), %r8      # 0x6d948
pushq $0x44
popq %rsi
pushq $0x2e
popq %r9
movq %rbx, %rdi
callq 0x142c0
xorl %r15d, %r15d
movq %r15, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_loops.c
// Function: subtilis_parser_while
void subtilis_parser_while(subtilis_parser_t *p, subtilis_token_t *t,
			   subtilis_error_t *err)
{
	subtilis_exp_t *e = NULL;
	subtilis_ir_operand_t cond;
	subtilis_ir_operand_t start_label;
	subtilis_ir_operand_t true_label;
	subtilis_ir_operand_t false_label;

	start_label.reg = subtilis_ir_section_new_label(p->current);
	subtilis_ir_section_add_label(p->current, start_label.reg, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	e = subtilis_parser_conditional_exp(p, t, &cond, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	true_label.reg = subtilis_ir_section_new_label(p->current);
	false_label.reg = subtilis_ir_section_new_label(p->current);

	subtilis_ir_section_add_instr_reg(p->current, SUBTILIS_OP_INSTR_JMPC,
					  cond, true_label, false_label, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_ir_section_add_label(p->current, true_label.reg, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_parser_handle_escape(p, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_parser_compound(p, t, SUBTILIS_KEYWORD_ENDWHILE, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_ir_section_add_instr_no_reg(p->current, SUBTILIS_OP_INSTR_JMP,
					     start_label, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_ir_section_add_label(p->current, false_label.reg, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

cleanup:
	subtilis_exp_delete(e);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
movq 0x48(%rdi), %rdi
callq 0x2b774
movq %rax, %r13
movq 0x48(%r12), %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0x2b781
cmpl $0x0, (%r14)
je 0x21c7f
xorl %ebx, %ebx
movq %rbx, %rdi
callq 0x29d88
jmp 0x21c98
leaq 0x10(%rsp), %rdx
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rcx
callq 0x1d794
cmpl $0x0, (%r14)
je 0x21ca7
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x48(%r12), %rdi
callq 0x2b774
movq %rax, %rbp
movq 0x48(%r12), %rdi
callq 0x2b774
movq 0x48(%r12), %rdi
movq 0x10(%rsp), %rdx
pushq $0x43
popq %rsi
movq %rbp, 0x8(%rsp)
movq %rbp, %rcx
movq %rax, %rbp
movq %rax, %r8
movq %r14, %r9
callq 0x2a8c1
cmpl $0x0, (%r14)
jne 0x21c75
movq %rbp, (%rsp)
movq 0x48(%r12), %rdi
movq 0x8(%rsp), %rsi
movq %r14, %rdx
callq 0x2b781
cmpl $0x0, (%r14)
jne 0x21c75
movq %r12, %rdi
movq %r14, %rsi
callq 0x235e3
cmpl $0x0, (%r14)
jne 0x21c75
pushq $0x2b
popq %rdx
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rcx
callq 0x1d789
cmpl $0x0, (%r14)
jne 0x21c75
movq 0x48(%r12), %rdi
pushq $0x45
popq %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x2a997
cmpl $0x0, (%r14)
jne 0x21c75
movq 0x48(%r12), %rdi
movq (%rsp), %rsi
movq %r14, %rdx
callq 0x2b781
cmpl $0x0, (%r14)
jne 0x21c75
movq (%r12), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x12e0e
jmp 0x21c75
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_loops.c
// Function: subtilis_parser_repeat
void subtilis_parser_repeat(subtilis_parser_t *p, subtilis_token_t *t,
			    subtilis_error_t *err)
{
	subtilis_exp_t *e = NULL;
	subtilis_ir_operand_t cond;
	subtilis_ir_operand_t start_label;
	subtilis_ir_operand_t true_label;

	start_label.reg = subtilis_ir_section_new_label(p->current);
	subtilis_ir_section_add_label(p->current, start_label.reg, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_parser_handle_escape(p, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_parser_compound(p, t, SUBTILIS_KEYWORD_UNTIL, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	e = subtilis_parser_conditional_exp(p, t, &cond, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	true_label.reg = subtilis_ir_section_new_label(p->current);

	subtilis_ir_section_add_instr_reg(p->current, SUBTILIS_OP_INSTR_JMPC,
					  cond, true_label, start_label, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_ir_section_add_label(p->current, true_label.reg, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

cleanup:
	subtilis_exp_delete(e);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdx, %rbx
movq %rsi, %r12
movq %rdi, %r14
movq 0x48(%rdi), %rdi
callq 0x2b774
movq %rax, %r15
movq 0x48(%r14), %rdi
movq %rax, %rsi
movq %rbx, %rdx
callq 0x2b781
cmpl $0x0, (%rbx)
jne 0x21df7
movq (%r14), %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x12e0e
cmpl $0x0, (%rbx)
jne 0x21df7
movq %r14, %rdi
movq %rbx, %rsi
callq 0x235e3
cmpl $0x0, (%rbx)
jne 0x21df7
movq %r14, %rdi
movq %r12, %rsi
movl $0x8b, %edx
movq %rbx, %rcx
callq 0x1d789
cmpl $0x0, (%rbx)
je 0x21e10
xorl %r12d, %r12d
movq %r12, %rdi
callq 0x29d88
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
leaq 0x8(%rsp), %rdx
movq %r14, %rdi
movq %r12, %rsi
movq %rbx, %rcx
callq 0x1d794
cmpl $0x0, (%rbx)
jne 0x21e02
movq %rax, %r12
movq 0x48(%r14), %rdi
callq 0x2b774
movq %rax, %r13
movq 0x48(%r14), %rdi
movq 0x8(%rsp), %rdx
pushq $0x43
popq %rsi
movq %rax, %rcx
movq %r15, %r8
movq %rbx, %r9
callq 0x2a8c1
cmpl $0x0, (%rbx)
jne 0x21dfa
movq 0x48(%r14), %rdi
movq %r13, %rsi
movq %rbx, %rdx
callq 0x2b781
jmp 0x21dfa
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_loops.c
// Function: prv_for_loop_start
static void prv_for_loop_start(subtilis_parser_t *p, subtilis_token_t *t,
			       subtilis_ir_operand_t *start_label,
			       subtilis_ir_operand_t *true_label,
			       subtilis_error_t *err)
{
	start_label->reg = subtilis_ir_section_new_label(p->current);
	subtilis_ir_section_add_label(p->current, start_label->reg, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_parser_handle_escape(p, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_parser_compound_at_sym_level(p, t, SUBTILIS_KEYWORD_NEXT, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	true_label->reg = subtilis_ir_section_new_label(p->current);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %r8, %r15
movq %rcx, %rbx
movq %rdx, %r13
movq %rsi, %r12
movq %rdi, %r14
movq 0x48(%rdi), %rdi
callq 0x2b774
movq %rax, (%r13)
movq 0x48(%r14), %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0x2b781
cmpl $0x0, (%r15)
jne 0x22c92
movq %r14, %rdi
movq %r15, %rsi
callq 0x235e3
cmpl $0x0, (%r15)
jne 0x22c92
pushq $0x51
popq %rdx
movq %r14, %rdi
movq %r12, %rsi
movq %r15, %rcx
callq 0x1d5dd
cmpl $0x0, (%r15)
jne 0x22c92
movq 0x48(%r14), %rdi
callq 0x2b774
movq %rax, (%rbx)
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_loops.c
// Function: prv_increment_var
static subtilis_exp_t *prv_increment_var(subtilis_parser_t *p,
					 subtilis_exp_t *inc,
					 const subtilis_for_context_t *for_ctx,
					 subtilis_error_t *err)
{
	subtilis_exp_t *var = NULL;
	subtilis_exp_t *e = NULL;

	if (for_ctx->is_reg)
		var = subtilis_exp_new_var(&for_ctx->type, for_ctx->loc, err);
	else
		var = subtilis_type_if_load_from_mem(
		    p, &for_ctx->type, for_ctx->reg, for_ctx->loc, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	e = subtilis_exp_add(p, var, inc, err);
	var = NULL;
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	e = subtilis_type_if_coerce_type(p, e, &for_ctx->type, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	if (for_ctx->is_reg) {
		subtilis_type_if_assign_to_reg(p, for_ctx->loc, e, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
		var = subtilis_exp_new_var(&for_ctx->type, for_ctx->loc, err);
	} else {
		var = subtilis_type_if_dup(e, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
		subtilis_type_if_assign_to_mem(p, for_ctx->reg, for_ctx->loc, e,
					       err);
	}

	return var;

cleanup:

	subtilis_exp_delete(var);
	subtilis_exp_delete(inc);

	return NULL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %r14
movq %rdx, %r15
movq %rsi, %rbx
movq %rdi, %r12
leaq 0x18(%rdx), %r13
cmpb $0x1, (%rdx)
jne 0x22ccd
movl 0x10(%r15), %esi
movq %r13, %rdi
movq %r14, %rdx
callq 0x2a226
jmp 0x22ce3
movq 0x8(%r15), %rdx
movq 0x10(%r15), %rcx
movq %r12, %rdi
movq %r13, %rsi
movq %r14, %r8
callq 0x343a4
movq %rax, %rbp
cmpl $0x0, (%r14)
jne 0x22d1c
movq %r12, %rdi
movq %rbp, %rsi
movq %rbx, %rdx
movq %r14, %rcx
callq 0x2a5db
cmpl $0x0, (%r14)
jne 0x22d1a
movq %r12, %rdi
movq %rax, %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x35977
cmpl $0x0, (%r14)
je 0x22d40
xorl %ebp, %ebp
movq %rbp, %rdi
callq 0x29d88
movq %rbx, %rdi
callq 0x29d88
xorl %ebp, %ebp
movq %rbp, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
cmpb $0x1, (%r15)
jne 0x22d7b
movq 0x10(%r15), %rsi
movq %r12, %rdi
movq %rax, %rdx
movq %r14, %rcx
callq 0x342ce
cmpl $0x0, (%r14)
jne 0x22d1a
movl 0x10(%r15), %esi
movq %r13, %rdi
movq %r14, %rdx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2a226
movq %rax, %rdi
movq %r14, %rsi
movq %rax, %r13
callq 0x341c4
movq %rax, %rbp
cmpl $0x0, (%r14)
jne 0x22d1c
movq 0x8(%r15), %rsi
movq 0x10(%r15), %rdx
movq %r12, %rdi
movq %r13, %rcx
movq %r14, %r8
callq 0x34300
jmp 0x22d2e
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_loops.c
// Function: prv_init_tilde_var
static void prv_init_tilde_var(subtilis_for_context_t *for_ctx,
			       const subtilis_type_t *type,
			       subtilis_error_t *err)
{
	subtilis_type_copy(&for_ctx->type, type, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	for_ctx->is_reg = false;
	for_ctx->reg = SIZE_MAX;
	for_ctx->loc = SIZE_MAX;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rdi, %rbx
addq $0x18, %rdi
callq 0x2de8a
cmpl $0x0, (%r14)
jne 0x22f7f
movb $0x0, (%rbx)
pcmpeqd %xmm0, %xmm0
movdqu %xmm0, 0x8(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_loops.c
// Function: prv_assign_range_var
static void prv_assign_range_var(subtilis_parser_t *p,
				 subtilis_ir_operand_t ptr,
				 const subtilis_range_var_t *var,
				 bool new_locals, subtilis_error_t *err)
{
	subtilis_exp_t *val;

	if (var->for_ctx.type.type == SUBTILIS_TYPE_REC) {
		if (new_locals)
			/*
			 * Special handling for RECs.  We just memcpy.
			 */

			subtilis_rec_type_tmp_copy(
			    p, &var->for_ctx.type, var->for_ctx.reg,
			    var->for_ctx.loc, ptr.reg, err);
		else
			subtilis_rec_type_copy(
			    p, &var->for_ctx.type, var->for_ctx.reg,
			    var->for_ctx.loc, ptr.reg, false, err);
		return;
	}

	val = subtilis_type_if_load_from_mem(p, &var->for_ctx.type, ptr.reg, 0,
					     err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	if (!subtilis_type_if_is_numeric(&var->for_ctx.type) &&
	    var->for_ctx.type.type != SUBTILIS_TYPE_FN) {
		/*
		 * If we have a reference type and it's a new local, there's
		 * no need to go through all the reference counting.  We know
		 * that the array has references to every element we're
		 * iterating through, so this saves some code.
		 */

		if (!new_locals)
			subtilis_type_if_assign_ref(p, &var->type,
						    var->for_ctx.reg,
						    var->for_ctx.loc, val, err);
		else
			subtilis_type_if_assign_ref_no_rc(
			    p, &var->type, var->for_ctx.reg, var->for_ctx.loc,
			    val, err);

	} else if (var->for_ctx.is_reg) {
		subtilis_type_if_assign_to_reg(p, var->for_ctx.loc, val, err);
	} else {
		subtilis_type_if_assign_to_mem(p, var->for_ctx.reg,
					       var->for_ctx.loc, val, err);
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %rbx
movl %ecx, %ebp
movq %rdx, %r12
movq %rsi, %r8
movq %rdi, %r14
leaq 0x168(%rdx), %r13
cmpl $0x16, 0x168(%rdx)
jne 0x23146
movq 0x158(%r12), %rdx
movq 0x160(%r12), %rcx
testb %bpl, %bpl
je 0x231a3
movq %r14, %rdi
movq %r13, %rsi
movq %rbx, %r9
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x43870
movq %r14, %rdi
movq %r13, %rsi
movq %r8, %rdx
xorl %ecx, %ecx
movq %rbx, %r8
callq 0x343a4
cmpl $0x0, (%rbx)
jne 0x231b5
movq %rax, %r15
movq %r13, %rdi
callq 0x35655
testb %al, %al
jne 0x23174
cmpl $0x9, (%r13)
jne 0x231f0
cmpb $0x1, 0x150(%r12)
jne 0x231c4
movq 0x160(%r12), %rsi
movq %r14, %rdi
movq %r15, %rdx
movq %rbx, %rcx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x342ce
movq %rbx, (%rsp)
movq %r14, %rdi
movq %r13, %rsi
xorl %r9d, %r9d
callq 0x4376f
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x158(%r12), %rsi
movq 0x160(%r12), %rdx
movq %r14, %rdi
movq %r15, %rcx
movq %rbx, %r8
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x34300
leaq 0x8(%r12), %rsi
movq 0x158(%r12), %rdx
movq 0x160(%r12), %rcx
movq %r14, %rdi
movq %r15, %r8
movq %rbx, %r9
addq $0x8, %rsp
testb %bpl, %bpl
je 0x23226
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x33f7d
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x33f4e
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_math.c
// Function: subtilis_parser_rad
subtilis_exp_t *subtilis_parser_rad(subtilis_parser_t *p, subtilis_token_t *t,
				    subtilis_error_t *err)
{
	subtilis_exp_t *e = NULL;
	subtilis_exp_t *e2 = NULL;
	subtilis_exp_t *e3 = NULL;
	const double radian = ((22 / 7.0) / 180);

	e = subtilis_parser_real_bracketed_exp(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	if (e->type.type == SUBTILIS_TYPE_CONST_REAL) {
		e2 = subtilis_exp_new_real(e->exp.ir_op.real * radian, err);
	} else {
		e3 = subtilis_exp_new_real(radian, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
		e2 = subtilis_type_if_mul(p, e, e3, err);
		e = NULL;
	}
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_exp_delete(e);

	return e2;

cleanup:

	subtilis_exp_delete(e);
	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %r14
movq %rdi, %r15
callq 0x1e404
cmpl $0x0, (%r14)
je 0x23253
xorl %r15d, %r15d
jmp 0x232b6
movq %rax, %rbx
cmpl $0x0, (%rax)
je 0x23276
movsd 0x4a705(%rip), %xmm0    # 0x6d968
movq %r14, %rdi
callq 0x2a3b4
cmpl $0x0, (%r14)
je 0x23290
xorl %r15d, %r15d
jmp 0x232ae
movsd 0x148(%rbx), %xmm0
mulsd 0x4a6e2(%rip), %xmm0    # 0x6d968
movq %r14, %rdi
callq 0x2a3b4
jmp 0x232a3
movq %r15, %rdi
movq %rbx, %rsi
movq %rax, %rdx
movq %r14, %rcx
callq 0x34bfb
xorl %ebx, %ebx
xorl %r15d, %r15d
cmpl $0x0, (%r14)
cmoveq %rax, %r15
movq %rbx, %rdi
callq 0x29d88
movq %r15, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_math.c
// Function: subtilis_parser_pi
subtilis_exp_t *subtilis_parser_pi(subtilis_parser_t *p, subtilis_token_t *t,
				   subtilis_error_t *err)
{
	subtilis_exp_t *e;

	e = subtilis_exp_new_real(22 / 7.0, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK) {
		subtilis_exp_delete(e);
		return NULL;
	}

	return e;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
movsd 0x4a698(%rip), %xmm0    # 0x6d970
movq %rdx, %rdi
callq 0x2a3b4
cmpl $0x0, (%r14)
jne 0x23306
movq %rax, %rbx
movq (%r12), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x12e0e
cmpl $0x0, (%r14)
je 0x23308
movq %rbx, %rdi
callq 0x29d88
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_math.c
// Function: subtilis_parser_int
subtilis_exp_t *subtilis_parser_int(subtilis_parser_t *p, subtilis_token_t *t,
				    subtilis_error_t *err)
{
	size_t reg;
	subtilis_exp_t *e = NULL;
	subtilis_exp_t *e2 = NULL;

	e = subtilis_parser_real_bracketed_exp(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	if (e->type.type == SUBTILIS_TYPE_CONST_REAL) {
		e2 = subtilis_exp_new_int32((int32_t)floor(e->exp.ir_op.real),
					    err);
	} else {
		reg = subtilis_ir_section_add_instr2(
		    p->current, SUBTILIS_OP_INSTR_MOV_FPRD_I32, e->exp.ir_op,
		    err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;

		e2 = subtilis_exp_new_int32_var(reg, err);
	}
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_exp_delete(e);

	return e2;

cleanup:

	subtilis_exp_delete(e);
	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %r14
movq %rdi, %r15
callq 0x1e404
cmpl $0x0, (%r14)
je 0x23332
xorl %r15d, %r15d
jmp 0x2338f
movq %rax, %rbx
cmpl $0x0, (%rax)
je 0x23362
movq 0x48(%r15), %rdi
movq 0x148(%rbx), %rdx
pushq $0x53
popq %rsi
movq %r14, %rcx
callq 0x2a981
cmpl $0x0, (%r14)
jne 0x23384
movl %eax, %edi
movq %r14, %rsi
callq 0x2a336
jmp 0x2337b
movsd 0x148(%rbx), %xmm0
callq 0x12260
cvttsd2si %xmm0, %edi
movq %r14, %rsi
callq 0x2a369
movq %rax, %r15
cmpl $0x0, (%r14)
je 0x23387
xorl %r15d, %r15d
movq %rbx, %rdi
callq 0x29d88
movq %r15, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_math.c
// Function: prv_real_unary_fn
static subtilis_exp_t *prv_real_unary_fn(subtilis_parser_t *p,
					 subtilis_token_t *t,
					 subtilis_op_instr_type_t itype,
					 double (*const_fn)(double),
					 subtilis_error_t *err)
{
	size_t reg;
	subtilis_exp_t *e = NULL;
	subtilis_exp_t *e2 = NULL;

	e = subtilis_parser_real_bracketed_exp(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	if (e->type.type == SUBTILIS_TYPE_CONST_REAL) {
		e2 = subtilis_exp_new_real(const_fn(e->exp.ir_op.real), err);
	} else {
		reg = subtilis_ir_section_add_instr2(p->current, itype,
						     e->exp.ir_op, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;

		e2 = subtilis_exp_new_real_var(reg, err);
	}
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_exp_delete(e);

	return e2;

cleanup:

	subtilis_exp_delete(e);
	return NULL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %r8, %rbx
movq %rcx, %r15
movl %edx, %ebp
movq %rdi, %r12
movq %r8, %rdx
callq 0x1e404
cmpl $0x0, (%rbx)
je 0x23406
xorl %r15d, %r15d
jmp 0x2345c
movq %rax, %r14
cmpl $0x0, (%rax)
je 0x23435
movq 0x48(%r12), %rdi
movq 0x148(%r14), %rdx
movl %ebp, %esi
movq %rbx, %rcx
callq 0x2a981
cmpl $0x0, (%rbx)
jne 0x23451
movl %eax, %edi
movq %rbx, %rsi
callq 0x2a358
jmp 0x23449
movsd 0x148(%r14), %xmm0
callq *%r15
movq %rbx, %rdi
callq 0x2a3b4
movq %rax, %r15
cmpl $0x0, (%rbx)
je 0x23454
xorl %r15d, %r15d
movq %r14, %rdi
callq 0x29d88
movq %r15, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_math.c
// Function: subtilis_parser_log
subtilis_exp_t *subtilis_parser_log(subtilis_parser_t *p, subtilis_token_t *t,
				    subtilis_op_instr_type_t itype,
				    double (*log_fn)(double),
				    subtilis_error_t *err)
{
	subtilis_exp_t *e;

	e = prv_real_unary_fn(p, t, itype, log_fn, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;
	subtilis_exp_handle_errors(p, err);
	if (err->type != SUBTILIS_ERROR_OK) {
		subtilis_exp_delete(e);
		return NULL;
	}
	return e;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %r8, %r14
movq %rdi, %r15
callq 0x233e1
cmpl $0x0, (%r14)
jne 0x234f4
movq %rax, %rbx
movq %r15, %rdi
movq %r14, %rsi
callq 0x29c49
cmpl $0x0, (%r14)
je 0x234f6
movq %rbx, %rdi
callq 0x29d88
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_error.c
// Function: subtilis_parser_get_err
subtilis_exp_t *subtilis_parser_get_err(subtilis_parser_t *p,
					subtilis_token_t *t,
					subtilis_error_t *err)
{
	subtilis_exp_t *e;

	e = subtilis_var_lookup_var(p, subtilis_err_hidden_var, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK) {
		subtilis_exp_delete(e);
		return NULL;
	}

	return e;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
leaq 0x82bdc(%rip), %rax     # 0xa6180
movq (%rax), %rsi
callq 0x33cb3
cmpl $0x0, (%r14)
jne 0x235d2
movq %rax, %rbx
movq (%r12), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x12e0e
cmpl $0x0, (%r14)
je 0x235d4
movq %rbx, %rdi
callq 0x29d88
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_error.c
// Function: subtilis_parser_handle_escape
void subtilis_parser_handle_escape(subtilis_parser_t *p, subtilis_error_t *err)
{
	/* Let's not test for escape in an error handler. */

	if (!p->settings.handle_escapes || p->current->in_error_handler)
		return;

	subtilis_ir_section_add_instr_no_arg(p->current,
					     SUBTILIS_OP_INSTR_TESTESC, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_exp_handle_errors(p, err);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
cmpb $0x1, 0xb8(%rdi)
jne 0x23610
movq %rdi, %r14
movq 0x48(%rdi), %rdi
cmpb $0x0, 0x60(%rdi)
jne 0x23610
movq %rsi, %rbx
pushq $0x75
popq %rsi
movq %rbx, %rdx
callq 0x2a9af
cmpl $0x0, (%rbx)
je 0x23618
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x29c49
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_error.c
// Function: subtilis_parser_error
void subtilis_parser_error(subtilis_parser_t *p, subtilis_token_t *t,
			   subtilis_error_t *err)
{
	subtilis_exp_t *e;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	e = subtilis_parser_priority7(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	e = subtilis_type_if_to_int(p, e, err);
	if (err->type != SUBTILIS_ERROR_OK) {
		subtilis_exp_delete(e);
		return;
	}

	subtilis_exp_generate_error(p, e, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	p->current->endproc = true;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
movq (%rdi), %rdi
callq 0x12e0e
cmpl $0x0, (%r14)
jne 0x23848
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x1dccf
cmpl $0x0, (%r14)
je 0x2384e
popq %rbx
popq %r14
popq %r15
retq
movq %rbx, %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0x347d5
cmpl $0x0, (%r14)
je 0x2386f
movq %rax, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x29d88
movq %rbx, %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0x2a5f4
cmpl $0x0, (%r14)
jne 0x23848
movq 0x48(%rbx), %rax
movb $0x1, 0x88(%rax)
jmp 0x23848
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_error.c
// Function: subtilis_parser_try
void subtilis_parser_try(subtilis_parser_t *p, subtilis_token_t *t,
			 subtilis_error_t *err)
{
	subtilis_ir_operand_t handler_label;

	handler_label.label = subtilis_ir_section_new_label(p->current);

	p->level++;
	p->current->try_depth++;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	p->current->handler_list = subtilis_handler_list_update(
	    p->current->handler_list, p->level, handler_label.label, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_parser_compound_at_level(p, t, SUBTILIS_KEYWORD_ENDTRY, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_ir_section_add_label(p->current, handler_label.label, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_var_set_eflag(p, false, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	p->current->try_depth--;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %rbx
movq 0x48(%rdi), %rdi
callq 0x2b774
movq %rax, %r15
incq 0x78(%rbx)
movq 0x48(%rbx), %rax
incq 0x68(%rax)
movq (%rbx), %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x12e0e
cmpl $0x0, (%r14)
jne 0x23adb
movq 0x48(%rbx), %rax
movq 0x78(%rbx), %rsi
movq 0x78(%rax), %rdi
movq %r15, %rdx
movq %r14, %rcx
callq 0x2a6b8
movq 0x48(%rbx), %rcx
movq %rax, 0x78(%rcx)
cmpl $0x0, (%r14)
jne 0x23adb
pushq $0x2a
popq %rdx
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rcx
callq 0x1d6b9
cmpl $0x0, (%r14)
jne 0x23adb
movq (%rbx), %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x12e0e
cmpl $0x0, (%r14)
jne 0x23adb
movq 0x48(%rbx), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x2b781
cmpl $0x0, (%r14)
jne 0x23adb
movq %rbx, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x33da7
cmpl $0x0, (%r14)
jne 0x23adb
movq 0x48(%rbx), %rax
decq 0x68(%rax)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_error.c
// Function: subtilis_parser_try_one
void subtilis_parser_try_one(subtilis_parser_t *p, subtilis_token_t *t,
			     subtilis_error_t *err)
{
	subtilis_ir_operand_t handler_label;

	handler_label.label = subtilis_ir_section_new_label(p->current);

	p->level++;
	p->current->try_depth++;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	p->current->handler_list = subtilis_handler_list_update(
	    p->current->handler_list, p->level, handler_label.label, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_parser_compound_statement_at_level(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	p->current->endproc = false;

	subtilis_ir_section_add_label(p->current, handler_label.label, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_var_set_eflag(p, false, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	p->current->try_depth--;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %rbx
movq 0x48(%rdi), %rdi
callq 0x2b774
movq %rax, %r15
incq 0x78(%rbx)
movq 0x48(%rbx), %rax
incq 0x68(%rax)
movq (%rbx), %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x12e0e
cmpl $0x0, (%r14)
jne 0x23d26
movq 0x48(%rbx), %rax
movq 0x78(%rbx), %rsi
movq 0x78(%rax), %rdi
movq %r15, %rdx
movq %r14, %rcx
callq 0x2a6b8
movq 0x48(%rbx), %rcx
movq %rax, 0x78(%rcx)
cmpl $0x0, (%r14)
jne 0x23d26
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0x1d704
cmpl $0x0, (%r14)
jne 0x23d26
movq 0x48(%rbx), %rdi
movb $0x0, 0x88(%rdi)
movq %r15, %rsi
movq %r14, %rdx
callq 0x2b781
cmpl $0x0, (%r14)
jne 0x23d26
movq %rbx, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x33da7
cmpl $0x0, (%r14)
jne 0x23d26
movq 0x48(%rbx), %rax
decq 0x68(%rax)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nop
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_mode
void subtilis_parser_mode(subtilis_parser_t *p, subtilis_token_t *t,
			  subtilis_error_t *err)
{
	subtilis_exp_t *e;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	e = subtilis_parser_int_var_expression(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_ir_section_add_instr_no_reg(
	    p->current, SUBTILIS_OP_INSTR_MODE_I32, e->exp.ir_op, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	if (!p->settings.ignore_graphics_errors)
		subtilis_exp_handle_errors(p, err);

cleanup:

	subtilis_exp_delete(e);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r14
movq (%rdi), %rdi
callq 0x12e0e
cmpl $0x0, (%rbx)
jne 0x23db7
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x1e00b
cmpl $0x0, (%rbx)
je 0x23dbd
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %r15
movq 0x48(%r14), %rdi
movq 0x148(%rax), %rdx
pushq $0x55
popq %rsi
movq %rbx, %rcx
callq 0x2a997
cmpl $0x0, (%rbx)
jne 0x23df0
cmpb $0x0, 0xb9(%r14)
jne 0x23df0
movq %r14, %rdi
movq %rbx, %rsi
callq 0x29c49
movq %r15, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x29d88
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_plot
void subtilis_parser_plot(subtilis_parser_t *p, subtilis_token_t *t,
			  subtilis_error_t *err)
{
	size_t i;
	subtilis_exp_t *e[3];

	memset(&e, 0, sizeof(e));

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_parser_statement_int_args(p, t, e, 3, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_ir_section_add_instr_reg(p->current, SUBTILIS_OP_INSTR_PLOT,
					  e[0]->exp.ir_op, e[1]->exp.ir_op,
					  e[2]->exp.ir_op, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	if (!p->settings.ignore_graphics_errors)
		subtilis_exp_handle_errors(p, err);

cleanup:
	for (i = 0; i < 3; i++)
		subtilis_exp_delete(e[i]);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x20, %rsp
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r14
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
andq $0x0, 0x10(%rsp)
movq (%rdi), %rdi
callq 0x12e0e
cmpl $0x0, (%rbx)
je 0x23e33
addq $0x20, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rsp, %rdx
pushq $0x3
popq %rcx
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %r8
callq 0x1e057
cmpl $0x0, (%rbx)
jne 0x23e98
movq 0x48(%r14), %rdi
movq (%rsp), %rax
movq 0x8(%rsp), %rcx
movq 0x10(%rsp), %rsi
movq 0x148(%rax), %rdx
movq 0x148(%rcx), %rcx
movq 0x148(%rsi), %r8
pushq $0x56
popq %rsi
movq %rbx, %r9
callq 0x2a8c1
cmpl $0x0, (%rbx)
jne 0x23e98
cmpb $0x0, 0xb9(%r14)
jne 0x23e98
movq %r14, %rdi
movq %rbx, %rsi
callq 0x29c49
xorl %ebx, %ebx
cmpq $0x3, %rbx
je 0x23e29
movq (%rsp,%rbx,8), %rdi
callq 0x29d88
incq %rbx
jmp 0x23e9a
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_wait
void subtilis_parser_wait(subtilis_parser_t *p, subtilis_token_t *t,
			  subtilis_error_t *err)
{
	subtilis_ir_section_add_instr_no_arg(p->current, SUBTILIS_OP_INSTR_WAIT,
					     err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	if (!p->settings.ignore_graphics_errors) {
		subtilis_exp_handle_errors(p, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

	subtilis_lexer_get(p->l, t, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x48(%rdi), %rdi
pushq $0x5f
popq %rsi
callq 0x2a9af
cmpl $0x0, (%rbx)
je 0x23ed3
popq %rbx
popq %r14
popq %r15
retq
cmpb $0x0, 0xb9(%r15)
jne 0x23eed
movq %r15, %rdi
movq %rbx, %rsi
callq 0x29c49
cmpl $0x0, (%rbx)
jne 0x23ecd
movq (%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %r15
jmp 0x12e0e
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: prv_move_draw
static void prv_move_draw(subtilis_parser_t *p, subtilis_token_t *t,
			  int32_t plot_code, subtilis_error_t *err)
{
	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	if ((t->type == SUBTILIS_TOKEN_KEYWORD) &&
	    (t->tok.keyword.type == SUBTILIS_KEYWORD_BY)) {
		plot_code -= 4;
		subtilis_lexer_get(p->l, t, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

	prv_simple_plot(p, t, plot_code, err);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rcx, %rbx
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %r15
movq (%rdi), %rdi
movq %rcx, %rdx
callq 0x12e0e
cmpl $0x0, (%rbx)
je 0x23f35
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x1, (%r14)
jne 0x23f58
cmpl $0x10, 0x8(%r14)
jne 0x23f58
movq (%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x12e0e
cmpl $0x0, (%rbx)
jne 0x23f2a
addl $-0x4, %ebp
movq %r15, %rdi
movq %r14, %rsi
movl %ebp, %edx
movq %rbx, %rcx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x23fa5
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: prv_simple_plot
static void prv_simple_plot(subtilis_parser_t *p, subtilis_token_t *t,
			    int32_t plot_code, subtilis_error_t *err)
{
	size_t i;
	subtilis_exp_t *e[3];

	memset(&e, 0, sizeof(e));

	subtilis_parser_statement_int_args(p, t, &e[1], 2, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	e[0] = subtilis_exp_new_int32(plot_code, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	e[0] = subtilis_type_if_exp_to_var(p, e[0], err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_ir_section_add_instr_reg(p->current, SUBTILIS_OP_INSTR_PLOT,
					  e[0]->exp.ir_op, e[1]->exp.ir_op,
					  e[2]->exp.ir_op, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	if (!p->settings.ignore_graphics_errors)
		subtilis_exp_handle_errors(p, err);

cleanup:
	for (i = 0; i < 3; i++)
		subtilis_exp_delete(e[i]);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x20, %rsp
movq %rcx, %rbx
movl %edx, %ebp
movq %rdi, %r14
xorps %xmm0, %xmm0
leaq 0x8(%rsp), %rdx
movaps %xmm0, -0x8(%rdx)
andq $0x0, 0x8(%rdx)
pushq $0x2
popq %rcx
movq %rbx, %r8
callq 0x1e057
cmpl $0x0, (%rbx)
je 0x23fec
xorl %ebx, %ebx
cmpq $0x3, %rbx
je 0x24016
movq (%rsp,%rbx,8), %rdi
callq 0x29d88
incq %rbx
jmp 0x23fd8
movl %ebp, %edi
movq %rbx, %rsi
callq 0x2a369
movq %rax, (%rsp)
cmpl $0x0, (%rbx)
jne 0x24016
movq %r14, %rdi
movq %rax, %rsi
movq %rbx, %rdx
callq 0x3415f
movq %rax, (%rsp)
cmpl $0x0, (%rbx)
je 0x2401f
addq $0x20, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movq 0x48(%r14), %rdi
movq 0x8(%rsp), %rcx
movq 0x10(%rsp), %rsi
movq 0x148(%rax), %rdx
movq 0x148(%rcx), %rcx
movq 0x148(%rsi), %r8
pushq $0x56
popq %rsi
movq %rbx, %r9
callq 0x2a8c1
cmpl $0x0, (%rbx)
jne 0x23fd6
cmpb $0x0, 0xb9(%r14)
jne 0x23fd6
movq %r14, %rdi
movq %rbx, %rsi
callq 0x29c49
jmp 0x23fd6
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_line
void subtilis_parser_line(subtilis_parser_t *p, subtilis_token_t *t,
			  subtilis_error_t *err)
{
	const char *tbuf;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	prv_simple_plot(p, t, 4, err);

	tbuf = subtilis_token_get_text(t);
	if (t->type != SUBTILIS_TOKEN_OPERATOR) {
		subtilis_error_set_expected(err, ",", tbuf, p->l->stream->name,
					    p->l->line);
		return;
	}

	if (strcmp(tbuf, ",")) {
		subtilis_error_set_expected(err, ",", tbuf, p->l->stream->name,
					    p->l->line);
		return;
	}

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	prv_simple_plot(p, t, 5, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r14
movq (%rdi), %rdi
callq 0x12e0e
cmpl $0x0, (%rbx)
jne 0x24112
pushq $0x4
popq %rdx
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rcx
callq 0x23fa5
movq %r15, %rdi
callq 0x12a25
cmpl $0x2, (%r15)
jne 0x240e2
cmpb $0x2c, (%rax)
jne 0x240b9
cmpb $0x0, 0x1(%rax)
je 0x24118
movq (%r14), %rcx
movq 0x30(%rcx), %r8
movl 0x38(%rcx), %r9d
leaq 0x498d9(%rip), %r10     # 0x6d9a4
leaq 0x494c0(%rip), %rdx     # 0x6d592
pushq $0x1d
popq %rsi
movq %rbx, %rdi
movq %rax, %rcx
pushq $0xcd
jmp 0x24109
movq (%r14), %rcx
movq 0x30(%rcx), %r8
movl 0x38(%rcx), %r9d
leaq 0x498b0(%rip), %r10     # 0x6d9a4
leaq 0x49497(%rip), %rdx     # 0x6d592
pushq $0x1d
popq %rsi
movq %rbx, %rdi
movq %rax, %rcx
pushq $0xc7
pushq %r10
callq 0x140cd
popq %rax
popq %rcx
popq %rbx
popq %r14
popq %r15
retq
movq (%r14), %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x12e0e
cmpl $0x0, (%rbx)
jne 0x24112
pushq $0x5
popq %rdx
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rcx
popq %rbx
popq %r14
popq %r15
jmp 0x23fa5
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_point
void subtilis_parser_point(subtilis_parser_t *p, subtilis_token_t *t,
			   subtilis_error_t *err)
{
	int32_t plot_code = 69;

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	/*
	 * TODO: Implement POINT TO, once I figure out how
	 */

	if ((t->type == SUBTILIS_TOKEN_KEYWORD) &&
	    (t->tok.keyword.type == SUBTILIS_KEYWORD_BY)) {
		plot_code -= 4;
		subtilis_lexer_get(p->l, t, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

	prv_simple_plot(p, t, plot_code, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq (%rdi), %rdi
callq 0x12e0e
cmpl $0x0, (%rbx)
je 0x24640
popq %rbx
popq %r14
popq %r15
retq
pushq $0x45
popq %rdx
cmpl $0x1, (%r14)
jne 0x24666
cmpl $0x10, 0x8(%r14)
jne 0x24666
movq (%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x12e0e
cmpl $0x0, (%rbx)
jne 0x2463a
pushq $0x41
popq %rdx
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rcx
popq %rbx
popq %r14
popq %r15
jmp 0x23fa5
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_origin
void subtilis_parser_origin(subtilis_parser_t *p, subtilis_token_t *t,
			    subtilis_error_t *err)
{
	size_t i;
	subtilis_exp_t *e[2];
	subtilis_ir_operand_t op2;

	memset(&e, 0, sizeof(e));
	memset(&op2, 0, sizeof(op2));

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_parser_statement_int_args(p, t, e, 2, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_ir_section_add_instr_reg(p->current, SUBTILIS_OP_INSTR_ORIGIN,
					  e[0]->exp.ir_op, e[1]->exp.ir_op, op2,
					  err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	if (!p->settings.ignore_graphics_errors)
		subtilis_exp_handle_errors(p, err);

cleanup:
	for (i = 0; i < 2; i++)
		subtilis_exp_delete(e[i]);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r14
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq (%rdi), %rdi
callq 0x12e0e
cmpl $0x0, (%rbx)
je 0x24887
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rsp, %rdx
pushq $0x2
popq %rcx
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %r8
callq 0x1e057
cmpl $0x0, (%rbx)
jne 0x248e3
movq 0x48(%r14), %rdi
movq (%rsp), %rax
movq 0x8(%rsp), %rcx
movq 0x148(%rax), %rdx
movq 0x148(%rcx), %rcx
pushq $0x59
popq %rsi
xorl %r8d, %r8d
movq %rbx, %r9
callq 0x2a8c1
cmpl $0x0, (%rbx)
jne 0x248e3
cmpb $0x0, 0xb9(%r14)
jne 0x248e3
movq %r14, %rdi
movq %rbx, %rsi
callq 0x29c49
xorl %ebx, %ebx
cmpq $0x2, %rbx
je 0x2487d
movq (%rsp,%rbx,8), %rdi
callq 0x29d88
incq %rbx
jmp 0x248e5
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_cls
void subtilis_parser_cls(subtilis_parser_t *p, subtilis_token_t *t,
			 subtilis_error_t *err)
{
	subtilis_ir_section_add_instr_no_arg(p->current, SUBTILIS_OP_INSTR_CLS,
					     err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	if (!p->settings.ignore_graphics_errors) {
		subtilis_exp_handle_errors(p, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

	subtilis_lexer_get(p->l, t, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x48(%rdi), %rdi
pushq $0x5b
popq %rsi
callq 0x2a9af
cmpl $0x0, (%rbx)
je 0x2491e
popq %rbx
popq %r14
popq %r15
retq
cmpb $0x0, 0xb9(%r15)
jne 0x24938
movq %r15, %rdi
movq %rbx, %rsi
callq 0x29c49
cmpl $0x0, (%rbx)
jne 0x24918
movq (%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %r15
jmp 0x12e0e
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_clg
void subtilis_parser_clg(subtilis_parser_t *p, subtilis_token_t *t,
			 subtilis_error_t *err)
{
	subtilis_ir_section_add_instr_no_arg(p->current, SUBTILIS_OP_INSTR_CLG,
					     err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	if (!p->settings.ignore_graphics_errors) {
		subtilis_exp_handle_errors(p, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

	subtilis_lexer_get(p->l, t, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x48(%rdi), %rdi
pushq $0x5c
popq %rsi
callq 0x2a9af
cmpl $0x0, (%rbx)
je 0x24970
popq %rbx
popq %r14
popq %r15
retq
cmpb $0x0, 0xb9(%r15)
jne 0x2498a
movq %r15, %rdi
movq %rbx, %rsi
callq 0x29c49
cmpl $0x0, (%rbx)
jne 0x2496a
movq (%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %r15
jmp 0x12e0e
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_on
void subtilis_parser_on(subtilis_parser_t *p, subtilis_token_t *t,
			subtilis_error_t *err)
{
	subtilis_ir_section_add_instr_no_arg(p->current, SUBTILIS_OP_INSTR_ON,
					     err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	if (!p->settings.ignore_graphics_errors) {
		subtilis_exp_handle_errors(p, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

	subtilis_lexer_get(p->l, t, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x48(%rdi), %rdi
pushq $0x5d
popq %rsi
callq 0x2a9af
cmpl $0x0, (%rbx)
je 0x249c2
popq %rbx
popq %r14
popq %r15
retq
cmpb $0x0, 0xb9(%r15)
jne 0x249dc
movq %r15, %rdi
movq %rbx, %rsi
callq 0x29c49
cmpl $0x0, (%rbx)
jne 0x249bc
movq (%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %r15
jmp 0x12e0e
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_graphics.c
// Function: subtilis_parser_off
void subtilis_parser_off(subtilis_parser_t *p, subtilis_token_t *t,
			 subtilis_error_t *err)
{
	subtilis_ir_section_add_instr_no_arg(p->current, SUBTILIS_OP_INSTR_OFF,
					     err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	if (!p->settings.ignore_graphics_errors) {
		subtilis_exp_handle_errors(p, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

	subtilis_lexer_get(p->l, t, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x48(%rdi), %rdi
pushq $0x5e
popq %rsi
callq 0x2a9af
cmpl $0x0, (%rbx)
je 0x24a14
popq %rbx
popq %r14
popq %r15
retq
cmpb $0x0, 0xb9(%r15)
jne 0x24a2e
movq %r15, %rdi
movq %rbx, %rsi
callq 0x29c49
cmpl $0x0, (%rbx)
jne 0x24a0e
movq (%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %r15
jmp 0x12e0e
// File: /workspace/github_c_makefile_star2_O2/markdryan[P]subtilis/frontend/parser_input.c
// Function: subtilis_parser_get
subtilis_exp_t *subtilis_parser_get(subtilis_parser_t *p, subtilis_token_t *t,
				    subtilis_error_t *err)
{
	size_t reg;
	subtilis_exp_t *e;

	reg = subtilis_ir_section_add_instr1(p->current, SUBTILIS_OP_INSTR_GET,
					     err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	subtilis_exp_handle_errors(p, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	e = subtilis_exp_new_int32_var(reg, err);

	subtilis_lexer_get(p->l, t, err);
	if (err->type != SUBTILIS_ERROR_OK) {
		subtilis_exp_delete(e);
		return NULL;
	}

	return e;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x48(%rdi), %rdi
pushq $0x6c
popq %rsi
callq 0x2a98b
cmpl $0x0, (%rbx)
jne 0x24c9a
movq %rax, %r12
movq %r15, %rdi
movq %rbx, %rsi
callq 0x29c49
cmpl $0x0, (%rbx)
jne 0x24c9a
movl %r12d, %edi
movq %rbx, %rsi
callq 0x2a336
movq %rax, %r12
movq (%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x12e0e
cmpl $0x0, (%rbx)
je 0x24c9d
movq %r12, %rdi
callq 0x29d88
xorl %r12d, %r12d
movq %r12, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq