// File: /workspace/github_c_makefile_star2_O3/cinemast[P]sudoku/sudoku.c
// Function: common
static
void
common (int el)
{
    int i, idx, row, col, digit, mask;

    for (digit = 1; digit <= 9; ++digit) {
        mask = DIGIT_STATE(digit);
        row = col = -1;  /* Value '9' indicates invalid */
        for (i = 0; i < 9; ++i) {
            /* Digit possible? */
            idx = idx_block(el, i);
            if (IS_EMPTY(idx) && 0 == (board[idx] & mask)) {
                if (row < 0) {
                    row = ROW(idx);
                } else if (row != ROW(idx)) {
                    row = 9; /* Digit appears in multiple rows */
                }
                if (col < 0) {
                    col = COLUMN(idx);
                } else if (col != COLUMN(idx)) {
                    col = 9; /* Digit appears in multiple columns */
                }
            }
        }
        if (-1 != row && row < 9) {
            exmask(mask, el, row, idx_row);
        }
        if (-1 != col && col < 9) {
            exmask(mask, el, col, idx_column);
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movslq %edi, %rcx
imulq $0x55555556, %rcx, %rax # imm = 0x55555556
movq %rax, %rdx
shrq $0x3f, %rdx
shrq $0x20, %rax
addl %edx, %eax
leal (%rax,%rax,2), %edx
leal (%rcx,%rcx,8), %eax
subl %edx, %ecx
addl %ecx, %ecx
leal (%rcx,%rcx,2), %ecx
subl %ecx, %eax
movl $0x1, %ecx
movl $0xaaaaaaab, %edx       # imm = 0xAAAAAAAB
leaq 0xc3f8(%rip), %rsi      # 0xf4a0
movl $0x40, %r8d
shll %cl, %r8d
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
xorl %r11d, %r11d
movl $0xffffffff, %r10d      # imm = 0xFFFFFFFF
movl %r11d, %ebx
imulq %rdx, %rbx
shrq $0x21, %rbx
leal (%rbx,%rbx,2), %ebx
leal (%rax,%rbx,2), %ebx
addl %r11d, %ebx
movslq %ebx, %r14
movl (%rsi,%r14,4), %ebp
movl %ebp, %r15d
andl $0xf0000, %r15d         # imm = 0xF0000
andl %r8d, %ebp
orl %r15d, %ebp
jne 0x3134
imulq $0x38e38e39, %r14, %r14 # imm = 0x38E38E39
movq %r14, %r15
shrq $0x3f, %r15
sarq $0x21, %r14
addl %r15d, %r14d
movl %r10d, %ebp
cmpl %r14d, %r10d
je 0x310f
movl $0x9, %ebp
testl %r10d, %r10d
movl %ebp, %r10d
cmovsl %r14d, %r10d
leal (%r14,%r14,8), %ebp
subl %ebp, %ebx
testl %r9d, %r9d
js 0x3131
cmpl %ebx, %r9d
je 0x3134
movl $0x9, %r9d
jmp 0x3134
movl %ebx, %r9d
incl %r11d
cmpl $0x9, %r11d
jne 0x30c0
cmpl $-0x1, %r10d
sete %r11b
cmpl $0x9, %r10d
setge %bl
orb %r11b, %bl
jne 0x31f0
leal (%r10,%r10,8), %r10d
movslq %r10d, %r11
shlq $0x2, %r11
xorl %ebx, %ebx
leal (%r10,%rbx), %ebp
movslq %ebp, %r14
imulq $0x4bda12f7, %r14, %r15 # imm = 0x4BDA12F7
movq %r15, %r12
shrq $0x3f, %r12
sarq $0x23, %r15
addl %r12d, %r15d
leal (%r15,%r15,2), %ebp
imulq $0x38e38e39, %r14, %r15 # imm = 0x38E38E39
movq %r15, %r12
shrq $0x3f, %r12
sarq $0x21, %r15
addl %r12d, %r15d
leal (%r15,%r15,8), %r15d
subl %r15d, %r14d
movsbl %r14b, %r14d
imull $0x56, %r14d, %r14d
movzwl %r14w, %r15d
shrl $0x8, %r14d
shrl $0xf, %r15d
addb %r14b, %r15b
movsbl %r15b, %r14d
addl %ebp, %r14d
cmpl %edi, %r14d
je 0x31e3
leaq (%r11,%rbx,4), %r14
movl (%rsi,%r14), %ebp
testl $0xf0000, %ebp          # imm = 0xF0000
jne 0x31e3
leaq (,%rbx,4), %r14
orl %r8d, %ebp
addq %r11, %r14
movl %ebp, (%rsi,%r14)
incq %rbx
cmpq $0x9, %rbx
jne 0x3162
cmpl $-0x1, %r9d
sete %r10b
cmpl $0x9, %r9d
setge %r11b
orb %r10b, %r11b
jne 0x329f
movslq %r9d, %r10
movl %r9d, %r9d
shlq $0x2, %r10
xorl %r11d, %r11d
leal (%r9,%r11), %ebx
movslq %ebx, %r14
imulq $0x4bda12f7, %r14, %rbx # imm = 0x4BDA12F7
movq %rbx, %r15
shrq $0x3f, %r15
sarq $0x23, %rbx
addl %r15d, %ebx
leal (%rbx,%rbx,2), %ebx
imulq $0x38e38e39, %r14, %r15 # imm = 0x38E38E39
movq %r15, %r12
shrq $0x3f, %r12
sarq $0x21, %r15
addl %r12d, %r15d
leal (%r15,%r15,8), %ebp
subl %ebp, %r14d
movsbl %r14b, %ebp
imull $0x56, %ebp, %ebp
movzwl %bp, %r14d
shrl $0x8, %ebp
shrl $0xf, %r14d
addb %bpl, %r14b
movsbl %r14b, %ebp
addl %ebx, %ebp
cmpl %edi, %ebp
je 0x3291
leaq (%r10,%r11,4), %rbx
movl (%rsi,%rbx), %ebx
testl $0xf0000, %ebx          # imm = 0xF0000
jne 0x3291
leaq (,%r11,4), %r14
orl %r8d, %ebx
addq %r10, %r14
movl %ebx, (%rsi,%r14)
addq $0x9, %r11
cmpq $0x51, %r11
jne 0x3216
incl %ecx
cmpl $0xa, %ecx
jne 0x30a8
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq