// File: /workspace/github_cpp_makefile_star2_O2/ushitora-anqou[P]aqtfhe2/./aqtfhe2.hpp
// Function: aqtfhe2::detail::fft_processor<1024ul>::fft_processor()
fft_processor()
    {
        // new fft table
        {
            constexpr size_t n = 2 * N, ns4 = n / 4;
            auto it = tables_direct_.begin();
            for (size_t halfnn = 4; halfnn < ns4; halfnn *= 2) {
                const size_t nn = 2 * halfnn;
                const size_t j = n / nn;
                for (size_t i = 0; i < halfnn; i += 4) {
                    for (size_t k = 0; k < 4; k++)
                        *it++ = accurate_cos(-j * (i + k), n);
                    for (size_t k = 0; k < 4; k++)
                        *it++ = accurate_sin(-j * (i + k), n);
                }
            }
            // last iteration
            for (size_t i = 0; i < ns4; i += 4) {
                for (size_t k = 0; k < 4; k++)
                    *it++ = accurate_cos(-(i + k), n);
                for (size_t k = 0; k < 4; k++)
                    *it++ = accurate_sin(-(i + k), n);
            }
        }

        // new ifft table
        {
            constexpr size_t n = 2 * N, ns4 = n / 4;
            auto it = tables_reverse_.begin();
            // first iteration
            for (size_t j = 0; j < ns4; j += 4) {
                for (size_t k = 0; k < 4; k++)
                    *it++ = accurate_cos(j + k, n);
                for (size_t k = 0; k < 4; k++)
                    *it++ = accurate_sin(j + k, n);
            }
            // subsequent iterations
            for (size_t nn = ns4; nn >= 8; nn /= 2) {
                size_t halfnn = nn / 2;
                size_t j = n / nn;
                for (size_t i = 0; i < halfnn; i += 4) {
                    for (size_t k = 0; k < 4; k++)
                        *it++ = accurate_cos(j * (i + k), n);
                    for (size_t k = 0; k < 4; k++)
                        *it++ = accurate_sin(j * (i + k), n);
                }
            }
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %rbx
pushq $0x4
popq %rcx
movq %rdi, %r14
cmpq $0x200, %rcx            # imm = 0x200
jae 0x3f5a
leaq (%rcx,%rcx), %rsi
movw $0x800, %ax             # imm = 0x800
xorl %edx, %edx
xorl %r13d, %r13d
movq %rsi, 0x20(%rsp)
divw %si
movq %rcx, 0x10(%rsp)
movzwl %ax, %r15d
leal (,%r15,4), %eax
movl %eax, 0x1c(%rsp)
xorl %eax, %eax
cmpq %rcx, %rax
jae 0x3f50
movq %rax, 0x8(%rsp)
movl %r13d, %ebp
xorl %r12d, %r12d
cmpq $0x20, %r12
je 0x3f11
movl $0x800, %esi            # imm = 0x800
movl %ebp, %edi
callq 0x48ce
vmovsd %xmm0, (%r14,%r12)
addq $0x8, %r12
subl %r15d, %ebp
jmp 0x3ef0
addq %r12, %r14
movl %r13d, %ebp
pushq $0x4
popq %r12
subq $0x1, %r12
jb 0x3f3b
movl $0x800, %esi            # imm = 0x800
movl %ebp, %edi
callq 0x4957
vmovsd %xmm0, (%r14)
addq $0x8, %r14
subl %r15d, %ebp
jmp 0x3f1b
movq 0x8(%rsp), %rax
subl 0x1c(%rsp), %r13d
movq 0x10(%rsp), %rcx
addq $0x4, %rax
jmp 0x3ee0
movq 0x20(%rsp), %rcx
jmp 0x3ea7
xorl %r15d, %r15d
xorl %r12d, %r12d
cmpq $0x1ff, %r12            # imm = 0x1FF
ja 0x3fbd
xorl %r13d, %r13d
cmpq $-0x4, %r13
je 0x3f8e
leal (%r15,%r13), %edi
movl $0x800, %esi            # imm = 0x800
callq 0x48ce
vmovsd %xmm0, (%r14)
addq $0x8, %r14
decq %r13
jmp 0x3f6c
xorl %r13d, %r13d
cmpq $-0x4, %r13
je 0x3fb3
leal (%r15,%r13), %edi
movl $0x800, %esi            # imm = 0x800
callq 0x4957
vmovsd %xmm0, (%r14)
addq $0x8, %r14
decq %r13
jmp 0x3f91
addq $0x4, %r12
addq $-0x4, %r15
jmp 0x3f60
addq $0x4000, %rbx           # imm = 0x4000
xorl %r14d, %r14d
cmpq $0x1ff, %r14            # imm = 0x1FF
ja 0x401e
xorl %r15d, %r15d
cmpq $0x4, %r15
je 0x3ff4
leal (%r14,%r15), %edi
movl $0x800, %esi            # imm = 0x800
callq 0x48ce
vmovsd %xmm0, (%rbx)
addq $0x8, %rbx
incq %r15
jmp 0x3fd3
xorl %r15d, %r15d
cmpq $0x4, %r15
je 0x4018
leal (%r14,%r15), %edi
movl $0x800, %esi            # imm = 0x800
callq 0x4957
vmovsd %xmm0, (%rbx)
addq $0x8, %rbx
incq %r15
jmp 0x3ff7
addq $0x4, %r14
jmp 0x3fc7
movl $0x200, %ecx            # imm = 0x200
cmpq $0x7, %rcx
jbe 0x40c2
movq %rcx, %rax
shrq %rax
xorl %edx, %edx
xorl %r13d, %r13d
xorl %r12d, %r12d
movq %rax, 0x8(%rsp)
movl $0x800, %eax            # imm = 0x800
divq %rcx
movq %rax, %r14
leal (,%rax,4), %eax
movl %eax, 0x10(%rsp)
cmpq 0x8(%rsp), %r12
jae 0x40b8
movl %r13d, %ebp
xorl %r15d, %r15d
cmpq $0x20, %r15
je 0x4084
movl $0x800, %esi            # imm = 0x800
movl %ebp, %edi
callq 0x48ce
vmovsd %xmm0, (%rbx,%r15)
addq $0x8, %r15
addl %r14d, %ebp
jmp 0x4063
addq %r15, %rbx
movl %r13d, %ebp
pushq $0x4
popq %r15
subq $0x1, %r15
jb 0x40ad
movl $0x800, %esi            # imm = 0x800
movl %ebp, %edi
callq 0x4957
vmovsd %xmm0, (%rbx)
addq $0x8, %rbx
addl %r14d, %ebp
jmp 0x408e
addl 0x10(%rsp), %r13d
addq $0x4, %r12
jmp 0x4056
movq 0x8(%rsp), %rcx
jmp 0x4023
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop