// File: /workspace/github_cpp_makefile_star2_O3/kaityo256[P]minlex/minlex.cpp
// Function: MinlexSearcher::perm_columns(Sudoku&)
void perm_columns(Sudoku &g) {
    int h1, h2, h3;
    g.headline_bits(h1, h2, h3);
    for (int k = 0; k < 6; k++) {
      if (!hlb_table[h3][k]) continue;
      int *ak = perm3[k];
      for (int j = 0; j < 6; j++) {
        if (!hlb_table[h2][j]) continue;
        int *aj = perm3[j];
        for (int i = 0; i < 6; i++) {
          if (!hlb_table[h1][i]) continue;
          int *ai = perm3[i];
          Sudoku g2 = g.perm_columns(ai, aj, ak).renumbering();
          if (min.head() < g2.head()) continue;
          perm_restrbox(g2);
        }
      }
    }
  }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3a8, %rsp            # imm = 0x3A8
movq %rsi, %rax
leaq 0x14(%rsp), %rsi
leaq 0x10(%rsp), %rdx
leaq 0xc(%rsp), %rcx
movq %rdi, %r14
movq %rax, %rdi
movl $0x1ffff, %ebx          # imm = 0x1FFFF
movabsq $-0x40000000000000, %r15 # imm = 0xFFC0000000000000
movq %rax, 0x28(%rsp)
callq 0x3f64
leaq 0x310(%rsp), %r12
leaq 0x340b(%rip), %r13      # 0x7100
xorl %ecx, %ecx
movslq 0xc(%rsp), %rax
movq %rcx, 0x18(%rsp)
leaq (%rax,%rax,2), %rax
leaq (%r13,%rax,2), %rax
cmpb $0x1, (%rcx,%rax)
jne 0x3f40
movq 0x18(%rsp), %rax
leaq 0x3410(%rip), %rcx      # 0x7130
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,4), %rax
xorl %ecx, %ecx
movq %rax, 0x30(%rsp)
movslq 0x10(%rsp), %rax
movq %rcx, 0x20(%rsp)
leaq (%rax,%rax,2), %rax
leaq (%r13,%rax,2), %rax
cmpb $0x1, (%rcx,%rax)
jne 0x3f2e
movq 0x20(%rsp), %rax
leaq 0x33d8(%rip), %rcx      # 0x7130
xorl %ebp, %ebp
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,4), %rax
movq %rax, 0x38(%rsp)
movslq 0x14(%rsp), %rax
leaq (%rax,%rax,2), %rax
leaq (%r13,%rax,2), %rax
cmpb $0x1, (%rbp,%rax)
jne 0x3f21
leaq (%rbp,%rbp,2), %rax
leaq 0x33a4(%rip), %rcx      # 0x7130
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %r8
leaq 0x2b0(%rsp), %rdi
leaq (%rcx,%rax,4), %rdx
movq 0x38(%rsp), %rcx
callq 0x4052
vmovups (%r12), %zmm0
vmovups 0x50(%r12), %zmm2
vmovups 0x40(%r12), %zmm1
leaq 0x40(%rsp), %rdi
vmovups %zmm2, 0x90(%rsp)
vmovups %zmm1, 0x80(%rsp)
vmovups %zmm0, 0x40(%rsp)
vzeroupper
callq 0x233c
vmovups 0x40(%rsp), %zmm0
vmovups 0x80(%rsp), %zmm1
vmovups 0x90(%rsp), %zmm2
leaq 0x220(%rsp), %rax
vmovups %zmm2, 0x50(%rax)
vmovups %zmm1, 0x40(%rax)
vmovups %zmm0, (%rax)
movl $0x60, %eax
movl 0x8(%r14,%rax), %ecx
movq (%r14,%rax), %rdx
andl %ebx, %ecx
andq %r15, %rdx
movq %rdx, -0x20(%rsp,%rax)
movq %rcx, -0x18(%rsp,%rax)
addq $0x10, %rax
cmpq $0xf0, %rax
jne 0x3e2d
vmovups 0x40(%rsp), %zmm0
vmovups 0x90(%rsp), %zmm2
vmovups 0x80(%rsp), %zmm1
movl $0x60, %eax
vmovups %zmm2, 0x50(%r12)
vmovups %zmm1, 0x40(%r12)
vmovups %zmm0, (%r12)
movl 0x1c8(%rsp,%rax), %ecx
movq 0x1c0(%rsp,%rax), %rdx
andl %ebx, %ecx
andq %r15, %rdx
movq %rdx, 0xd0(%rsp,%rax)
movq %rcx, 0xd8(%rsp,%rax)
addq $0x10, %rax
cmpq $0xf0, %rax
jne 0x3e8b
vmovups 0x130(%rsp), %zmm0
vmovups 0x170(%rsp), %zmm1
vmovups 0x180(%rsp), %zmm2
leaq 0xa0(%rsp), %rax
leaq 0x2b0(%rsp), %rdi
leaq 0x40(%rsp), %rsi
vmovups %zmm2, 0x50(%rax)
vmovups %zmm1, 0x40(%rax)
vmovups %zmm0, (%rax)
vzeroupper
callq 0x4294
testb %al, %al
jne 0x3f21
leaq 0x1c0(%rsp), %rsi
movq %r14, %rdi
callq 0x4340
incq %rbp
cmpq $0x6, %rbp
jne 0x3d67
movq 0x20(%rsp), %rcx
incq %rcx
cmpq $0x6, %rcx
jne 0x3d2f
movq 0x18(%rsp), %rcx
incq %rcx
cmpq $0x6, %rcx
jne 0x3cf7
addq $0x3a8, %rsp            # imm = 0x3A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq