// File: /workspace/github_cpp_makefile_star2_O3/xdsopl[P]FEC/tables_generator.cc
// Function: TablesGenerator<8, 285, unsigned char>::generate(char const*)
static void generate(const char *type)
	{
		TYPE log[Q], exp[Q];
		log[exp[N] = 0] = N;
		TYPE a = 1;
		for (int i = 0; i < N; ++i, a = next(a))
			log[exp[i] = a] = i;
		assert(1 == a);
		TYPE Artin_Schreier_imap[Q];
		for (int i = 0; i < Q; ++i)
			Artin_Schreier_imap[i] = 0;
		for (int x = 2; x < N; x += 2) {
			int xxx = exp[(2*log[x])%N]^x;
			if (xxx == N)
				continue;
			assert(xxx);
			assert(!Artin_Schreier_imap[xxx]);
			Artin_Schreier_imap[xxx] = x;
		}
		std::cout << "template <>" << std::endl;
		std::cout << "struct Tables<" << M << ", " << POLY << ", " << type << ">\n{\n";
		print(log, "log", type, Q);
		print(exp, "exp", type, Q);
		print(Artin_Schreier_imap, "Artin_Schreier_imap", type, Q);
		std::cout << "};\n" << std::endl;
	}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x308, %rsp            # imm = 0x308
movq %rdi, %rbx
movb $0x0, 0x1ff(%rsp)
movb $-0x1, 0x200(%rsp)
movb $0x1, %cl
xorl %eax, %eax
movb %cl, 0x100(%rsp,%rax)
movzbl %cl, %ecx
movb %al, 0x200(%rsp,%rcx)
incq %rax
leal (%rcx,%rcx), %edx
movzbl %dl, %esi
xorb $0x1d, %dl
testb %cl, %cl
movzbl %dl, %ecx
cmovnsl %esi, %ecx
cmpq $0xff, %rax
jne 0x15cb
cmpb $0x1, %cl
jne 0x182d
movq %rsp, %rdi
movl $0x100, %edx            # imm = 0x100
xorl %esi, %esi
callq 0x1050
movl $0x2, %eax
movzbl 0x200(%rsp,%rax), %ecx
imull $0x406, %ecx, %edx      # imm = 0x406
shrl $0x11, %edx
movl %edx, %esi
shll $0x8, %esi
subl %esi, %edx
leal (%rdx,%rcx,2), %ecx
movzwl %cx, %ecx
movzbl 0x100(%rsp,%rcx), %edx
movl %eax, %ecx
xorl %edx, %ecx
cmpl $0xff, %ecx
je 0x165f
cmpq %rdx, %rax
je 0x17ef
movl %ecx, %ecx
cmpb $0x0, (%rsp,%rcx)
jne 0x180e
movb %al, (%rsp,%rcx)
leaq 0x2(%rax), %rcx
cmpq $0xfd, %rax
movq %rcx, %rax
jb 0x1615
movq 0x3963(%rip), %r14      # 0x4fd8
leaq 0x1aa1(%rip), %rsi      # 0x311d
movl $0xb, %edx
movq %r14, %rdi
callq 0x10a0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x1090
movsbl %al, %esi
movq %r14, %rdi
callq 0x1030
movq %rax, %rdi
callq 0x1070
leaq 0x1a72(%rip), %rsi      # 0x3129
movl $0xe, %edx
movq %r14, %rdi
callq 0x10a0
movq %r14, %rdi
movl $0x8, %esi
callq 0x10d0
movq %rax, %r15
leaq 0x1a5d(%rip), %r12      # 0x3138
movl $0x2, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x10a0
movq %r15, %rdi
movl $0x11d, %esi            # imm = 0x11D
callq 0x10d0
movq %rax, %r15
movl $0x2, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x10a0
testq %rbx, %rbx
je 0x1728
movq %rbx, %rdi
callq 0x1040
movq %r15, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x10a0
jmp 0x1742
movq (%r15), %rax
movq -0x18(%rax), %rax
movq %r15, %rdi
addq %rax, %rdi
movl 0x20(%r15,%rax), %esi
orl $0x1, %esi
callq 0x10c0
leaq 0x19f2(%rip), %rsi      # 0x313b
movl $0x4, %edx
movq %r15, %rdi
callq 0x10a0
leaq 0x19e3(%rip), %rsi      # 0x3140
leaq 0x200(%rsp), %rdi
movq %rbx, %rdx
movl $0x100, %ecx            # imm = 0x100
callq 0x2030
leaq 0x19cb(%rip), %rsi      # 0x3144
leaq 0x100(%rsp), %rdi
movq %rbx, %rdx
movl $0x100, %ecx            # imm = 0x100
callq 0x2030
leaq 0x19b3(%rip), %rsi      # 0x3148
movq %rsp, %rdi
movq %rbx, %rdx
movl $0x100, %ecx            # imm = 0x100
callq 0x2030
leaq 0x19b0(%rip), %rsi      # 0x315c
movl $0x3, %edx
movq %r14, %rdi
callq 0x10a0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x1090
movsbl %al, %esi
movq %r14, %rdi
callq 0x1030
movq %rax, %rdi
callq 0x1070
addq $0x308, %rsp            # imm = 0x308
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x1909(%rip), %rdi      # 0x30ff
leaq 0x187b(%rip), %rsi      # 0x3078
leaq 0x19aa(%rip), %rcx      # 0x31ae
movl $0x22, %edx
callq 0x1060
leaq 0x18ee(%rip), %rdi      # 0x3103
leaq 0x185c(%rip), %rsi      # 0x3078
leaq 0x198b(%rip), %rcx      # 0x31ae
movl $0x23, %edx
callq 0x1060
leaq 0x183d(%rip), %rdi      # 0x3071
leaq 0x183d(%rip), %rsi      # 0x3078
leaq 0x196c(%rip), %rcx      # 0x31ae
movl $0x1a, %edx
callq 0x1060