.LCPI0_0:
.short 65535
.short 0
ass_shift_bitmap_c:
push rbp
push r15
push r14
push rbx
vpbroadcastd zmm2, dword ptr [rip + .LCPI0_0]
mov rax, qword ptr [rsp + 40]
mov r10, rdx
and r10, -32
vpbroadcastd zmm0, r8d
vpbroadcastd zmm1, r9d
vpternlogd zmm3, zmm3, zmm3, 255
xor r11d, r11d
jmp .LBB0_1
.LBB0_4:
add rdi, rsi
inc r11
cmp r11, rcx
je .LBB0_5
.LBB0_1:
cmp rdx, 32
jae .LBB0_6
xor r14d, r14d
xor ebx, ebx
jmp .LBB0_3
.LBB0_6:
vpxor xmm4, xmm4, xmm4
xor ebx, ebx
.LBB0_7:
vpmovzxbd zmm5, xmmword ptr [rdi + rbx]
vpmovzxbd zmm6, xmmword ptr [rdi + rbx + 16]
vpaddd zmm5, zmm5, zmm5
vpaddd zmm6, zmm6, zmm6
vpmulld zmm7, zmm5, zmm0
vpmulld zmm8, zmm6, zmm0
vpsrld zmm7, zmm7, 6
valignd zmm9, zmm7, zmm4, 15
vpsrld zmm4, zmm8, 6
valignd zmm8, zmm4, zmm7, 15
vpaddd zmm5, zmm5, zmm9
vpaddd zmm6, zmm6, zmm8
vpsubd zmm5, zmm5, zmm7
vpsubd zmm6, zmm6, zmm4
vpandq zmm8, zmm5, zmm2
vpmovdw ymm5, zmm5
vpandq zmm7, zmm6, zmm2
vpmovdw ymm6, zmm6
vpmulld zmm8, zmm8, zmm1
vpmulld zmm7, zmm7, zmm1
vpsrld zmm8, zmm8, 6
vpsrld zmm7, zmm7, 6
vpmovdw ymm8, zmm8
vinserti64x4 zmm5, zmm5, ymm6, 1
vpaddw zmm5, zmm5, zmmword ptr [rax + 2*rbx]
vpmovdw ymm7, zmm7
vinserti64x4 zmm7, zmm8, ymm7, 1
vmovdqu64 zmmword ptr [rax + 2*rbx], zmm7
vpsubw zmm5, zmm5, zmm7
vpsubw zmm5, zmm5, zmm3
vpsrlw zmm5, zmm5, 1
vpmovwb ymmword ptr [rdi + rbx], zmm5
add rbx, 32
cmp r10, rbx
jne .LBB0_7
cmp rdx, r10
je .LBB0_4
vextracti32x4 xmm4, zmm4, 3
mov rbx, r10
vpextrd r14d, xmm4, 3
.LBB0_3:
movzx r15d, byte ptr [rdi + rbx]
lea ebp, [r14 + 2*r15]
lea r14d, [r15 + r15]
imul r14d, r8d
shr r14d, 6
sub ebp, r14d
movzx ebp, bp
mov r15d, ebp
add bp, word ptr [rax + 2*rbx]
imul r15d, r9d
shr r15d, 6
mov word ptr [rax + 2*rbx], r15w
sub ebp, r15d
inc ebp
shr ebp
mov byte ptr [rdi + rbx], bpl
inc rbx
cmp rdx, rbx
jne .LBB0_3
jmp .LBB0_4
.LBB0_5:
pop rbx
pop r14
pop r15
pop rbp
vzeroupper
ret
.LCPI0_0:
.short 65535
.short 0
ass_shift_bitmap_c:
push rbp
push r15
push r14
push r13
push r12
push rbx
mov rax, qword ptr [rsp + 56]
cmp rdx, 31
ja .LBB0_17
mov r14d, ecx
and r14d, 3
cmp rcx, 4
jb .LBB0_13
lea r15, [rsi + 2*rsi]
mov qword ptr [rsp - 8], r14
lea r14, [rdi + 2*rsi]
and rcx, -4
lea r11, [rdi + rsi]
xor r12d, r12d
add r15, rdi
.LBB0_3:
xor ebp, ebp
xor r13d, r13d
.LBB0_4:
movzx r10d, byte ptr [rdi + r13]
lea ebp, [rbp + 2*r10]
add r10d, r10d
imul r10d, r8d
shr r10d, 6
sub ebp, r10d
movzx ebp, bp
mov ebx, ebp
add bp, word ptr [rax + 2*r13]
imul ebx, r9d
shr ebx, 6
mov word ptr [rax + 2*r13], bx
sub ebp, ebx
inc ebp
shr ebp
mov byte ptr [rdi + r13], bpl
inc r13
mov ebp, r10d
cmp rdx, r13
jne .LBB0_4
add rdi, rsi
xor ebp, ebp
xor r13d, r13d
.LBB0_6:
movzx r10d, byte ptr [r11 + r13]
lea ebx, [rbp + 2*r10]
add r10d, r10d
imul r10d, r8d
shr r10d, 6
sub ebx, r10d
movzx ebx, bx
mov ebp, ebx
add bx, word ptr [rax + 2*r13]
imul ebp, r9d
shr ebp, 6
mov word ptr [rax + 2*r13], bp
sub ebx, ebp
mov ebp, r10d
inc ebx
shr ebx
mov byte ptr [r11 + r13], bl
inc r13
cmp rdx, r13
jne .LBB0_6
add rdi, rsi
xor ebp, ebp
xor r13d, r13d
.LBB0_8:
movzx r10d, byte ptr [r14 + r13]
lea ebx, [rbp + 2*r10]
add r10d, r10d
imul r10d, r8d
shr r10d, 6
sub ebx, r10d
movzx ebx, bx
mov ebp, ebx
add bx, word ptr [rax + 2*r13]
imul ebp, r9d
shr ebp, 6
mov word ptr [rax + 2*r13], bp
sub ebx, ebp
mov ebp, r10d
inc ebx
shr ebx
mov byte ptr [r14 + r13], bl
inc r13
cmp rdx, r13
jne .LBB0_8
add rdi, rsi
xor ebp, ebp
xor r13d, r13d
.LBB0_10:
movzx r10d, byte ptr [r15 + r13]
lea ebx, [rbp + 2*r10]
add r10d, r10d
imul r10d, r8d
shr r10d, 6
sub ebx, r10d
movzx ebx, bx
mov ebp, ebx
add bx, word ptr [rax + 2*r13]
imul ebp, r9d
shr ebp, 6
mov word ptr [rax + 2*r13], bp
sub ebx, ebp
mov ebp, r10d
inc ebx
shr ebx
mov byte ptr [r15 + r13], bl
inc r13
cmp rdx, r13
jne .LBB0_10
lea r10, [4*rsi]
add rdi, rsi
add r12, 4
add r11, r10
add r14, r10
add r15, r10
cmp r12, rcx
jne .LBB0_3
mov r14, qword ptr [rsp - 8]
test r14, r14
je .LBB0_34
.LBB0_13:
xor ecx, ecx
.LBB0_14:
xor ebx, ebx
xor r11d, r11d
.LBB0_15:
movzx r10d, byte ptr [rdi + r11]
lea ebx, [rbx + 2*r10]
add r10d, r10d
imul r10d, r8d
shr r10d, 6
sub ebx, r10d
movzx ebx, bx
mov ebp, ebx
add bx, word ptr [rax + 2*r11]
imul ebp, r9d
shr ebp, 6
mov word ptr [rax + 2*r11], bp
sub ebx, ebp
inc ebx
shr ebx
mov byte ptr [rdi + r11], bl
inc r11
mov ebx, r10d
cmp rdx, r11
jne .LBB0_15
add rdi, rsi
inc rcx
cmp rcx, r14
jne .LBB0_14
jmp .LBB0_34
.LBB0_17:
mov r10, rdx
and r10, -32
vpbroadcastd zmm0, r8d
vpbroadcastd zmm1, r9d
cmp rdx, r10
jne .LBB0_18
cmp rcx, 1
je .LBB0_32
vpbroadcastd zmm2, dword ptr [rip + .LCPI0_0]
mov rdx, rcx
and rdx, -2
lea r8, [rdi + rsi]
lea r9, [rsi + rsi]
vpternlogd zmm3, zmm3, zmm3, 255
xor r11d, r11d
.LBB0_26:
vpxor xmm4, xmm4, xmm4
xor ebx, ebx
.LBB0_27:
vpmovzxbd zmm5, xmmword ptr [rdi + rbx]
vpmovzxbd zmm6, xmmword ptr [rdi + rbx + 16]
vpaddd zmm6, zmm6, zmm6
vpaddd zmm5, zmm5, zmm5
vpmulld zmm7, zmm5, zmm0
vpmulld zmm8, zmm6, zmm0
vpsrld zmm7, zmm7, 6
vpsrld zmm8, zmm8, 6
valignd zmm4, zmm7, zmm4, 15
valignd zmm9, zmm8, zmm7, 15
vpaddd zmm4, zmm5, zmm4
vpaddd zmm6, zmm6, zmm9
vpsubd zmm4, zmm4, zmm7
vpsubd zmm5, zmm6, zmm8
vpandq zmm6, zmm5, zmm2
vpandq zmm7, zmm4, zmm2
vpmovdw ymm4, zmm4
vpmovdw ymm5, zmm5
vpmulld zmm7, zmm7, zmm1
vpmulld zmm6, zmm6, zmm1
vpsrld zmm6, zmm6, 6
vpsrld zmm7, zmm7, 6
vinserti64x4 zmm4, zmm4, ymm5, 1
vpaddw zmm4, zmm4, zmmword ptr [rax + 2*rbx]
vpmovdw ymm7, zmm7
vpmovdw ymm6, zmm6
vinserti64x4 zmm6, zmm7, ymm6, 1
vmovdqu64 zmmword ptr [rax + 2*rbx], zmm6
vpsubw zmm4, zmm4, zmm6
vpsubw zmm4, zmm4, zmm3
vpsrlw zmm4, zmm4, 1
vpmovwb ymmword ptr [rdi + rbx], zmm4
add rbx, 32
vmovdqa64 zmm4, zmm8
cmp r10, rbx
jne .LBB0_27
add rdi, rsi
vpxor xmm4, xmm4, xmm4
xor ebx, ebx
.LBB0_29:
vpmovzxbd zmm5, xmmword ptr [r8 + rbx]
vpmovzxbd zmm6, xmmword ptr [r8 + rbx + 16]
vpaddd zmm6, zmm6, zmm6
vpaddd zmm5, zmm5, zmm5
vpmulld zmm7, zmm5, zmm0
vpmulld zmm8, zmm6, zmm0
vpsrld zmm7, zmm7, 6
vpsrld zmm8, zmm8, 6
valignd zmm4, zmm7, zmm4, 15
valignd zmm9, zmm8, zmm7, 15
vpaddd zmm4, zmm5, zmm4
vpaddd zmm6, zmm6, zmm9
vpsubd zmm4, zmm4, zmm7
vpsubd zmm5, zmm6, zmm8
vpandq zmm6, zmm5, zmm2
vpandq zmm7, zmm4, zmm2
vpmovdw ymm4, zmm4
vpmovdw ymm5, zmm5
vpmulld zmm7, zmm7, zmm1
vpmulld zmm6, zmm6, zmm1
vpsrld zmm6, zmm6, 6
vpsrld zmm7, zmm7, 6
vinserti64x4 zmm4, zmm4, ymm5, 1
vpaddw zmm4, zmm4, zmmword ptr [rax + 2*rbx]
vpmovdw ymm7, zmm7
vpmovdw ymm6, zmm6
vinserti64x4 zmm6, zmm7, ymm6, 1
vmovdqu64 zmmword ptr [rax + 2*rbx], zmm6
vpsubw zmm4, zmm4, zmm6
vpsubw zmm4, zmm4, zmm3
vpsrlw zmm4, zmm4, 1
vpmovwb ymmword ptr [r8 + rbx], zmm4
add rbx, 32
vmovdqa64 zmm4, zmm8
cmp r10, rbx
jne .LBB0_29
add rdi, rsi
add r11, 2
add r8, r9
cmp r11, rdx
jne .LBB0_26
test cl, 1
je .LBB0_34
.LBB0_32:
vpbroadcastd zmm2, dword ptr [rip + .LCPI0_0]
vpternlogd zmm3, zmm3, zmm3, 255
vpxor xmm4, xmm4, xmm4
xor ecx, ecx
.LBB0_33:
vpmovzxbd zmm5, xmmword ptr [rdi + rcx]
vpmovzxbd zmm6, xmmword ptr [rdi + rcx + 16]
vpaddd zmm6, zmm6, zmm6
vpaddd zmm5, zmm5, zmm5
vpmulld zmm7, zmm5, zmm0
vpmulld zmm8, zmm6, zmm0
vpsrld zmm7, zmm7, 6
vpsrld zmm8, zmm8, 6
valignd zmm4, zmm7, zmm4, 15
valignd zmm9, zmm8, zmm7, 15
vpaddd zmm4, zmm5, zmm4
vpaddd zmm6, zmm6, zmm9
vpsubd zmm4, zmm4, zmm7
vpsubd zmm5, zmm6, zmm8
vpandq zmm6, zmm5, zmm2
vpandq zmm7, zmm4, zmm2
vpmovdw ymm4, zmm4
vpmovdw ymm5, zmm5
vpmulld zmm7, zmm7, zmm1
vpmulld zmm6, zmm6, zmm1
vpsrld zmm6, zmm6, 6
vpsrld zmm7, zmm7, 6
vinserti64x4 zmm4, zmm4, ymm5, 1
vpaddw zmm4, zmm4, zmmword ptr [rax + 2*rcx]
vpmovdw ymm7, zmm7
vpmovdw ymm6, zmm6
vinserti64x4 zmm6, zmm7, ymm6, 1
vmovdqu64 zmmword ptr [rax + 2*rcx], zmm6
vpsubw zmm4, zmm4, zmm6
vpsubw zmm4, zmm4, zmm3
vpsrlw zmm4, zmm4, 1
vpmovwb ymmword ptr [rdi + rcx], zmm4
add rcx, 32
vmovdqa64 zmm4, zmm8
cmp r10, rcx
jne .LBB0_33
jmp .LBB0_34
.LBB0_18:
vpbroadcastd zmm2, dword ptr [rip + .LCPI0_0]
vpternlogd zmm3, zmm3, zmm3, 255
xor r11d, r11d
.LBB0_19:
vpxor xmm4, xmm4, xmm4
xor ebx, ebx
.LBB0_20:
vpmovzxbd zmm5, xmmword ptr [rdi + rbx]
vpmovzxbd zmm6, xmmword ptr [rdi + rbx + 16]
vpaddd zmm5, zmm5, zmm5
vpaddd zmm6, zmm6, zmm6
vpmulld zmm7, zmm5, zmm0
vpmulld zmm8, zmm6, zmm0
vpsrld zmm7, zmm7, 6
valignd zmm9, zmm7, zmm4, 15
vpsrld zmm4, zmm8, 6
valignd zmm8, zmm4, zmm7, 15
vpaddd zmm5, zmm5, zmm9
vpaddd zmm6, zmm6, zmm8
vpsubd zmm5, zmm5, zmm7
vpsubd zmm6, zmm6, zmm4
vpandq zmm8, zmm5, zmm2
vpmovdw ymm5, zmm5
vpandq zmm7, zmm6, zmm2
vpmovdw ymm6, zmm6
vpmulld zmm8, zmm8, zmm1
vpmulld zmm7, zmm7, zmm1
vpsrld zmm8, zmm8, 6
vpsrld zmm7, zmm7, 6
vpmovdw ymm8, zmm8
vinserti64x4 zmm5, zmm5, ymm6, 1
vpaddw zmm5, zmm5, zmmword ptr [rax + 2*rbx]
vpmovdw ymm7, zmm7
vinserti64x4 zmm7, zmm8, ymm7, 1
vmovdqu64 zmmword ptr [rax + 2*rbx], zmm7
vpsubw zmm5, zmm5, zmm7
vpsubw zmm5, zmm5, zmm3
vpsrlw zmm5, zmm5, 1
vpmovwb ymmword ptr [rdi + rbx], zmm5
add rbx, 32
cmp r10, rbx
jne .LBB0_20
vextracti32x4 xmm4, zmm4, 3
mov rbx, r10
vpextrd r14d, xmm4, 3
.LBB0_22:
movzx r15d, byte ptr [rdi + rbx]
lea ebp, [r14 + 2*r15]
add r15d, r15d
imul r15d, r8d
shr r15d, 6
sub ebp, r15d
movzx ebp, bp
mov r14d, ebp
add bp, word ptr [rax + 2*rbx]
imul r14d, r9d
shr r14d, 6
mov word ptr [rax + 2*rbx], r14w
sub ebp, r14d
mov r14d, r15d
inc ebp
shr ebp
mov byte ptr [rdi + rbx], bpl
inc rbx
cmp rdx, rbx
jne .LBB0_22
add rdi, rsi
inc r11
cmp r11, rcx
jne .LBB0_19
.LBB0_34:
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
vzeroupper
ret
https://godbolt.org/z/reK8jsrbh
-mllvm -extra-vectorizer-passes=false
-mllvm -extra-vectorizer-passes