// File: /workspace/github_c_makefile_star2_O0/oridb[P]mc/6/typeinfo.c
// Function: tysize
size_t
tysize(Type *t)
{
	size_t sz;
	size_t i;

	sz = 0;
	if (!t)
		die("size of empty type => bailing.");
	switch (t->type) {
	case Tyvoid:
		return 0;
	case Tybool: case Tyint8:
	case Tybyte: case Tyuint8:
		return 1;
	case Tyint16: case Tyuint16:
		return 2;
	case Tyint: case Tyint32:
	case Tyuint: case Tyuint32:
	case Tychar:  /* utf32 */
		return 4;

	case Typtr:
	case Tyvalist: /* ptr to first element of valist */
		return Ptrsz;

	case Tyint64:
	case Tyuint64:
		return 8;

		/*end integer types*/
	case Tyflt32:
		return 4;
	case Tyflt64:
		return 8;

	case Tycode:
		return Ptrsz;
	case Tyfunc:
		return 2*Ptrsz;
	case Tyslice:
		return 2*Ptrsz; /* len; ptr */
	case Tyname:
		return tysize(t->sub[0]);
	case Tyarray:
		if (!t->asize)
			return 0;
		t->asize = fold(t->asize, 1);
		assert(exprop(t->asize) == Olit);
		return t->asize->expr.args[0]->lit.intval * tysize(t->sub[0]);
	case Tytuple:
		for (i = 0; i < t->nsub; i++) {
			sz = alignto(sz, t->sub[i]);
			sz += tysize(t->sub[i]);
		}
		sz = alignto(sz, t);
		return sz;
		break;
	case Tystruct:
		for (i = 0; i < t->nmemb; i++) {
			sz = alignto(sz, decltype(t->sdecls[i]));
			sz += size(t->sdecls[i]);
		}
		sz = alignto(sz, t);
		return sz;
		break;
	case Tyunion:
		sz = Wordsz;
		for (i = 0; i < t->nmemb; i++)
			if (t->udecls[i]->etype)
				sz = max(sz, tysize(t->udecls[i]->etype) + Wordsz);
		return align(sz, tyalign(t));
		break;
	case Tygeneric: case Tybad: case Tyvar:
	case Typaram: case Tyunres: case Ntypes:
		die("Type %s does not have size; why did it get down to here?", tystr(t));
		break;
	}
	return -1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0x1c119
leaq 0x32697(%rip), %rdi     # 0x4e7a9
movb $0x0, %al
callq 0x1df20
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x28(%rbp)
subq $0x1f, %rax
ja 0x1c466
movq -0x28(%rbp), %rax
leaq 0x324a8(%rip), %rcx     # 0x4e5e0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq $0x0, -0x8(%rbp)
jmp 0x1c46e
movq $0x1, -0x8(%rbp)
jmp 0x1c46e
movq $0x2, -0x8(%rbp)
jmp 0x1c46e
movq $0x4, -0x8(%rbp)
jmp 0x1c46e
movq $0x8, -0x8(%rbp)
jmp 0x1c46e
movq $0x8, -0x8(%rbp)
jmp 0x1c46e
movq $0x4, -0x8(%rbp)
jmp 0x1c46e
movq $0x8, -0x8(%rbp)
jmp 0x1c46e
movq $0x8, -0x8(%rbp)
jmp 0x1c46e
movq $0x10, -0x8(%rbp)
jmp 0x1c46e
movq $0x10, -0x8(%rbp)
jmp 0x1c46e
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rax
movq (%rax), %rdi
callq 0x1c0f0
movq %rax, -0x8(%rbp)
jmp 0x1c46e
movq -0x10(%rbp), %rax
cmpq $0x0, 0x88(%rax)
jne 0x1c204
movq $0x0, -0x8(%rbp)
jmp 0x1c46e
movq -0x10(%rbp), %rax
movq 0x88(%rax), %rdi
movl $0x1, %esi
callq 0x1f390
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x10(%rbp), %rax
movq 0x88(%rax), %rdi
callq 0x2f210
cmpl $0x35, %eax
jne 0x1c23e
jmp 0x1c25d
leaq 0x32583(%rip), %rdi     # 0x4e7c8
leaq 0x3250c(%rip), %rsi     # 0x4e758
movl $0x120, %edx            # imm = 0x120
leaq 0x32589(%rip), %rcx     # 0x4e7e1
callq 0x6160
movq -0x10(%rbp), %rax
movq 0x88(%rax), %rax
movq 0x50(%rax), %rax
movq (%rax), %rax
movq 0x30(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rax
movq (%rax), %rdi
callq 0x1c0f0
movq %rax, %rcx
movq -0x30(%rbp), %rax
imulq %rcx, %rax
movq %rax, -0x8(%rbp)
jmp 0x1c46e
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x70(%rcx), %rax
jae 0x1c2f9
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rax
movq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x16770
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rax
movq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x1c0f0
addq -0x18(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x1c2a3
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x16770
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1c46e
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x78(%rcx), %rax
jae 0x1c38b
movq -0x18(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq 0x88(%rax), %rax
movq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x30260
movq -0x38(%rbp), %rdi
movq %rax, %rsi
callq 0x16770
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x88(%rax), %rax
movq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x1c480
addq -0x18(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x1c31f
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x16770
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1c46e
movq $0x4, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x78(%rcx), %rax
jae 0x1c429
movq -0x10(%rbp), %rax
movq 0x88(%rax), %rax
movq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
cmpq $0x0, 0x28(%rax)
je 0x1c419
movq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rax
movq 0x88(%rax), %rax
movq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x28(%rax), %rdi
callq 0x1c0f0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
addq $0x4, %rsi
callq 0x4a550
movq %rax, -0x18(%rbp)
jmp 0x1c41b
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x1c3b9
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rdi
callq 0x1c4c0
movq -0x48(%rbp), %rdi
movq %rax, %rsi
callq 0x4a5b0
movq %rax, -0x8(%rbp)
jmp 0x1c46e
movq -0x10(%rbp), %rdi
callq 0x38a10
movq %rax, %rsi
leaq 0x32398(%rip), %rdi     # 0x4e7f7
movb $0x0, %al
callq 0x1df20
movq $-0x1, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax,%rax)