-
Notifications
You must be signed in to change notification settings - Fork 15.3k
Closed
Labels
Description
define dso_local range(i8 -1, 1) <64 x i8> @unmovemask64(i64 %0) local_unnamed_addr {
Entry:
%1 = bitcast i64 %0 to <64 x i1>
%2 = sext <64 x i1> %1 to <64 x i8>
ret <64 x i8> %2
}Emit for Zen 3:
.LCPI0_0:
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 2
.byte 2
.byte 2
.byte 2
.byte 2
.byte 2
.byte 2
.byte 2
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.LCPI0_2:
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 5
.byte 5
.byte 5
.byte 5
.byte 5
.byte 5
.byte 5
.byte 5
.byte 6
.byte 6
.byte 6
.byte 6
.byte 6
.byte 6
.byte 6
.byte 6
.byte 7
.byte 7
.byte 7
.byte 7
.byte 7
.byte 7
.byte 7
.byte 7
.LCPI0_1:
.byte 1
.byte 2
.byte 4
.byte 8
.byte 16
.byte 32
.byte 64
.byte 128
unmovemask64:
vmovq xmm0, rdi
vpbroadcastq ymm2, qword ptr [rip + .LCPI0_1]
- vpermq ymm1, ymm0, 68 ; 0b01_00_01_00
+ vpbroadcastq ymm1, xmm0
vpshufb ymm0, ymm1, ymmword ptr [rip + .LCPI0_0]
vpshufb ymm1, ymm1, ymmword ptr [rip + .LCPI0_2]
vpand ymm0, ymm0, ymm2
vpand ymm1, ymm1, ymm2
vpcmpeqb ymm0, ymm0, ymm2
vpcmpeqb ymm1, ymm1, ymm2
ret