// File: /workspace/github_c_makefile_star2_O0/almk277[P]ROSE/rose/module.c
// Function: module_new
static Module *module_new(const RMDHeader *h)
{
	Module *m;

	size_t exp_start  = sizeof(Module);
	size_t exp_size   = h->sizes.exp * sizeof(RMDExport);
	size_t ptbl_start = exp_start + exp_size;
	size_t ptbl_size  = h->sizes.ptbl * sizeof(RMDProcedure);
	size_t mtbl_start = ptbl_start + ptbl_size;
	size_t mtbl_size  = h->sizes.mtbl * sizeof(RMDModule);
	size_t imp_start  = mtbl_start + mtbl_size;
	size_t imp_size   = h->sizes.imp * sizeof(RMDImport);
	size_t text_start = imp_start + imp_size;
	size_t text_size  = h->sizes.text;
	size_t sym_start  = text_start + text_size;
	size_t sym_size   = h->sizes.sym;
	size_t str_start  = sym_start + sym_size;
	size_t str_size   = h->sizes.str;

	size_t size = sizeof(Module)
		+ exp_size + ptbl_size + mtbl_size + imp_size
		+ text_size + sym_size + str_size;

	R_Byte *start = malloc(size);
	if (!start)
		return NULL;
	m = (Module *)start;

	m->seg.exp.start  = (RMDExport*)(start + exp_start);
	m->seg.exp.size   = h->sizes.exp;
	m->seg.ptbl.start = (RMDProcedure*)(start + ptbl_start);
	m->seg.ptbl.size  = h->sizes.ptbl;
	m->seg.mtbl.start = (RMDModule*)(start + mtbl_start);
	m->seg.mtbl.size  = h->sizes.mtbl;
	m->seg.imp.start  = (RMDImport*)(start + imp_start);
	m->seg.imp.size   = h->sizes.imp;
	m->seg.text.start = start + text_start;
	m->seg.text.size  = text_size;
	m->seg.sym.start  = (char*)(start + sym_start);
	m->seg.sym.size   = sym_size;
	m->seg.str.start  = start + str_start;
	m->seg.str.size   = str_size;

	m->version = h->version;
	m->datac = h->datac;

	return m;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x10(%rbp)
movq $0x88, -0x20(%rbp)
movq -0x10(%rbp), %rax
movzbl 0xc(%rax), %eax
shlq $0x2, %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
addq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movzbl 0xd(%rax), %eax
imulq $0xc, %rax, %rax
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rax
addq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rax
movzbl 0xe(%rax), %eax
shlq $0x2, %rax
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rax
addq -0x48(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movzbl 0xf(%rax), %eax
imulq $0x6, %rax, %rax
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
addq -0x58(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
addq -0x68(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rax
movzwl 0x14(%rax), %eax
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rax
addq -0x78(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movq %rax, -0x88(%rbp)
movq -0x28(%rbp), %rax
addq $0x88, %rax
addq -0x38(%rbp), %rax
addq -0x48(%rbp), %rax
addq -0x58(%rbp), %rax
addq -0x68(%rbp), %rax
addq -0x78(%rbp), %rax
addq -0x88(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rdi
callq 0x1130
movq %rax, -0x98(%rbp)
cmpq $0x0, -0x98(%rbp)
jne 0x1b8a
movq $0x0, -0x8(%rbp)
jmp 0x1ca7
movq -0x98(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x98(%rbp), %rcx
addq -0x20(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rax
movb 0xc(%rax), %cl
movq -0x18(%rbp), %rax
movb %cl, 0x18(%rax)
movq -0x98(%rbp), %rcx
addq -0x30(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rax
movb 0xd(%rax), %cl
movq -0x18(%rbp), %rax
movb %cl, 0x28(%rax)
movq -0x98(%rbp), %rcx
addq -0x40(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rax
movb 0xe(%rax), %cl
movq -0x18(%rbp), %rax
movb %cl, 0x38(%rax)
movq -0x98(%rbp), %rcx
addq -0x50(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
movb 0xf(%rax), %cl
movq -0x18(%rbp), %rax
movb %cl, 0x48(%rax)
movq -0x98(%rbp), %rcx
addq -0x60(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x68(%rbp), %rax
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x58(%rax)
movq -0x98(%rbp), %rcx
addq -0x70(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x60(%rax)
movq -0x78(%rbp), %rax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x68(%rax)
movq -0x98(%rbp), %rcx
addq -0x80(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x70(%rax)
movq -0x88(%rbp), %rax
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x78(%rax)
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movw 0x8(%rcx), %cx
movw %cx, 0x8(%rax)
movq -0x10(%rbp), %rax
movb 0x1c(%rax), %cl
movq -0x18(%rbp), %rax
movb %cl, 0x80(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0xa0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)