// File: 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:
subq $0xd8, %rsp
movq %rdi, 0xd0(%rsp)
movq 0xd0(%rsp), %rdi
movq %rdi, 0x8(%rsp)
movq $0x800, 0xc8(%rsp) # imm = 0x800
movq $0x200, 0xc0(%rsp) # imm = 0x200
callq 0x9b40
movq %rax, 0xb8(%rsp)
movq $0x4, 0xb0(%rsp)
cmpq $0x200, 0xb0(%rsp) # imm = 0x200
jae 0x7866
movq 0xb0(%rsp), %rax
shlq %rax
movq %rax, 0xa8(%rsp)
movl $0x800, %eax            # imm = 0x800
xorl %ecx, %ecx
movl %ecx, %edx
divq 0xa8(%rsp)
movq %rax, 0xa0(%rsp)
movq $0x0, 0x98(%rsp)
movq 0x98(%rsp), %rax
cmpq 0xb0(%rsp), %rax
jae 0x784c
movq $0x0, 0x90(%rsp)
cmpq $0x4, 0x90(%rsp)
jae 0x77bf
xorl %eax, %eax
subq 0xa0(%rsp), %rax
movq 0x98(%rsp), %rcx
addq 0x90(%rsp), %rcx
imulq %rcx, %rax
movl %eax, %edi
movl $0x800, %esi            # imm = 0x800
callq 0x9b50
movq 0xb8(%rsp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, 0xb8(%rsp)
vmovsd %xmm0, (%rax)
movq 0x90(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x90(%rsp)
jmp 0x7759
movq $0x0, 0x88(%rsp)
cmpq $0x4, 0x88(%rsp)
jae 0x7831
xorl %eax, %eax
subq 0xa0(%rsp), %rax
movq 0x98(%rsp), %rcx
addq 0x88(%rsp), %rcx
imulq %rcx, %rax
movl %eax, %edi
movl $0x800, %esi            # imm = 0x800
callq 0x9cf0
movq 0xb8(%rsp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, 0xb8(%rsp)
vmovsd %xmm0, (%rax)
movq 0x88(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x88(%rsp)
jmp 0x77cb
jmp 0x7833
movq 0x98(%rsp), %rax
addq $0x4, %rax
movq %rax, 0x98(%rsp)
jmp 0x7737
jmp 0x784e
movq 0xb0(%rsp), %rax
shlq %rax
movq %rax, 0xb0(%rsp)
jmp 0x76ed
movq $0x0, 0x80(%rsp)
cmpq $0x200, 0x80(%rsp) # imm = 0x200
jae 0x7953
movq $0x0, 0x78(%rsp)
cmpq $0x4, 0x78(%rsp)
jae 0x78de
movq 0x80(%rsp), %rcx
addq 0x78(%rsp), %rcx
xorl %eax, %eax
subq %rcx, %rax
movl %eax, %edi
movl $0x800, %esi            # imm = 0x800
callq 0x9b50
movq 0xb8(%rsp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, 0xb8(%rsp)
vmovsd %xmm0, (%rax)
movq 0x78(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x78(%rsp)
jmp 0x788d
movq $0x0, 0x70(%rsp)
cmpq $0x4, 0x70(%rsp)
jae 0x7938
movq 0x80(%rsp), %rcx
addq 0x70(%rsp), %rcx
xorl %eax, %eax
subq %rcx, %rax
movl %eax, %edi
movl $0x800, %esi            # imm = 0x800
callq 0x9cf0
movq 0xb8(%rsp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, 0xb8(%rsp)
vmovsd %xmm0, (%rax)
movq 0x70(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x70(%rsp)
jmp 0x78e7
jmp 0x793a
movq 0x80(%rsp), %rax
addq $0x4, %rax
movq %rax, 0x80(%rsp)
jmp 0x7872
movq 0x8(%rsp), %rdi
movq $0x800, 0x68(%rsp)      # imm = 0x800
movq $0x200, 0x60(%rsp)      # imm = 0x200
addq $0x4000, %rdi           # imm = 0x4000
callq 0x9b40
movq %rax, 0x58(%rsp)
movq $0x0, 0x50(%rsp)
cmpq $0x200, 0x50(%rsp)      # imm = 0x200
jae 0x7a40
movq $0x0, 0x48(%rsp)
cmpq $0x4, 0x48(%rsp)
jae 0x79df
movq 0x50(%rsp), %rax
addq 0x48(%rsp), %rax
movl %eax, %edi
movl $0x800, %esi            # imm = 0x800
callq 0x9b50
movq 0x58(%rsp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, 0x58(%rsp)
vmovsd %xmm0, (%rax)
movq 0x48(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x48(%rsp)
jmp 0x799c
movq $0x0, 0x40(%rsp)
cmpq $0x4, 0x40(%rsp)
jae 0x7a2b
movq 0x50(%rsp), %rax
addq 0x40(%rsp), %rax
movl %eax, %edi
movl $0x800, %esi            # imm = 0x800
callq 0x9cf0
movq 0x58(%rsp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, 0x58(%rsp)
vmovsd %xmm0, (%rax)
movq 0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x40(%rsp)
jmp 0x79e8
jmp 0x7a2d
movq 0x50(%rsp), %rax
addq $0x4, %rax
movq %rax, 0x50(%rsp)
jmp 0x7984
movq $0x200, 0x38(%rsp)      # imm = 0x200
cmpq $0x8, 0x38(%rsp)
jb 0x7b61
movq 0x38(%rsp), %rax
shrq %rax
movq %rax, 0x30(%rsp)
movl $0x800, %eax            # imm = 0x800
xorl %ecx, %ecx
movl %ecx, %edx
divq 0x38(%rsp)
movq %rax, 0x28(%rsp)
movq $0x0, 0x20(%rsp)
movq 0x20(%rsp), %rax
cmpq 0x30(%rsp), %rax
jae 0x7b4d
movq $0x0, 0x18(%rsp)
cmpq $0x4, 0x18(%rsp)
jae 0x7ae3
movq 0x28(%rsp), %rax
movq 0x20(%rsp), %rcx
addq 0x18(%rsp), %rcx
imulq %rcx, %rax
movl %eax, %edi
movl $0x800, %esi            # imm = 0x800
callq 0x9b50
movq 0x58(%rsp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, 0x58(%rsp)
vmovsd %xmm0, (%rax)
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
jmp 0x7a97
movq $0x0, 0x10(%rsp)
cmpq $0x4, 0x10(%rsp)
jae 0x7b38
movq 0x28(%rsp), %rax
movq 0x20(%rsp), %rcx
addq 0x10(%rsp), %rcx
imulq %rcx, %rax
movl %eax, %edi
movl $0x800, %esi            # imm = 0x800
callq 0x9cf0
movq 0x58(%rsp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, 0x58(%rsp)
vmovsd %xmm0, (%rax)
movq 0x10(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x10(%rsp)
jmp 0x7aec
jmp 0x7b3a
movq 0x20(%rsp), %rax
addq $0x4, %rax
movq %rax, 0x20(%rsp)
jmp 0x7a7e
jmp 0x7b4f
movq 0x38(%rsp), %rax
shrq %rax
movq %rax, 0x38(%rsp)
jmp 0x7a49
addq $0xd8, %rsp
retq
nopl (%rax)