LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: funcgoto
struct gotolabel *
funcgoto(struct func *f, char *name)
{
	void **entry;
	struct gotolabel *g;
	struct mapkey key;

	mapkey(&key, name, strlen(name));
	entry = mapput(&f->gotos, &key);
	g = *entry;
	if (!g) {
		g = xmalloc(sizeof(*g));
		g->label = mkblock(name);
		*entry = g;
	}

	return g;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x20, %rsp
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x3090
leaq 0x8(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0xa6c4
addq $0x38, %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0xa7db
movq (%rax), %r15
testq %r15, %r15
jne 0xf233
movq %rax, %r14
movl $0x10, %edi
callq 0xe13e
movq %rax, %r15
movl $0x88, %edi
callq 0xe13e
movl $0x7, (%rax)
movq %rbx, 0x8(%rax)
movl 0xcf38(%rip), %ecx      # 0x1c140
incl %ecx
movl %ecx, 0xcf30(%rip)      # 0x1c140
movl %ecx, 0x4(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
xorl %ecx, %ecx
movq %rcx, 0x20(%rax)
movl %ecx, 0x60(%rax)
movl %ecx, 0x50(%rax)
movq %rcx, 0x80(%rax)
movq %rax, (%r15)
movq %r15, (%r14)
movq %r15, %rax
addq $0x20, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: calcvla
static void
calcvla(struct func *f, struct type *t)
{
	struct value *length, *basesize;

	if (!(t->prop & PROPVM))
		return;
	if (t->base)
		calcvla(f, t->base);
	if (t->kind == TYPEFUNC || t->size)
		return;
	assert(t->kind == TYPEARRAY);
	if (!t->u.array.size) {
		assert(t->base->size || t->base->kind == TYPEARRAY);
		assert(t->u.array.length);
		length = convert(f, &typeulong, t->u.array.length->type, funcexpr(f, t->u.array.length));
		basesize = t->base->size ? mkintconst(t->base->size) : t->base->u.array.size;
		t->u.array.size = funcinst(f, IMUL, 'l', length, basesize);
	}
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
testb $0x40, 0x4(%rsi)
je 0xffce
movq %rsi, %rbx
movq %rdi, %r14
movq 0x20(%rsi), %rsi
testq %rsi, %rsi
je 0xff1c
movq %r14, %rdi
callq 0xfef3
movl (%rbx), %eax
cmpl $0xe, %eax
je 0xffce
cmpq $0x0, 0x10(%rbx)
jne 0xffce
cmpl $0xd, %eax
jne 0xffda
cmpq $0x0, 0x50(%rbx)
jne 0xffce
movq 0x20(%rbx), %rax
cmpq $0x0, 0x10(%rax)
jne 0xff5a
cmpl $0xd, (%rax)
jne 0x10018
movq 0x40(%rbx), %rsi
testq %rsi, %rsi
je 0xfff9
movq 0x8(%rsi), %r15
movq %r14, %rdi
callq 0xf240
leaq 0xbd8e(%rip), %rsi      # 0x1bd08
movq %r14, %rdi
movq %r15, %rdx
movq %rax, %rcx
callq 0xee7a
movq %rax, %r15
movq 0x20(%rbx), %rax
movq 0x10(%rax), %r12
testq %r12, %r12
je 0xffb1
movl $0x10, %edi
callq 0xe13e
movq %rax, %r8
movl $0x2, (%rax)
movq %r12, 0x8(%rax)
jmp 0xffb5
movq 0x50(%rax), %r8
movq %r14, %rdi
movl $0x5, %esi
movl $0x6c, %edx
movq %r15, %rcx
callq 0x101fd
movq %rax, 0x50(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x5a13(%rip), %rdi      # 0x159f4
leaq 0x586c(%rip), %rsi      # 0x15854
leaq 0x5e14(%rip), %rcx      # 0x15e03
movl $0x158, %edx            # imm = 0x158
callq 0x30e0
leaq 0x5e5a(%rip), %rdi      # 0x15e5a
leaq 0x584d(%rip), %rsi      # 0x15854
leaq 0x5df5(%rip), %rcx      # 0x15e03
movl $0x15b, %edx            # imm = 0x15B
callq 0x30e0
leaq 0x5e0f(%rip), %rdi      # 0x15e2e
leaq 0x582e(%rip), %rsi      # 0x15854
leaq 0x5dd6(%rip), %rcx      # 0x15e03
movl $0x15a, %edx            # imm = 0x15A
callq 0x30e0
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: funcload
static struct value *
funcload(struct func *f, struct type *t, struct lvalue lval)
{
	struct value *v;
	struct qbetype qt;

	switch (t->kind) {
	case TYPESTRUCT:
	case TYPEUNION:
	case TYPEARRAY:
		return lval.addr;
	}
	qt = qbetype(t);
	v = funcinst(f, qt.load, qt.base, lval.addr, NULL);
	return funcbits(f, t, v, lval.bits);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r12
movq %rsi, %r14
movq %rdi, %r15
movl (%rsi), %eax
cmpl $0x10, %eax
ja 0x1006b
movl $0x1a000, %ecx          # imm = 0x1A000
btl %eax, %ecx
jae 0x1006b
movq %r12, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %r14, %rdi
callq 0x102ec
movsbl %al, %edx
movq %rax, %rsi
shrq $0x20, %rsi
movq %r15, %rdi
movq %r12, %rcx
xorl %r8d, %r8d
callq 0x101fd
movq %r15, %rdi
movq %r14, %rsi
movq %rax, %rdx
movl %ebx, %ecx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x1164a
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: funclval
static struct lvalue
funclval(struct func *f, struct expr *e)
{
	struct lvalue lval = {0};
	struct decl *d;

	if (e->kind == EXPRBITFIELD) {
		lval.bits = e->u.bitfield.bits;
		e = e->base;
	}
	switch (e->kind) {
	case EXPRIDENT:
		d = e->u.ident.decl;
		if (d->kind != DECLOBJECT && d->kind != DECLFUNC)
			error(&tok.loc, "identifier '%s' is not an object or function", d->name);
		if (d == f->namedecl) {
			fputs("data ", stdout);
			emitname(d->value);
			printf(" = { b \"%s\", b 0 }\n", f->name);
			f->namedecl = NULL;
		}
		lval.addr = d->value;
		break;
	case EXPRSTRING:
		d = stringdecl(e);
		lval.addr = d->value;
		break;
	case EXPRCOMPOUND:
		if (e->toeval)
			funcexpr(f, e->toeval);
		d = e->u.compound.decl;
		funcinit(f, d, e->u.compound.init, true);
		lval.addr = d->value;
		break;
	case EXPRUNARY:
		if (e->op != TMUL)
			error(&tok.loc, "expression is not an object");
		lval.addr = funcexpr(f, e->base);
		break;
	default:
		if (e->type->kind != TYPESTRUCT && e->type->kind != TYPEUNION)
			error(&tok.loc, "expression is not an object");
		lval.addr = funcexpr(f, e);
	}
	return lval;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r15
movq %rdi, %r14
cmpl $0x4, (%rsi)
jne 0x100c3
movl 0x30(%r15), %ebx
movq 0x18(%r15), %r15
jmp 0x100c5
xorl %ebx, %ebx
movl (%r15), %eax
cmpq $0x7, %rax
ja 0x101bc
leaq 0x56bf(%rip), %rcx      # 0x15798
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x30(%r15), %r15
movl 0x8(%r15), %eax
decl %eax
cmpl $0x2, %eax
jb 0x1010d
movq (%r15), %rdx
leaq 0xc00d(%rip), %rdi      # 0x1c108
addq $0x8, %rdi
leaq 0x5d66(%rip), %rsi      # 0x15e6c
xorl %eax, %eax
callq 0xd56a
cmpq 0x8(%r14), %r15
jne 0x1014c
movq 0xaea6(%rip), %rax      # 0x1afc0
movq (%rax), %rsi
leaq 0x5935(%rip), %rdi      # 0x15a59
callq 0x30f0
movq 0x20(%r15), %rdi
callq 0x10ec1
movq 0x10(%r14), %rsi
leaq 0x5d5c(%rip), %rdi      # 0x15e99
xorl %eax, %eax
callq 0x30b0
movq $0x0, 0x8(%r14)
movq 0x20(%r15), %rax
jmp 0x101ee
movq 0x28(%r15), %rsi
testq %rsi, %rsi
je 0x10166
movq %r14, %rdi
callq 0xf240
movq 0x30(%r15), %r12
movq 0x38(%r15), %rdx
movq %r14, %rdi
movq %r12, %rsi
movl $0x1, %ecx
callq 0x103ee
movq 0x20(%r12), %rax
jmp 0x101ee
movq %r15, %rdi
callq 0x5783
movq 0x20(%rax), %rax
jmp 0x101ee
cmpl $0x4b, 0x14(%r15)
je 0x101b3
leaq 0xbf67(%rip), %rdi      # 0x1c108
addq $0x8, %rdi
leaq 0x5d01(%rip), %rsi      # 0x15ead
xorl %eax, %eax
callq 0xd56a
movq 0x18(%r15), %rsi
movq %r14, %rdi
jmp 0x101e9
movq 0x8(%r15), %rax
movl (%rax), %eax
addl $-0xf, %eax
cmpl $0x2, %eax
jb 0x101e3
leaq 0xbf37(%rip), %rdi      # 0x1c108
addq $0x8, %rdi
leaq 0x5cd1(%rip), %rsi      # 0x15ead
xorl %eax, %eax
callq 0xd56a
movq %r14, %rdi
movq %r15, %rsi
callq 0xf240
movq %rbx, %rdx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: funcinst
static struct value *
funcinst(struct func *f, int op, int class, struct value *arg0, struct value *arg1)
{
	struct inst *inst;
	struct block *b;

	if (f->end->jump.kind) {
		b = mkblock("dead");
		funclabel(f, b);
	}
	inst = mkinst(f, op, class, arg0, arg1);
	arrayaddptr(&f->end->insts, inst);
	return &inst->res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r14
movq %rcx, %r12
movl %edx, %r15d
movl %esi, %ebp
movq %rdi, %rbx
movq 0x30(%rdi), %rax
cmpl $0x0, 0x60(%rax)
je 0x10275
movl $0x88, %edi
callq 0xe13e
movl $0x7, (%rax)
leaq 0x5c92(%rip), %rcx      # 0x15ec9
movq %rcx, 0x8(%rax)
movl 0xbeff(%rip), %ecx      # 0x1c140
incl %ecx
movl %ecx, 0xbef7(%rip)      # 0x1c140
movl %ecx, 0x4(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
xorl %ecx, %ecx
movq %rcx, 0x20(%rax)
movl %ecx, 0x60(%rax)
movl %ecx, 0x50(%rax)
movq %rcx, 0x80(%rax)
movq 0x30(%rbx), %rcx
movq %rax, 0x80(%rcx)
movq %rax, 0x30(%rbx)
movl $0x28, %edi
callq 0xe13e
movq %rax, %r13
movl %ebp, (%rax)
movl %r15d, 0x4(%rax)
movq %r12, 0x18(%rax)
movq %r14, 0x20(%rax)
testl %r15d, %r15d
sete %al
cmpl $0x59, %ebp
sete %cl
orb %al, %cl
jne 0x102be
movl $0x5, 0x8(%r13)
movq $0x0, 0x10(%r13)
movl 0x58(%rbx), %eax
incl %eax
movl %eax, 0x58(%rbx)
movl %eax, 0xc(%r13)
jmp 0x102c6
movl $0x0, 0x8(%r13)
movq 0x30(%rbx), %rdi
addq $0x10, %rdi
movq %r13, %rsi
callq 0xe200
addq $0x8, %r13
movq %r13, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: qbetype
static struct qbetype
qbetype(struct type *t)
{
	static const struct qbetype
		ub = {'w', 'b', ILOADUB, ISTOREB},
		sb = {'w', 'b', ILOADSB, ISTOREB},
		uh = {'w', 'h', ILOADUH, ISTOREH},
		sh = {'w', 'h', ILOADSH, ISTOREH},
		w = {'w', 'w', ILOADW, ISTOREW},
		l = {'l', 'l', ILOADL, ISTOREL},
		s = {'s', 's', ILOADS, ISTORES},
		d = {'d', 'd', ILOADD, ISTORED},
		v = {0};

	if (t == &typevoid)
		return v;
	if (!(t->prop & PROPSCALAR))
		return l;
	switch (t->size) {
	case 1: return t->u.basic.issigned ? sb : ub;
	case 2: return t->u.basic.issigned ? sh : uh;
	case 4: return t->prop & PROPFLOAT ? s : w;
	case 8: return t->prop & PROPFLOAT ? d : l;
	case 16: fatal("long double is not yet supported");
	}
	assert(0);
}

// Assembly:
pushq %rax
cmpq 0xacac(%rip), %rdi      # 0x1afa0
je 0x1034e
movabsq $0x1700006c6c, %rax     # imm = 0x1700006C6C
movl 0x4(%rdi), %ecx
movl $0x11, %edx
testb $0x10, %cl
je 0x10352
movq 0x10(%rdi), %rdx
leaq -0x1(%rdx), %rsi
cmpq $0x7, %rsi
ja 0x103bb
leaq 0x5492(%rip), %rdx      # 0x157b8
movslq (%rdx,%rsi,4), %rsi
addq %rdx, %rsi
jmpq *%rsi
movzbl 0x40(%rdi), %ecx
xorl $0x1, %ecx
shlq $0x20, %rcx
movabsq $0x1b00006277, %rax     # imm = 0x1B00006277
addq %rcx, %rax
movl $0x14, %edx
jmp 0x10352
xorl %eax, %eax
xorl %edx, %edx
popq %rcx
retq
xorl %edx, %edx
testb $0x20, %cl
sete %dl
movabsq $0x1800007777, %rcx     # imm = 0x1800007777
movabsq $0x1600007373, %rax     # imm = 0x1600007373
cmoveq %rcx, %rax
leal 0x10(,%rdx,2), %edx
jmp 0x10352
xorl %edx, %edx
testb $0x20, %cl
sete %dl
movabsq $0x1500006464, %rcx     # imm = 0x1500006464
cmovneq %rcx, %rax
leal 0xf(,%rdx,2), %edx
jmp 0x10352
movzbl 0x40(%rdi), %ecx
xorl $0x1, %ecx
shlq $0x20, %rcx
movabsq $0x1900006877, %rax     # imm = 0x1900006877
addq %rcx, %rax
movl $0x13, %edx
jmp 0x10352
cmpq $0x10, %rdx
jne 0x103cf
leaq 0x5b06(%rip), %rdi      # 0x15ece
xorl %eax, %eax
callq 0xe054
leaq 0x58e8(%rip), %rdi      # 0x15cbe
leaq 0x5477(%rip), %rsi      # 0x15854
leaq 0x5b0b(%rip), %rcx      # 0x15eef
movl $0xcb, %edx
callq 0x30e0
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: zero
static void
zero(struct func *func, struct value *addr, int align, unsigned long long offset, unsigned long long end)
{
	static const enum instkind store[] = {
		[1] = ISTOREB,
		[2] = ISTOREH,
		[4] = ISTOREW,
		[8] = ISTOREL,
	};
	static struct value z = {.kind = VALUE_INTCONST};
	struct value *tmp;
	int a = 1;

	while (offset < end) {
		if ((align - (offset & align - 1)) & a) {
			tmp = offset ? funcinst(func, IADD, ptrclass, addr, mkintconst(offset)) : addr;
			funcinst(func, store[a], 0, &z, tmp);
			offset += a;
		}
		if (a < align)
			a <<= 1;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movl %edx, 0x4(%rsp)
movq %r8, 0x10(%rsp)
cmpq %r8, %rcx
jae 0x1074c
movq %rcx, %r14
movq %rsi, %rbx
movslq 0x4(%rsp), %rax
movq %rax, 0x8(%rsp)
decl %eax
movslq %eax, %r15
movl $0x1, %ebp
movq %rdi, %r13
movq %r14, %rax
andq %r15, %rax
movq 0x8(%rsp), %rcx
subq %rax, %rcx
movslq %ebp, %r12
testq %r12, %rcx
je 0x1073c
movq %rbx, %r8
testq %r14, %r14
je 0x1071d
movl $0x10, %edi
callq 0xe13e
movl $0x2, (%rax)
movq %r14, 0x8(%rax)
movq %r13, %rdi
movl $0x1, %esi
movl $0x6c, %edx
movq %rbx, %rcx
movq %rax, %r8
callq 0x101fd
movq %rax, %r8
leaq 0x50dc(%rip), %rax      # 0x15800
movl (%rax,%r12,4), %esi
movq %r13, %rdi
xorl %edx, %edx
leaq 0xb83c(%rip), %rcx      # 0x1bf70
callq 0x101fd
addq %r12, %r14
cmpl 0x4(%rsp), %ebp
setl %cl
shll %cl, %ebp
cmpq 0x10(%rsp), %r14
jb 0x106d0
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: emitclass
static void
emitclass(int class, struct value *v)
{
	if (v && v->kind == VALUE_TYPE)
		emitname(v);
	else if (class)
		putchar(class);
	else
		fatal("type has no QBE representation");
}

// Assembly:
testq %rsi, %rsi
je 0x10eab
cmpl $0x6, (%rsi)
jne 0x10eab
movq %rsi, %rdi
jmp 0x10ec1
testl %edi, %edi
jne 0x3030
leaq 0x509f(%rip), %rdi      # 0x15f59
xorl %eax, %eax
jmp 0xe054
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: emitname
static void
emitname(struct value *v)
{
	static const char sigil[] = {
		[VALUE_TEMP] = '%',
		[VALUE_GLOBAL] = '$',
		[VALUE_TYPE] = ':',
		[VALUE_LABEL] = '@',
	};
	int kind;

	kind = v->kind & 0xf;
	if (kind >= LEN(sigil) || !sigil[kind])
		fatal("invalid value");
	putchar(sigil[kind]);
	if (kind == VALUE_GLOBAL && v->id)
		fputs(".L", stdout);
	if (v->u.name)
		fputs(v->u.name, stdout);
	if (v->id)
		printf(".%u", v->id);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movl (%rdi), %r14d
andl $0xf, %r14d
cmpl $0x7, %r14d
ja 0x10ee0
movl $0x1d, %eax
btl %r14d, %eax
jae 0x10eee
leaq 0x5091(%rip), %rdi      # 0x15f78
xorl %eax, %eax
callq 0xe054
leaq 0x5393(%rip), %rax      # 0x16288
movsbl (%r14,%rax), %edi
callq 0x3030
cmpl $0x1, %r14d
jne 0x10f21
cmpl $0x0, 0x4(%rbx)
je 0x10f21
movq 0xa0ae(%rip), %rax      # 0x1afc0
movq (%rax), %rsi
leaq 0x506a(%rip), %rdi      # 0x15f86
callq 0x30f0
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x10f39
movq 0xa08f(%rip), %rax      # 0x1afc0
movq (%rax), %rsi
callq 0x30f0
movl 0x4(%rbx), %esi
testl %esi, %esi
je 0x10f55
leaq 0x5042(%rip), %rdi      # 0x15f89
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x30b0
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: emitvalue
static void
emitvalue(struct value *v)
{
	switch (v->kind & 0xf) {
	case VALUE_INTCONST:
		printf("%llu", v->u.i);
		break;
	case VALUE_FLTCONST:
		printf("s_%.17g", v->u.f);
		break;
	case VALUE_DBLCONST:
		printf("d_%.17g", v->u.f);
		break;
	case VALUE_GLOBAL:
		if (v->kind & VALUE_THREAD)
			fputs("thread ", stdout);
		/* fallthrough */
	default:
		emitname(v);
		break;
	}
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
movl (%rdi), %eax
movl %eax, %ecx
andl $0xf, %ecx
decl %ecx
cmpl $0x3, %ecx
ja 0x10f99
leaq 0x4876(%rip), %rdx      # 0x157ec
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
testb $0x10, %al
je 0x10f99
movq 0xa036(%rip), %rax      # 0x1afc0
movq (%rax), %rsi
leaq 0x4ab5(%rip), %rdi      # 0x15a49
callq 0x30f0
movq %rbx, %rdi
popq %rbx
jmp 0x10ec1
movsd 0x8(%rbx), %xmm0
leaq 0x4fdf(%rip), %rdi      # 0x15f8d
jmp 0x10fbc
movsd 0x8(%rbx), %xmm0
leaq 0x4fd9(%rip), %rdi      # 0x15f95
movb $0x1, %al
popq %rbx
jmp 0x30b0
movq 0x8(%rbx), %rsi
leaq 0x1670(%rip), %rdi      # 0x1263f
xorl %eax, %eax
popq %rbx
jmp 0x30b0
// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/qbe.c
// Function: funcbits
static struct value *
funcbits(struct func *f, struct type *t, struct value *v, struct bitfield b)
{
	int class, bits;

	class = t->size <= 4 ? 'w' : 'l';
	bits = b.after;
	if (bits) {
		bits += (t->size + 3 & ~3) - t->size << 3;
		v = funcinst(f, ISHL, class, v, mkintconst(bits));
	}
	bits += b.before;
	if (bits)
		v = funcinst(f, t->u.basic.issigned ? ISAR : ISHR, class, v, mkintconst(bits));
	return v;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %ecx, %r12d
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r14
movq 0x10(%rsi), %rax
cmpq $0x5, %rax
movl $0x77, %ecx
movl $0x6c, %ebp
cmovbl %ecx, %ebp
xorl %r13d, %r13d
cmpl $0x10000, %r12d         # imm = 0x10000
jb 0x116ce
movl %r12d, %ecx
sarl $0x10, %ecx
leal 0x3(%rax), %edx
andl $0x1ffffffc, %edx       # imm = 0x1FFFFFFC
subl %eax, %edx
leal (%rcx,%rdx,8), %r13d
movq %r14, (%rsp)
movslq %r13d, %r14
movl $0x10, %edi
callq 0xe13e
movl $0x2, (%rax)
movq %r14, 0x8(%rax)
movq (%rsp), %r14
movq %r14, %rdi
movl $0xe, %esi
movl %ebp, %edx
movq %rbx, %rcx
movq %rax, %r8
callq 0x101fd
movq %rax, %rbx
movswl %r12w, %eax
addl %r13d, %eax
je 0x1171b
movzbl 0x40(%r15), %r15d
xorl $0xd, %r15d
movq %r14, %r12
movslq %eax, %r14
movl $0x10, %edi
callq 0xe13e
movl $0x2, (%rax)
movq %r14, 0x8(%rax)
movq %r12, %rdi
movl %r15d, %esi
movl %ebp, %edx
movq %rbx, %rcx
movq %rax, %r8
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x101fd
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/cirocosta[P]stress/src/files.c
// Function: create_file
void
create_file(const char* base, const int i)
{
	FILE* fp;
	char* filename;

	_STRESS_MUST(asprintf(&filename, "%s/file%d", base, i) > 0,
	             "Couldn't create name for file %d",
	             i);
	_STRESS_MUST(
	  (fp = fopen(filename, "a")), "Couldn't create file %s", filename);
	fprintf(fp, "dummy");
	fclose(fp);
	free(filename);
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
movl %esi, %ebx
movq %rdi, %rdx
leaq 0x6ab(%rip), %rsi       # 0x2117
leaq 0x8(%rsp), %rdi
movl %ebx, %ecx
xorl %eax, %eax
callq 0x1140
testl %eax, %eax
jle 0x1ac8
movq 0x8(%rsp), %rdi
leaq 0x6c4(%rip), %rsi       # 0x214e
callq 0x1150
testq %rax, %rax
je 0x1acf
movq %rax, %rbx
leaq 0x6ca(%rip), %rdi       # 0x2168
movl $0x5, %esi
movl $0x1, %edx
movq %rax, %rcx
callq 0x1190
movq %rbx, %rdi
callq 0x10b0
movq 0x8(%rsp), %rdi
callq 0x1030
addq $0x10, %rsp
popq %rbx
retq
movl %ebx, %edi
callq 0x13fc
leaq 0x8(%rsp), %rdi
callq 0x14b2
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile.c
// Function: main
int main(int argc, char **argv)
{
	char *file;
	struct string_list *filelist = NULL;

	bits_in_bool = 8;

	clean_up_symbols(sparse_initialize(argc, argv, &filelist));
	FOR_EACH_PTR(filelist, file) {
		struct symbol_list *list;
		const char *basename = strrchr(file, '/');
		basename = basename ?  basename+1 : file;

		list = sparse(file);

		// Do type evaluation and simplification
		emit_unit_begin(basename);
		clean_up_symbols(list);
		emit_unit_end();
	} END_FOR_EACH_PTR(file);

#if 0
	// And show the allocation statistics
	show_ident_alloc();
	show_token_alloc();
	show_symbol_alloc();
	show_expression_alloc();
	show_statement_alloc();
	show_string_alloc();
	show_bytes_alloc();
#endif
	return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
leaq 0x8(%rsp), %rbx
movq $0x0, (%rbx)
leaq 0x5b8a0(%rip), %rax     # 0x6a39c
movl $0x8, (%rax)
movq %rbx, %rdx
callq 0x11f06
movq %rax, %rdi
callq 0xeb9f
movq (%rbx), %r15
testq %r15, %r15
je 0xeb8f
movq %r15, %r12
movzwl (%r12), %eax
testb %al, %al
jle 0xeb85
xorl %r13d, %r13d
movq 0x18(%r12,%r13,8), %rbx
movzwl %ax, %eax
cmpl $0x100, %eax            # imm = 0x100
jb 0xeb3d
testq %rbx, %rbx
je 0xeb75
movq %rbx, %rdi
movl $0x2f, %esi
callq 0xe130
leaq 0x1(%rax), %r14
testq %rax, %rax
cmoveq %rbx, %r14
movq %rbx, %rdi
callq 0x12246
movq %rax, %rbx
movq %r14, %rdi
callq 0x40680
movq %rbx, %rdi
callq 0xeb9f
callq 0x40691
incq %r13
movl (%r12), %eax
movsbq %al, %rcx
cmpq %rcx, %r13
jl 0xeb29
movq 0x10(%r12), %r12
cmpq %r15, %r12
jne 0xeb1d
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile.c
// Function: clean_up_symbols
static void clean_up_symbols(struct symbol_list *list)
{
	struct symbol *sym;

	FOR_EACH_PTR(list, sym) {
		expand_symbol(sym);
		emit_one_symbol(sym);
	} END_FOR_EACH_PTR(sym);
}

// Assembly:
testq %rdi, %rdi
je 0xec04
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq %rdi, %r15
movzwl (%r15), %eax
testb %al, %al
jle 0xebf0
xorl %r12d, %r12d
movq 0x18(%r15,%r12,8), %r14
movzwl %ax, %eax
cmpl $0x100, %eax            # imm = 0x100
jb 0xebd1
testq %r14, %r14
je 0xebe1
movq %r14, %rdi
callq 0xeea0
movq %r14, %rdi
callq 0x40713
incq %r12
movl (%r15), %eax
movsbq %al, %rcx
cmpq %rcx, %r12
jl 0xebbd
movq 0x10(%r15), %r15
cmpq %rbx, %r15
jne 0xebb2
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: emit_unit_end
static void textbuf_emit(struct textbuf **buf_p)
{
	struct textbuf *tmp, *list = *buf_p;

	while (list) {
		tmp = list;
		if (tmp->next == tmp)
			list = NULL;
		else {
			tmp->prev->next = tmp->next;
			tmp->next->prev = tmp->prev;
			list = tmp->next;
		}

		fputs(tmp->text, stdout);

		free(tmp);
	}

	*buf_p = list;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq 0x58323(%rip), %rbx     # 0x989c0
testq %rbx, %rbx
je 0x406eb
movq 0x2584f(%rip), %r14     # 0x65ef8
movq 0x10(%rbx), %rax
cmpq %rbx, %rax
je 0x406cc
movq 0x18(%rbx), %rcx
movq %rax, 0x10(%rcx)
movq 0x10(%rbx), %rax
movq 0x18(%rbx), %rcx
movq %rcx, 0x18(%rax)
movq 0x10(%rbx), %r15
jmp 0x406cf
xorl %r15d, %r15d
movq 0x8(%rbx), %rdi
movq (%r14), %rsi
callq 0xe150
movq %rbx, %rdi
callq 0xe030
movq %r15, %rbx
testq %r15, %r15
jne 0x406a9
movq $0x0, 0x582ca(%rip) # 0x989c0
leaq 0x29e7b(%rip), %rax     # 0x6a578
movq (%rax), %rsi
leaq 0xf2f2(%rip), %rdi      # 0x4f9f9
xorl %eax, %eax
popq %rbx
popq %r14
popq %r15
jmp 0xe110
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: emit_object_pre
static void emit_object_pre(const char *name, unsigned long modifiers,
			    unsigned long alignment, unsigned int byte_size)
{
	if ((modifiers & MOD_STATIC) == 0)
		printf(".globl %s\n", name);
	emit_section(".data");
	if (alignment)
		printf("\t.align %lu\n", alignment);
	printf("\t.type\t%s, @object\n", name);
	printf("\t.size\t%s, %d\n", name, byte_size);
	printf("%s:\n", name);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %ecx, %ebp
movq %rdx, %r14
movq %rdi, %rbx
testb $0x4, %sil
jne 0x41214
leaq 0xe8db(%rip), %rdi      # 0x4fae5
movq %rbx, %rsi
xorl %eax, %eax
callq 0xe110
leaq 0xe8d5(%rip), %rdi      # 0x4faf0
callq 0x42482
testq %r14, %r14
je 0x41236
leaq 0xe8ca(%rip), %rdi      # 0x4faf6
movq %r14, %rsi
xorl %eax, %eax
callq 0xe110
leaq 0xe8c6(%rip), %rdi      # 0x4fb03
movq %rbx, %rsi
xorl %eax, %eax
callq 0xe110
leaq 0xe8c9(%rip), %rdi      # 0x4fb17
movq %rbx, %rsi
movl %ebp, %edx
xorl %eax, %eax
callq 0xe110
leaq 0x3316(%rip), %rdi      # 0x44577
movq %rbx, %rsi
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
jmp 0xe110
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: emit_scalar
static void emit_scalar(struct expression *expr, unsigned int bit_size)
{
	const char *type;
	long long ll;

	assert(expr->type == EXPR_VALUE);

	if (expr->value == 0ULL) {
		printf("\t.zero\t%d\n", bit_size / 8);
		return;
	}

	ll = (long long) expr->value;

	switch (bit_size) {
	case 8:		type = "byte";	ll = (char) ll; break;
	case 16:	type = "value";	ll = (short) ll; break;
	case 32:	type = "long";	ll = (int) ll; break;
	case 64:	type = "quad";	break;
	default:	type = NULL;	break;
	}

	assert(type != NULL);

	printf("\t.%s\t%lld\n", type, ll);
}

// Assembly:
pushq %rax
cmpb $0x1, (%rdi)
jne 0x412f3
movq 0x20(%rdi), %rdx
testq %rdx, %rdx
je 0x412a6
addl $-0x8, %esi
roll $0x1d, %esi
cmpl $0x7, %esi
ja 0x412ed
leaq 0xe604(%rip), %rax      # 0x4f894
movslq (%rax,%rsi,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movsbq %dl, %rdx
leaq 0x4f30(%rip), %rsi      # 0x461d4
jmp 0x412d8
shrl $0x3, %esi
leaq 0xe7ad(%rip), %rdi      # 0x4fa5d
xorl %eax, %eax
popq %rcx
jmp 0xe110
movslq %edx, %rdx
leaq 0x80f5(%rip), %rsi      # 0x493b7
jmp 0x412d8
movswq %dx, %rdx
leaq 0xb68c(%rip), %rsi      # 0x4c95b
jmp 0x412d8
leaq 0xe89b(%rip), %rsi      # 0x4fb73
xorl %eax, %eax
testb %al, %al
jne 0x41312
leaq 0xe893(%rip), %rdi      # 0x4fb78
xorl %eax, %eax
popq %rcx
jmp 0xe110
movb $0x1, %al
xorl %esi, %esi
jmp 0x412da
leaq 0xe82c(%rip), %rdi      # 0x4fb26
leaq 0xe73b(%rip), %rsi      # 0x4fa3c
leaq 0xe837(%rip), %rcx      # 0x4fb3f
movl $0x397, %edx            # imm = 0x397
callq 0xe140
leaq 0xe716(%rip), %rdi      # 0x4fa2f
leaq 0xe71c(%rip), %rsi      # 0x4fa3c
leaq 0xe818(%rip), %rcx      # 0x4fb3f
movl $0x3a8, %edx            # imm = 0x3A8
callq 0xe140
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: stor_sym_init
static void stor_sym_init(struct symbol *sym)
{
	struct storage *stor;
	struct symbol_private *priv;

	priv = calloc(1, sizeof(*priv) + sizeof(*stor));
	if (!priv)
		die("OOM in stor_sym_init");

	stor = (struct storage *) (priv + 1);

	priv->addr = stor;
	stor->type = STOR_SYM;
	stor->sym = sym;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
movl $0x1, %edi
movl $0x38, %esi
callq 0xe1e0
testq %rax, %rax
je 0x41360
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, (%rax)
movl $0x2, 0x8(%rax)
movq %rbx, 0x28(%rax)
popq %rbx
retq
leaq 0xe81c(%rip), %rdi      # 0x4fb83
xorl %eax, %eax
callq 0x11d6e
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: emit_initializer
static void emit_initializer(struct symbol *sym,
			     struct expression *expr)
{
	int distance = ea_current - ea_last - 1;

	if (distance > 0)
		printf("\t.zero\t%d\n", (sym->bit_size / 8) * distance);

	if (expr->type == EXPR_VALUE) {
		struct symbol *base_type = sym->ctype.base_type;
		assert(base_type != NULL);

		emit_scalar(expr, sym->bit_size / get_expression_value(base_type->array_size));
		return;
	}
	if (expr->type != EXPR_INITIALIZER)
		return;

	assert(0); /* FIXME */
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movl 0x56703(%rip), %eax     # 0x989c8
notl %eax
addl 0x566ff(%rip), %eax     # 0x989cc
testl %eax, %eax
jle 0x422f1
movl 0x50(%r14), %ecx
leal 0x7(%rcx), %esi
testl %ecx, %ecx
cmovnsl %ecx, %esi
sarl $0x3, %esi
imull %eax, %esi
leaq 0xd773(%rip), %rdi      # 0x4fa5d
xorl %eax, %eax
callq 0xe110
movzbl (%rbx), %eax
cmpl $0x1, %eax
je 0x42306
cmpl $0x18, %eax
je 0x42338
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq 0x60(%r14), %rax
testq %rax, %rax
je 0x42357
movslq 0x50(%r14), %r14
movq 0x58(%rax), %rdi
callq 0xf3c1
movq %rax, %rcx
movq %r14, %rax
cqto
idivq %rcx
movq %rbx, %rdi
movl %eax, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x4126f
leaq 0x6b52(%rip), %rdi      # 0x48e91
leaq 0xd6f6(%rip), %rsi      # 0x4fa3c
leaq 0xd71b(%rip), %rcx      # 0x4fa68
movl $0x3d1, %edx            # imm = 0x3D1
callq 0xe140
leaq 0xd6cc(%rip), %rdi      # 0x4fa2a
leaq 0xd6d7(%rip), %rsi      # 0x4fa3c
leaq 0xd6fc(%rip), %rcx      # 0x4fa68
movl $0x3c9, %edx            # imm = 0x3C9
callq 0xe140
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: emit_global_noinit
static void emit_global_noinit(const char *name, unsigned long modifiers,
			       unsigned long alignment, unsigned int byte_size)
{
	char s[64];

	if (modifiers & MOD_STATIC) {
		sprintf(s, "\t.local\t%s\n", name);
		textbuf_push(&unit_post_text, s);
	}
	if (alignment)
		sprintf(s, "\t.comm\t%s,%d,%lu\n", name, byte_size, alignment);
	else
		sprintf(s, "\t.comm\t%s,%d\n", name, byte_size);
	textbuf_push(&unit_post_text, s);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x48, %rsp
movl %ecx, %ebx
movq %rdx, %r15
movq %rdi, %r14
testb $0x4, %sil
je 0x423ae
leaq 0xd70e(%rip), %rsi      # 0x4faa4
movq %rsp, %r12
movq %r12, %rdi
movq %r14, %rdx
xorl %eax, %eax
callq 0xe2f0
movq %r12, %rdi
callq 0x423f8
testq %r15, %r15
je 0x423ce
leaq 0xd6f6(%rip), %rsi      # 0x4fab0
movq %rsp, %rdi
movq %r14, %rdx
movl %ebx, %ecx
movq %r15, %r8
xorl %eax, %eax
callq 0xe2f0
jmp 0x423e4
leaq 0xd6ed(%rip), %rsi      # 0x4fac2
movq %rsp, %rdi
movq %r14, %rdx
movl %ebx, %ecx
xorl %eax, %eax
callq 0xe2f0
movq %rsp, %rdi
callq 0x423f8
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: textbuf_push
static void textbuf_push(struct textbuf **buf_p, const char *text)
{
	struct textbuf *tmp, *list = *buf_p;
	unsigned int text_len = strlen(text);
	unsigned int alloc_len = text_len + 1 + sizeof(*list);

	tmp = calloc(1, alloc_len);
	if (!tmp)
		die("OOM on textbuf alloc");

	tmp->text = ((void *) tmp) + sizeof(*tmp);
	memcpy(tmp->text, text, text_len + 1);
	tmp->len = text_len;

	/* add to end of list */
	if (!list) {
		list = tmp;
		tmp->prev = tmp;
	} else {
		tmp->prev = list->prev;
		tmp->prev->next = tmp;
		list->prev = tmp;
	}
	tmp->next = list;

	*buf_p = list;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r14
movq 0x565b6(%rip), %r12     # 0x989c0
callq 0xe0f0
movq %rax, %r15
leal 0x21(%rax), %esi
movl $0x1, %edi
callq 0xe1e0
testq %rax, %rax
je 0x42474
movq %rax, %rbx
leal 0x1(%r15), %edx
movq %rax, %rdi
addq $0x20, %rdi
movq %rdi, 0x8(%rax)
movq %r14, %rsi
callq 0xe210
movl %r15d, (%rbx)
movq %rbx, %rax
testq %r12, %r12
je 0x42459
movq 0x18(%r12), %rax
movq %rax, 0x18(%rbx)
movq %rbx, 0x10(%rax)
movq %r12, %rax
movq %rbx, 0x18(%rax)
movq %rax, 0x10(%rbx)
movq %rax, 0x56558(%rip)     # 0x989c0
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0xd655(%rip), %rdi      # 0x4fad0
xorl %eax, %eax
callq 0x11d6e
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: emit_section
static void emit_section(const char *s)
{
	if (s == current_section)
		return;
	if (current_section && (!strcmp(s, current_section)))
		return;

	printf("\t%s\n", s);
	current_section = s;
}

// Assembly:
movq 0x56547(%rip), %rsi     # 0x989d0
cmpq %rdi, %rsi
je 0x424bc
pushq %rbx
movq %rdi, %rbx
testq %rsi, %rsi
je 0x424a3
movq %rbx, %rdi
callq 0xe1f0
testl %eax, %eax
je 0x424bb
leaq 0x70ff(%rip), %rdi      # 0x495a9
movq %rbx, %rsi
xorl %eax, %eax
callq 0xe110
movq %rbx, 0x56515(%rip)     # 0x989d0
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: x86_symbol_decl
static void x86_symbol_decl(struct symbol_list *syms)
{
	struct symbol *sym;
	FOR_EACH_PTR(syms, sym) {
		x86_symbol_init(sym);
	} END_FOR_EACH_PTR(sym);
}

// Assembly:
testq %rdi, %rdi
je 0x42574
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq %rdi, %r12
movzwl (%r12), %eax
testb %al, %al
jle 0x42558
xorl %r13d, %r13d
movq 0x18(%r12,%r13,8), %rbp
movzwl %ax, %eax
cmpl $0x100, %eax            # imm = 0x100
jb 0x424f7
testq %rbp, %rbp
je 0x42548
movq 0xb0(%rbp), %rdi
movq 0xd0(%rbp), %r14
testq %rdi, %rdi
je 0x42511
callq 0x41d4f
jmp 0x42524
movl 0x50(%rbp), %eax
leal 0x7(%rax), %edi
testl %eax, %eax
cmovnsl %eax, %edi
sarl $0x3, %edi
callq 0x427bd
movq %rax, %r15
testq %r14, %r14
jne 0x42545
movl $0x1, %edi
movl $0x8, %esi
callq 0xe1e0
movq %rax, %r14
movq %rax, 0xd0(%rbp)
movq %r15, (%r14)
incq %r13
movl (%r12), %eax
movsbq %al, %rcx
cmpq %rcx, %r13
jl 0x424e3
movq 0x10(%r12), %r12
cmpq %rbx, %r12
jne 0x424d7
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: new_storage
static struct storage *new_storage(enum storage_type type)
{
	struct storage *stor;

	stor = calloc(1, sizeof(*stor));
	if (!stor)
		die("OOM in new_storage");

	stor->type = type;

	return stor;
}

// Assembly:
pushq %rbx
movl %edi, %ebx
movl $0x1, %edi
movl $0x30, %esi
callq 0xe1e0
testq %rax, %rax
je 0x42590
movl %ebx, (%rax)
popq %rbx
retq
leaq 0xd92b(%rip), %rdi      # 0x4fec2
xorl %eax, %eax
callq 0x11d6e
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: insn
static void insn(const char *insn, struct storage *op1, struct storage *op2,
		 const char *comment_in)
{
	struct function *f = current_func;
	struct atom *atom = new_atom(ATOM_INSN);

	assert(insn != NULL);

	strcpy(atom->insn, insn);
	if (comment_in && (*comment_in))
		strncpy(atom->comment, comment_in,
			sizeof(atom->comment) - 1);

	atom->op1 = op1;
	atom->op2 = op2;

	push_atom(f, atom);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %r12
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %rbp
movq 0x5641c(%rip), %r14     # 0x989d8
movl $0x1, %edi
callq 0x42ad1
testq %rbp, %rbp
je 0x4261f
movq %rax, %r13
leaq 0x8(%rax), %rdi
movq %rbp, %rsi
callq 0xe0a0
testq %r12, %r12
je 0x425fa
cmpb $0x0, (%r12)
je 0x425fa
movq %r13, %rdi
addq $0x28, %rdi
movl $0x27, %edx
movq %r12, %rsi
callq 0xe080
movq %r15, 0x50(%r13)
movq %rbx, 0x58(%r13)
addq $0x10, %r14
movq %r14, %rdi
movq %r13, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1c78f
leaq 0xd8af(%rip), %rdi      # 0x4fed5
leaq 0xd40f(%rip), %rsi      # 0x4fa3c
leaq 0xd8ae(%rip), %rcx      # 0x4fee2
movl $0x277, %edx            # imm = 0x277
callq 0xe140
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: opbits
static const char *opbits(const char *insn, unsigned int bits)
{
	static char opbits_str[32];
	char c;

	switch (bits) {
	case 8:	 c = 'b'; break;
	case 16: c = 'w'; break;
	case 32: c = 'l'; break;
	case 64: c = 'q'; break;
	default: abort(); break;
	}

	sprintf(opbits_str, "%s%c", insn, c);

	return opbits_str;
}

// Assembly:
addl $-0x8, %esi
roll $0x1d, %esi
cmpl $0x8, %esi
jae 0x427b7
movl $0x8b, %eax
btl %esi, %eax
jae 0x427b7
movq %rdi, %rdx
movl %esi, %eax
leaq 0xdbb5(%rip), %rcx      # 0x50354
movl (%rcx,%rax,4), %ecx
leaq 0x56247(%rip), %rdi     # 0x989f0
leaq 0xd4c5(%rip), %rsi      # 0x4fc75
xorl %eax, %eax
jmp 0xe2f0
pushq %rax
callq 0xe060
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: stack_alloc
static struct storage *stack_alloc(int n_bytes)
{
	struct function *f = current_func;
	struct storage *stor;

	assert(f != NULL);

	stor = new_storage(STOR_PSEUDO);
	stor->type = STOR_PSEUDO;
	stor->pseudo = f->pseudo_nr;
	stor->offset = f->stack_size; /* FIXME: stack req. natural align */
	stor->size = n_bytes;
	f->stack_size += n_bytes;
	f->pseudo_nr++;

	add_ptr_list(&f->pseudo_list, stor);

	return stor;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq 0x56210(%rip), %rbx     # 0x989d8
testq %rbx, %rbx
je 0x4280c
movl %edi, %ebp
xorl %edi, %edi
callq 0x42575
movq %rax, %r14
movl $0x0, (%rax)
movl 0x4(%rbx), %eax
movl %eax, 0x20(%r14)
movl (%rbx), %eax
movl %eax, 0x24(%r14)
movl %ebp, 0x28(%r14)
addl %ebp, (%rbx)
incl 0x4(%rbx)
addq $0x8, %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1c78f
movq %r14, %rax
popq %rbx
popq %r14
popq %rbp
retq
leaq 0xd4de(%rip), %rdi      # 0x4fcf1
leaq 0xd222(%rip), %rsi      # 0x4fa3c
leaq 0xd4da(%rip), %rcx      # 0x4fcfb
movl $0x20e, %edx            # imm = 0x20E
callq 0xe140
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: emit_conditional_test
static int emit_conditional_test(struct storage *val)
{
	struct storage *reg;
	struct storage *target_val;
	int target_false;

	/* load result into EAX */
	emit_comment("begin if/conditional");
	reg = get_reg_value(val, &regclass_32);

	/* compare result with zero */
	insn("test", reg, reg, NULL);
	put_reg(reg);

	/* create conditional-failed label to jump to */
	target_false = new_label();
	target_val = new_storage(STOR_LABEL);
	target_val->label = target_false;
	target_val->flags = STOR_WANTS_FREE;
	insn("jz", target_val, NULL, NULL);

	return target_false;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
leaq 0xd4ed(%rip), %rdi      # 0x4fd23
xorl %eax, %eax
callq 0x4291c
leaq 0x29584(%rip), %rsi     # 0x6bdc8
movq %rbx, %rdi
callq 0x429d7
movq %rax, %rbx
leaq 0xd4e2(%rip), %rdi      # 0x4fd38
movq %rax, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x4259e
movq %rbx, %rdi
callq 0x42a58
movl 0x5616f(%rip), %ebx     # 0x989e0
incl %ebx
movl %ebx, 0x56167(%rip)     # 0x989e0
movl $0x5, %edi
callq 0x42575
movl %ebx, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0xd4a8(%rip), %rdi      # 0x4fd3d
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4259e
movl %ebx, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: emit_conditional_end
static int emit_conditional_end(int target_false)
{
	struct storage *cond_end_st;
	int cond_end;

	/* finished generating code for if-true statement.
	 * add a jump-to-end jump to avoid falling through
	 * to the if-false statement code.
	 */
	cond_end = new_label();
	cond_end_st = new_storage(STOR_LABEL);
	cond_end_st->label = cond_end;
	cond_end_st->flags = STOR_WANTS_FREE;
	insn("jmp", cond_end_st, NULL, NULL);

	/* if we have both if-true and if-false statements,
	 * the failed-conditional case will fall through to here
	 */
	emit_label(target_false, NULL);

	return cond_end;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x48, %rsp
movl %edi, %ebp
movl 0x56129(%rip), %ebx     # 0x989e0
incl %ebx
movl %ebx, 0x56121(%rip)     # 0x989e0
movl $0x5, %edi
callq 0x42575
movl %ebx, 0x20(%rax)
movq $0x2, 0x8(%rax)
leaq 0x80ce(%rip), %rdi      # 0x4a9a9
movq %rax, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4259e
movq 0x560ea(%rip), %r14     # 0x989d8
leaq 0x67ca(%rip), %rsi      # 0x490bf
movq %rsp, %r15
movq %r15, %rdi
movl %ebp, %edx
xorl %eax, %eax
callq 0xe2f0
movq %r14, %rdi
movq %r15, %rsi
callq 0x42a90
movl %ebx, %eax
addq $0x48, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: emit_comment
static void emit_comment(const char *fmt, ...)
{
	struct function *f = current_func;
	static char tmpbuf[100] = "\t# ";
	va_list args;
	int i;

	va_start(args, fmt);
	i = vsnprintf(tmpbuf+3, sizeof(tmpbuf)-4, fmt, args);
	va_end(args);
	tmpbuf[i+3] = '\n';
	tmpbuf[i+4] = '\0';
	push_text_atom(f, tmpbuf);
}

// Assembly:
pushq %rbx
subq $0xd0, %rsp
movq %rdi, %r10
testb %al, %al
je 0x42962
movaps %xmm0, 0x50(%rsp)
movaps %xmm1, 0x60(%rsp)
movaps %xmm2, 0x70(%rsp)
movaps %xmm3, 0x80(%rsp)
movaps %xmm4, 0x90(%rsp)
movaps %xmm5, 0xa0(%rsp)
movaps %xmm6, 0xb0(%rsp)
movaps %xmm7, 0xc0(%rsp)
leaq 0x20(%rsp), %rax
movq %rsi, 0x8(%rax)
movq %rdx, 0x10(%rax)
movq %rcx, 0x18(%rax)
movq %r8, 0x20(%rax)
movq %r9, 0x28(%rax)
movq 0x56056(%rip), %rbx     # 0x989d8
movq %rsp, %rcx
movq %rax, 0x10(%rcx)
leaq 0xe0(%rsp), %rax
movq %rax, 0x8(%rcx)
movabsq $0x3000000008, %rax     # imm = 0x3000000008
movq %rax, (%rcx)
leaq 0x293ba(%rip), %rdi     # 0x6bd63
movl $0x60, %esi
movq %r10, %rdx
callq 0xe0c0
leaq 0x293a3(%rip), %rsi     # 0x6bd60
cltq
movw $0xa, 0x3(%rax,%rsi)
movq %rbx, %rdi
callq 0x42a90
addq $0xd0, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: get_reg_value
static struct storage *get_reg_value(struct storage *value, struct regclass *class)
{
	struct reg_info *info;
	struct storage *reg;

	/* Do we already have it somewhere */
	info = value->reg;
	if (info && info->contains == value) {
		emit_comment("already have register %s", info->name);
		return get_hardreg(hardreg_storage_table + info->own_regno, 0);
	}

	reg = get_reg(class);
	emit_move(value, reg, value->ctype, "reload register");
	info = reg->reg;
	info->contains = value;
	value->reg = info;
	return reg;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x10(%rdi), %r14
testq %r14, %r14
je 0x429ed
cmpq %rbx, 0x8(%r14)
je 0x42a1c
movq %rsi, %rdi
callq 0x42b78
movq %rax, %r14
movq 0x18(%rbx), %rdx
leaq 0xd362(%rip), %rcx      # 0x4fd65
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4263e
movq 0x10(%r14), %rax
movq %rbx, 0x8(%rax)
movq %rax, 0x10(%rbx)
jmp 0x42a4d
movq (%r14), %rsi
leaq 0xd326(%rip), %rdi      # 0x4fd4c
xorl %eax, %eax
callq 0x4291c
movzbl 0x10(%r14), %eax
leaq (%rax,%rax,2), %rax
shll $0x4, %eax
leaq 0x28a60(%rip), %r14     # 0x6b4a0
addq %rax, %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x42afa
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: put_reg
static void put_reg(struct storage *reg)
{
	struct reg_info *info = reg->reg;
	int regno = info->own_regno;

	if (test_and_clear_bit(regno, regs_in_use))
		return;
	fprintf(stderr, "freeing already free'd register %s\n", reg_info_table[regno].name);
}

// Assembly:
movq 0x10(%rdi), %rax
movzbl 0x10(%rax), %eax
movl %eax, %ecx
shrl $0x6, %ecx
leaq 0x55fa4(%rip), %rdx     # 0x98a10
movq (%rdx,%rcx,8), %rsi
movq %rsi, %rdi
btrq %rax, %rdi
movq %rdi, (%rdx,%rcx,8)
btq %rax, %rsi
jae 0x42a82
retq
pushq %rax
movzbl %al, %edi
callq 0xe8e3
addq $0x8, %rsp
retq
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: push_text_atom
static void push_text_atom(struct function *f, const char *text)
{
	struct atom *atom = new_atom(ATOM_TEXT);

	atom->text = strdup(text);
	atom->text_len = strlen(text);

	push_atom(f, atom);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
xorl %edi, %edi
callq 0x42ad1
movq %rax, %r15
movq %rbx, %rdi
callq 0xe310
movq %rax, 0x8(%r15)
movq %rbx, %rdi
callq 0xe0f0
movl %eax, 0x10(%r15)
addq $0x10, %r14
movq %r14, %rdi
movq %r15, %rsi
popq %rbx
popq %r14
popq %r15
jmp 0x1c78f
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: new_atom
static struct atom *new_atom(enum atom_type type)
{
	struct atom *atom;

	atom = calloc(1, sizeof(*atom));	/* TODO: chunked alloc */
	if (!atom)
		die("nuclear OOM");

	atom->type = type;

	return atom;
}

// Assembly:
pushq %rbx
movl %edi, %ebx
movl $0x1, %edi
movl $0x60, %esi
callq 0xe1e0
testq %rax, %rax
je 0x42aec
movl %ebx, (%rax)
popq %rbx
retq
leaq 0xd24d(%rip), %rdi      # 0x4fd40
xorl %eax, %eax
callq 0x11d6e
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: get_hardreg
static struct storage * get_hardreg(struct storage *reg, int clear)
{
	struct reg_info *info = reg->reg;
	const unsigned char *aliases;
	int regno;

	aliases = info->aliases;
	while ((regno = *aliases++) != NOREG) {
		if (test_bit(regno, regs_in_use))
			goto busy;
		if (clear)
			reg_info_table[regno].contains = NULL;
	}
	set_bit(info->own_regno, regs_in_use);
	return reg;
busy:
	fprintf(stderr, "register %s is busy\n", info->name);
	if (regno + reg_info_table != info)
		fprintf(stderr, "  conflicts with %s\n", reg_info_table[regno].name);
	exit(1);
}

// Assembly:
pushq %rax
movq 0x10(%rdi), %rax
movb 0x10(%rax), %r10b
testb %r10b, %r10b
je 0x42b4f
leaq 0x11(%rax), %rdx
leaq 0x55efd(%rip), %r8      # 0x98a10
leaq 0x28ec6(%rip), %r9      # 0x6b9e0
movzbl %r10b, %ecx
shrb $0x3, %r10b
movzbl %r10b, %r10d
andl $0x18, %r10d
movq (%r10,%r8), %r10
btq %rcx, %r10
jb 0x42b6e
testl %esi, %esi
je 0x42b44
shll $0x5, %ecx
movq $0x0, 0x8(%rcx,%r9)
movb (%rdx), %r10b
incq %rdx
testb %r10b, %r10b
jne 0x42b1a
movzbl 0x10(%rax), %ecx
movl $0x1, %eax
shlq %cl, %rax
shrl $0x6, %ecx
leaq 0x55eab(%rip), %rdx     # 0x98a10
orq %rax, (%rdx,%rcx,8)
movq %rdi, %rax
popq %rcx
retq
movq %rax, %rdi
movl %ecx, %esi
callq 0xe910
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: get_reg
static struct storage *get_reg(struct regclass *class)
{
	const unsigned char *regs = class->regs;
	int regno;

	while ((regno = *regs) != NOREG) {
		regs++;
		if (register_busy(regno))
			continue;
		return get_hardreg(hardreg_storage_table + regno, 1);
	}
	fprintf(stderr, "Ran out of %s registers\n", class->name);
	exit(1);
}

// Assembly:
pushq %rax
movb 0x8(%rdi), %r8b
testb %r8b, %r8b
je 0x42be4
leaq 0x8(%rdi), %rax
leaq 0x55e83(%rip), %rcx     # 0x98a10
leaq 0x28e4c(%rip), %rdx     # 0x6b9e0
movzbl %r8b, %esi
shrb $0x3, %r8b
movzbl %r8b, %r8d
andl $0x18, %r8d
movq (%r8,%rcx), %r8
btq %rsi, %r8
jb 0x42bd9
movl %esi, %r8d
shll $0x5, %r8d
addq %rdx, %r8
addq $0x11, %r8
movzbl (%r8), %r9d
testq %r9, %r9
je 0x42be9
incq %r8
movl %r9d, %r10d
shrl $0x6, %r10d
movq (%rcx,%r10,8), %r10
btq %r9, %r10
jae 0x42bbc
incq %rax
movb (%rax), %r8b
testb %r8b, %r8b
jne 0x42b94
callq 0xe96c
leaq (%rsi,%rsi,2), %rax
shll $0x4, %eax
leaq 0x288a9(%rip), %rdi     # 0x6b4a0
addq %rax, %rdi
movl $0x1, %esi
popq %rax
jmp 0x42afa
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: stor_op_name
static const char *stor_op_name(struct storage *s)
{
	static char name[32];

	switch (s->type) {
	case STOR_PSEUDO:
		strcpy(name, pretty_offset((int) pseudo_offset(s)));
		break;
	case STOR_ARG:
		strcpy(name, pretty_offset((int) arg_offset(s)));
		break;
	case STOR_SYM:
		strcpy(name, show_ident(s->sym->ident));
		break;
	case STOR_REG:
		strcpy(name, s->reg->name);
		break;
	case STOR_VALUE:
		sprintf(name, "$%lld", s->value);
		break;
	case STOR_LABEL:
		sprintf(name, "%s.L%d", s->flags & STOR_LABEL_VAL ? "$" : "",
			s->label);
		break;
	case STOR_LABELSYM:
		sprintf(name, "%s.LS%p", s->flags & STOR_LABEL_VAL ? "$" : "",
			s->labelsym);
		break;
	}

	return name;
}

// Assembly:
pushq %rax
movl (%rdi), %eax
cmpq $0x6, %rax
ja 0x42c7e
leaq 0xcd7b(%rip), %rcx      # 0x4f990
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x24(%rdi), %edx
testl %edx, %edx
jne 0x42c94
movl $0x297073, 0x56604(%rip) # imm = 0x297073
movl $0x73652528, 0x565f7(%rip) # imm = 0x73652528
jmp 0x42ca9
movq 0x20(%rdi), %rdx
leaq 0x565ca(%rip), %rdi     # 0x99210
leaq 0xb025(%rip), %rsi      # 0x4dc72
xorl %eax, %eax
popq %rcx
jmp 0xe2f0
movq 0x20(%rdi), %rax
movq 0x18(%rax), %rdi
callq 0x21d75
leaq 0x565a7(%rip), %rdi     # 0x99210
movq %rax, %rsi
jmp 0x42cb7
movq 0x10(%rdi), %rax
movq (%rax), %rsi
leaq 0x56594(%rip), %rdi     # 0x99210
jmp 0x42cb7
popq %rax
retq
movq 0x55d51(%rip), %rax     # 0x989d8
movl 0x20(%rdi), %edx
shll $0x2, %edx
addl (%rax), %edx
addl $0x4, %edx
je 0x42c25
leaq 0x56595(%rip), %rdi     # 0x99230
leaq 0xd368(%rip), %rsi      # 0x5000a
xorl %eax, %eax
callq 0xe2f0
leaq 0x56560(%rip), %rdi     # 0x99210
leaq 0x56579(%rip), %rsi     # 0x99230
popq %rax
jmp 0xe0a0
testb $0x1, 0x8(%rdi)
leaq 0x1c05(%rip), %rax      # 0x448cd
leaq 0xd331(%rip), %rdx      # 0x50000
cmoveq %rax, %rdx
movl 0x20(%rdi), %ecx
leaq 0x56533(%rip), %rdi     # 0x99210
leaq 0xd315(%rip), %rsi      # 0x4fff9
xorl %eax, %eax
popq %r8
jmp 0xe2f0
testb $0x1, 0x8(%rdi)
leaq 0x1bd5(%rip), %rax      # 0x448cd
leaq 0xd301(%rip), %rdx      # 0x50000
cmoveq %rax, %rdx
movq 0x20(%rdi), %rcx
leaq 0x56502(%rip), %rdi     # 0x99210
leaq 0xd2ed(%rip), %rsi      # 0x50002
xorl %eax, %eax
popq %r8
jmp 0xe2f0
// File: /workspace/github_c_makefile_star2_O1/lucvoo[P]sparse-dev/compile-i386.c
// Function: x86_assignment
static struct storage *x86_assignment(struct expression *expr)
{
	struct expression *target = expr->left;
	struct storage *val, *addr;

	if (!expr->ctype)
		return NULL;

	val = x86_expression(expr->right);
	addr = x86_address_gen(target);

	switch (val->type) {
	/* copy, where both operands are memory */
	case STOR_PSEUDO:
	case STOR_ARG:
		emit_copy(addr, val, expr->ctype);
		break;

	/* copy, one or zero operands are memory */
	case STOR_REG:
	case STOR_SYM:
	case STOR_VALUE:
	case STOR_LABEL:
		emit_move(val, addr, expr->left->ctype, NULL);
		break;

	case STOR_LABELSYM:
		assert(0);
		break;
	}
	return val;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
cmpq $0x0, 0x10(%rdi)
je 0x42f4c
movq %rdi, %r14
movq 0x20(%rdi), %r15
movq 0x28(%rdi), %rdi
callq 0x41d4f
movq %rax, %rbx
movq %r15, %rdi
callq 0x4380b
movl (%rbx), %ecx
leal -0x2(%rcx), %edx
cmpl $0x4, %edx
jae 0x42f50
movq 0x20(%r14), %rcx
movq 0x10(%rcx), %rdx
movq %rbx, %rdi
movq %rax, %rsi
xorl %ecx, %ecx
callq 0x4263e
jmp 0x42f6b
xorl %ebx, %ebx
jmp 0x42f6b
cmpl $0x2, %ecx
jae 0x42f66
movq 0x10(%r14), %rdx
movq %rax, %rdi
movq %rbx, %rsi
callq 0x43899
jmp 0x42f6b
cmpl $0x6, %ecx
je 0x42f74
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x5f16(%rip), %rdi      # 0x48e91
leaq 0xcaba(%rip), %rsi      # 0x4fa3c
leaq 0xd0e8(%rip), %rcx      # 0x50071
movl $0x88a, %edx            # imm = 0x88A
callq 0xe140