// File: /workspace/github_c_makefile_star2_O2/rakitzis[P]rc/tree.c
// Function: mk
extern Node *mk(enum nodetype t,...) {
	va_list ap;
	Node *n;
	va_start(ap, t);
	switch (t) {
	default:
		panic("unexpected node in mk");
		/* NOTREACHED */
	case nDup:
		n = nalloc(offsetof(Node, u[3]));
		n->u[0].i = va_arg(ap, int);
		n->u[1].i = va_arg(ap, int);
		n->u[2].i = va_arg(ap, int);
		break;
	case nWord:
		n = nalloc(offsetof(Node, u[3]));
		n->u[0].s = va_arg(ap, char *);
		n->u[1].s = va_arg(ap, char *);
		n->u[2].i = va_arg(ap, int);
		break;
	case nBang: case nNowait:
	case nCount: case nFlat: case nRmfn: case nSubshell:
	case nVar: case nCase:
		n = nalloc(offsetof(Node, u[1]));
		n->u[0].p = va_arg(ap, Node *);
		break;
	case nAndalso: case nAssign: case nBackq: case nBody: case nBrace: case nConcat:
	case nElse: case nEpilog: case nIf: case nNewfn: case nCbody:
	case nOrelse: case nPre: case nArgs: case nSwitch:
	case nMatch: case nVarsub: case nWhile: case nLappend:
		n = nalloc(offsetof(Node, u[2]));
		n->u[0].p = va_arg(ap, Node *);
		n->u[1].p = va_arg(ap, Node *);
		break;
	case nForin:
		n = nalloc(offsetof(Node, u[3]));
		n->u[0].p = va_arg(ap, Node *);
		n->u[1].p = va_arg(ap, Node *);
		n->u[2].p = va_arg(ap, Node *);
		break;
	case nPipe:
		n = nalloc(offsetof(Node, u[4]));
		n->u[0].i = va_arg(ap, int);
		n->u[1].i = va_arg(ap, int);
		n->u[2].p = va_arg(ap, Node *);
		n->u[3].p = va_arg(ap, Node *);
		break;
	case nRedir:
	case nNmpipe:
		n = nalloc(offsetof(Node, u[3]));
		n->u[0].i = va_arg(ap, int);
		n->u[1].i = va_arg(ap, int);
		n->u[2].p = va_arg(ap, Node *);
		break;
	}
	n->type = t;
	va_end(ap);
	return n;
}

// Assembly:
pushq %rbx
subq $0xd0, %rsp
movl %edi, %ebx
leaq 0x20(%rsp), %rdi
movq %rsi, 0x8(%rdi)
movq %rdx, 0x10(%rdi)
movq %rcx, 0x18(%rdi)
movq %r8, 0x20(%rdi)
movq %r9, 0x28(%rdi)
testb %al, %al
je 0xb856
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)
movq %rdi, 0x10(%rsp)
leaq 0xe0(%rsp), %rax
movq %rax, 0x8(%rsp)
movabsq $0x3000000008, %rax     # imm = 0x3000000008
movq %rax, (%rsp)
cmpl $0x20, %ebx
ja 0xbabf
movl %ebx, %eax
leaq 0x7b2c(%rip), %rcx      # 0x133b4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
pushq $0x18
popq %rdi
callq 0x9928
movl (%rsp), %ecx
cmpq $0x29, %rcx
jae 0xb8c8
movq 0x10(%rsp), %rsi
leaq 0x8(%rcx), %rdx
movl %edx, (%rsp)
movq (%rsi,%rcx), %rsi
movq %rsi, 0x8(%rax)
cmpl $0x20, %ecx
ja 0xb8dd
addq 0x10(%rsp), %rdx
addl $0x10, %ecx
movl %ecx, (%rsp)
jmp 0xb8eb
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq (%rcx), %rcx
movq %rcx, 0x8(%rax)
movq 0x8(%rsp), %rdx
leaq 0x8(%rdx), %rcx
movq %rcx, 0x8(%rsp)
movq (%rdx), %rcx
movq %rcx, 0x10(%rax)
jmp 0xbc12
pushq $0x10
popq %rdi
callq 0x9928
movl (%rsp), %edx
cmpq $0x28, %rdx
ja 0xb918
movq %rdx, %rcx
addq 0x10(%rsp), %rcx
addl $0x8, %edx
movl %edx, (%rsp)
jmp 0xb926
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq (%rcx), %rcx
movq %rcx, 0x8(%rax)
jmp 0xbc12
pushq $0x20
popq %rdi
callq 0x9928
movl (%rsp), %ecx
cmpq $0x29, %rcx
jae 0xb971
movq 0x10(%rsp), %rdx
leal 0x8(%rcx), %esi
movl %esi, (%rsp)
movl (%rdx,%rcx), %edx
movl %edx, 0x8(%rax)
cmpl $0x21, %ecx
jae 0xb984
movq 0x10(%rsp), %rsi
leaq 0x10(%rcx), %rdx
movl %edx, (%rsp)
movl 0x8(%rsi,%rcx), %esi
movl %esi, 0x10(%rax)
jmp 0xba2d
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movl (%rcx), %ecx
movl %ecx, 0x8(%rax)
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movl (%rcx), %ecx
movl %ecx, 0x10(%rax)
jmp 0xbbab
pushq $0x20
popq %rdi
callq 0x9928
movl (%rsp), %ecx
cmpq $0x29, %rcx
jae 0xbb3f
movq 0x10(%rsp), %rdx
leal 0x8(%rcx), %esi
movl %esi, (%rsp)
movq (%rdx,%rcx), %rdx
movq %rdx, 0x8(%rax)
cmpl $0x21, %ecx
jae 0xbb54
movq 0x10(%rsp), %rsi
leaq 0x10(%rcx), %rdx
movl %edx, (%rsp)
movq 0x8(%rsi,%rcx), %rsi
movq %rsi, 0x10(%rax)
jmp 0xbb05
pushq $0x20
popq %rdi
callq 0x9928
movl (%rsp), %ecx
cmpq $0x29, %rcx
jae 0xbb81
movq 0x10(%rsp), %rdx
leal 0x8(%rcx), %esi
movl %esi, (%rsp)
movq (%rdx,%rcx), %rdx
movq %rdx, 0x8(%rax)
cmpl $0x21, %ecx
jae 0xbb96
movq 0x10(%rsp), %rsi
leaq 0x10(%rcx), %rdx
movl %edx, (%rsp)
movq 0x8(%rsi,%rcx), %rsi
movq %rsi, 0x10(%rax)
cmpl $0x18, %ecx
ja 0xbbab
addq 0x10(%rsp), %rdx
addl $0x18, %ecx
movl %ecx, (%rsp)
jmp 0xbbb9
pushq $0x28
popq %rdi
callq 0x9928
movl (%rsp), %ecx
cmpq $0x29, %rcx
jae 0xbbc2
movq 0x10(%rsp), %rsi
leaq 0x8(%rcx), %rdx
movl %edx, (%rsp)
movl (%rsi,%rcx), %esi
movl %esi, 0x8(%rax)
cmpl $0x21, %ecx
jae 0xbbd5
movq 0x10(%rsp), %rsi
leal 0x10(%rcx), %edi
movl %edi, (%rsp)
movl (%rsi,%rdx), %edx
movl %edx, 0x10(%rax)
cmpl $0x19, %ecx
jae 0xbbe8
movq 0x10(%rsp), %rsi
leal 0x18(%rcx), %edx
movl %edx, (%rsp)
movq 0x10(%rsi,%rcx), %rsi
movq %rsi, 0x18(%rax)
cmpl $0x10, %ecx
ja 0xbbfd
movl %edx, %edx
addq 0x10(%rsp), %rdx
orl $0x20, %ecx
movl %ecx, (%rsp)
jmp 0xbc0b
leaq 0x7a7a(%rip), %rdi      # 0x13540
callq 0xbeea
pushq $0x20
popq %rdi
callq 0x9928
movl (%rsp), %ecx
cmpq $0x29, %rcx
jae 0xbb17
movq 0x10(%rsp), %rdx
leal 0x8(%rcx), %esi
movl %esi, (%rsp)
movl (%rdx,%rcx), %edx
movl %edx, 0x8(%rax)
cmpl $0x21, %ecx
jae 0xbb2a
movq 0x10(%rsp), %rsi
leaq 0x10(%rcx), %rdx
movl %edx, (%rsp)
movl 0x8(%rsi,%rcx), %esi
movl %esi, 0x10(%rax)
cmpl $0x18, %ecx
ja 0xbb69
addq 0x10(%rsp), %rdx
addl $0x18, %ecx
movl %ecx, (%rsp)
jmp 0xbb77
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movl (%rcx), %ecx
movl %ecx, 0x8(%rax)
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movl (%rcx), %ecx
movl %ecx, 0x10(%rax)
jmp 0xbb69
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq (%rcx), %rcx
movq %rcx, 0x8(%rax)
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq (%rcx), %rcx
movq %rcx, 0x10(%rax)
movq 0x8(%rsp), %rdx
leaq 0x8(%rdx), %rcx
movq %rcx, 0x8(%rsp)
movl (%rdx), %ecx
movl %ecx, 0x18(%rax)
jmp 0xbc12
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq (%rcx), %rcx
movq %rcx, 0x8(%rax)
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq (%rcx), %rcx
movq %rcx, 0x10(%rax)
movq 0x8(%rsp), %rdx
leaq 0x8(%rdx), %rcx
movq %rcx, 0x8(%rsp)
movq (%rdx), %rcx
movq %rcx, 0x18(%rax)
jmp 0xbc12
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movl (%rcx), %ecx
movl %ecx, 0x8(%rax)
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movl (%rcx), %ecx
movl %ecx, 0x10(%rax)
movq 0x8(%rsp), %rcx
leaq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq (%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x8(%rsp), %rdx
leaq 0x8(%rdx), %rcx
movq %rcx, 0x8(%rsp)
movq (%rdx), %rcx
movq %rcx, 0x20(%rax)
movl %ebx, (%rax)
addq $0xd0, %rsp
popq %rbx
retq