# Check 64bit instructions with optimized encoding

	.text
_start:
	testq	$0x7f, %rax
	testl	$0x7f, %eax
	testw	$0x7f, %ax
	testb	$0x7f, %al
	.irp tst, test, "{evex} test", ctestc
	\tst	$0x7f, %rbx
	\tst	$0x7f, %ebx
	\tst	$0x7f, %bx
	\tst	$0x7f, %bl
	\tst	$0x7f, %rdi
	\tst	$0x7f, %edi
	\tst	$0x7f, %di
	\tst	$0x7f, %dil
	\tst	$0x7f, %r9
	\tst	$0x7f, %r9d
	\tst	$0x7f, %r9w
	\tst	$0x7f, %r9b
	\tst	$0x7f, %r12
	\tst	$0x7f, %r12d
	\tst	$0x7f, %r12w
	\tst	$0x7f, %r12b
	\tst	$0x7f, %r22
	\tst	$0x7f, %r22d
	\tst	$0x7f, %r22w
	\tst	$0x7f, %r22b
	.endr

	and	%cl, %cl
	and	%dx, %dx
	and	%ebx, %ebx
	and	%rsp, %rsp

	or	%bpl, %bpl
	or	%si, %si
	or	%edi, %edi
	or	%r8, %r8

	movsb	%al, %ax
	movsbw	%al, %ax

	movsw	%ax, %eax
	movswl	%ax, %eax

	movsl	%eax, %rax
	movslq	%eax, %rax
	movsxd	%eax, %rax

	.intel_syntax noprefix
	movsx	ax, al
	movsx	eax, ax
	movsx	rax, eax
	.att_syntax prefix

	vandnpd	%zmm1, %zmm1, %zmm5

	vmovdqa32	%xmm1, %xmm2
	vmovdqa64	%xmm1, %xmm2
	vmovdqu8	%xmm1, %xmm2
	vmovdqu16	%xmm1, %xmm2
	vmovdqu32	%xmm1, %xmm2
	vmovdqu64	%xmm1, %xmm2

	vmovdqa32	%xmm11, %xmm12
	vmovdqa64	%xmm11, %xmm12
	vmovdqu8	%xmm11, %xmm12
	vmovdqu16	%xmm11, %xmm12
	vmovdqu32	%xmm11, %xmm12
	vmovdqu64	%xmm11, %xmm12

	vmovdqa32	127(%rax), %xmm2
	vmovdqa64	127(%rax), %xmm2
	vmovdqu8	127(%rax), %xmm2
	vmovdqu16	127(%rax), %xmm2
	vmovdqu32	127(%rax), %xmm2
	vmovdqu64	127(%rax), %xmm2

	vmovdqa32	%xmm1, 128(%rax)
	vmovdqa64	%xmm1, 128(%rax)
	vmovdqu8	%xmm1, 128(%rax)
	vmovdqu16	%xmm1, 128(%rax)
	vmovdqu32	%xmm1, 128(%rax)
	vmovdqu64	%xmm1, 128(%rax)

	vmovdqa32	%ymm1, %ymm2
	vmovdqa64	%ymm1, %ymm2
	vmovdqu8	%ymm1, %ymm2
	vmovdqu16	%ymm1, %ymm2
	vmovdqu32	%ymm1, %ymm2
	vmovdqu64	%ymm1, %ymm2

	vmovdqa32	%ymm11, %ymm12
	vmovdqa64	%ymm11, %ymm12
	vmovdqu8	%ymm11, %ymm12
	vmovdqu16	%ymm11, %ymm12
	vmovdqu32	%ymm11, %ymm12
	vmovdqu64	%ymm11, %ymm12

	vmovdqa32	127(%rax), %ymm2
	vmovdqa64	127(%rax), %ymm2
	vmovdqu8	127(%rax), %ymm2
	vmovdqu16	127(%rax), %ymm2
	vmovdqu32	127(%rax), %ymm2
	vmovdqu64	127(%rax), %ymm2

	vmovdqa32	%ymm1, 128(%rax)
	vmovdqa64	%ymm1, 128(%rax)
	vmovdqu8	%ymm1, 128(%rax)
	vmovdqu16	%ymm1, 128(%rax)
	vmovdqu32	%ymm1, 128(%rax)
	vmovdqu64	%ymm1, 128(%rax)

	vmovdqa32	%xmm21, %xmm2
	vmovdqa64	%xmm21, %xmm2
	vmovdqu8	%xmm21, %xmm2
	vmovdqu16	%xmm21, %xmm2
	vmovdqu32	%xmm21, %xmm2
	vmovdqu64	%xmm21, %xmm2

	vmovdqa32	%zmm1, %zmm2
	vmovdqa64	%zmm1, %zmm2
	vmovdqu8	%zmm1, %zmm2
	vmovdqu16	%zmm1, %zmm2
	vmovdqu32	%zmm1, %zmm2
	vmovdqu64	%zmm1, %zmm2

	{evex} vmovdqa32	%ymm1, %ymm2
	{evex} vmovdqa64	%ymm1, %ymm2
	{evex} vmovdqu8		%xmm1, %xmm2
	{evex} vmovdqu16	%xmm1, %xmm2
	{evex} vmovdqu32	%xmm1, %xmm2
	{evex} vmovdqu64	%xmm1, %xmm2

	vmovdqa32	%ymm1, %ymm2{%k1}
	vmovdqa64	%ymm1, %ymm2{%k1}
	vmovdqu8	%xmm1, %xmm2{%k1}
	vmovdqu16	%xmm1, %xmm2{%k1}
	vmovdqu32	%xmm1, %xmm2{%k1}
	vmovdqu64	%xmm1, %xmm2{%k1}

	vmovdqa32	(%rax), %ymm2{%k1}
	vmovdqa64	(%rax), %ymm2{%k1}
	vmovdqu8	(%rax), %xmm2{%k1}
	vmovdqu16	(%rax), %xmm2{%k1}
	vmovdqu32	(%rax), %xmm2{%k1}
	vmovdqu64	(%rax), %xmm2{%k1}

	vmovdqa32	%ymm1, (%rax){%k1}
	vmovdqa64	%ymm1, (%rax){%k1}
	vmovdqu8	%xmm1, (%rax){%k1}
	vmovdqu16	%xmm1, (%rax){%k1}
	vmovdqu32	%xmm1, (%rax){%k1}
	vmovdqu64	%xmm1, (%rax){%k1}

	vmovdqa32	%xmm1, %xmm2{%k1}{z}
	vmovdqa64	%xmm1, %xmm2{%k1}{z}
	vmovdqu8	%xmm1, %xmm2{%k1}{z}
	vmovdqu16	%xmm1, %xmm2{%k1}{z}
	vmovdqu32	%xmm1, %xmm2{%k1}{z}
	vmovdqu64	%xmm1, %xmm2{%k1}{z}

	vpandd		%xmm2, %xmm3, %xmm4
	vpandq		%xmm12, %xmm3, %xmm4
	vpandnd		%xmm2, %xmm13, %xmm4
	vpandnq		%xmm2, %xmm3, %xmm14
	vpord		%xmm2, %xmm3, %xmm4
	vporq		%xmm12, %xmm3, %xmm4
	vpxord		%xmm2, %xmm13, %xmm4
	vpxorq		%xmm2, %xmm3, %xmm14

	vpandd		%ymm2, %ymm3, %ymm4
	vpandq		%ymm12, %ymm3, %ymm4
	vpandnd		%ymm2, %ymm13, %ymm4
	vpandnq		%ymm2, %ymm3, %ymm14
	vpord		%ymm2, %ymm3, %ymm4
	vporq		%ymm12, %ymm3, %ymm4
	vpxord		%ymm2, %ymm13, %ymm4
	vpxorq		%ymm2, %ymm3, %ymm14

	vpandd		112(%rax), %xmm2, %xmm3
	vpandq		112(%rax), %xmm2, %xmm3
	vpandnd		112(%rax), %xmm2, %xmm3
	vpandnq		112(%rax), %xmm2, %xmm3
	vpord		112(%rax), %xmm2, %xmm3
	vporq		112(%rax), %xmm2, %xmm3
	vpxord		112(%rax), %xmm2, %xmm3
	vpxorq		112(%rax), %xmm2, %xmm3

	vpandd		128(%rax), %xmm2, %xmm3
	vpandq		128(%rax), %xmm2, %xmm3
	vpandnd		128(%rax), %xmm2, %xmm3
	vpandnq		128(%rax), %xmm2, %xmm3
	vpord		128(%rax), %xmm2, %xmm3
	vporq		128(%rax), %xmm2, %xmm3
	vpxord		128(%rax), %xmm2, %xmm3
	vpxorq		128(%rax), %xmm2, %xmm3

	vpandd		96(%rax), %ymm2, %ymm3
	vpandq		96(%rax), %ymm2, %ymm3
	vpandnd		96(%rax), %ymm2, %ymm3
	vpandnq		96(%rax), %ymm2, %ymm3
	vpord		96(%rax), %ymm2, %ymm3
	vporq		96(%rax), %ymm2, %ymm3
	vpxord		96(%rax), %ymm2, %ymm3
	vpxorq		96(%rax), %ymm2, %ymm3

	vpandd		128(%rax), %ymm2, %ymm3
	vpandq		128(%rax), %ymm2, %ymm3
	vpandnd		128(%rax), %ymm2, %ymm3
	vpandnq		128(%rax), %ymm2, %ymm3
	vpord		128(%rax), %ymm2, %ymm3
	vporq		128(%rax), %ymm2, %ymm3
	vpxord		128(%rax), %ymm2, %ymm3
	vpxorq		128(%rax), %ymm2, %ymm3

	vpandd		%xmm22, %xmm23, %xmm24
	vpandq		%ymm22, %ymm3, %ymm4
	vpandnd		%ymm2, %ymm23, %ymm4
	vpandnq		%xmm2, %xmm3, %xmm24
	vpord		%xmm22, %xmm23, %xmm24
	vporq		%ymm22, %ymm3, %ymm4
	vpxord		%ymm2, %ymm23, %ymm4
	vpxorq		%xmm2, %xmm3, %xmm24

	vpandd		%xmm2, %xmm3, %xmm4{%k5}
	vpandq		%ymm12, %ymm3, %ymm4{%k5}
	vpandnd		%ymm2, %ymm13, %ymm4{%k5}
	vpandnq		%xmm2, %xmm3, %xmm14{%k5}
	vpord		%xmm2, %xmm3, %xmm4{%k5}
	vporq		%ymm12, %ymm3, %ymm4{%k5}
	vpxord		%ymm2, %ymm13, %ymm4{%k5}
	vpxorq		%xmm2, %xmm3, %xmm14{%k5}

	vpandd		(%rax){1to8}, %ymm2, %ymm3
	vpandq		(%rax){1to2}, %xmm2, %xmm3
	vpandnd		(%rax){1to4}, %xmm2, %xmm3
	vpandnq		(%rax){1to4}, %ymm2, %ymm3
	vpord		(%rax){1to8}, %ymm2, %ymm3
	vporq		(%rax){1to2}, %xmm2, %xmm3
	vpxord		(%rax){1to4}, %xmm2, %xmm3
	vpxorq		(%rax){1to4}, %ymm2, %ymm3

	pcmpeqq		%xmm2, %xmm2
	vpcmpeqq	%xmm2, %xmm2, %xmm0
	vpcmpeqq	%ymm2, %ymm2, %ymm0

	pcmpeqq		%xmm12, %xmm12
	vpcmpeqq	%xmm12, %xmm12, %xmm0
	vpcmpeqq	%ymm12, %ymm12, %ymm0

	vpbroadcastq	%xmm2, %xmm0
	vpbroadcastq	%xmm12, %xmm0
