// File: /workspace/github_c_makefile_star2_O0/mjosaarinen[P]brutus/crypto_aead/aes256otrpv3/ni_p8m1/encrypt.c
// Function: mul4
__inline__ static void mul4(__m128i in, __m128i *out) {
	const __m128i shuf = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
	const __m128i mask = _mm_set_epi32(135, 1, 1, 1);
	block intmp = _mm_shuffle_epi8(in, shuf);
	block tmp = _mm_srai_epi32(intmp, 31);
	tmp = _mm_and_si128(tmp, mask);
	tmp = _mm_shuffle_epi32(tmp, _MM_SHUFFLE(2, 1, 0, 3));
	*out = _mm_slli_epi32(intmp, 1);
	*out = _mm_xor_si128(*out, tmp);
	tmp = _mm_srai_epi32(*out, 31);
	tmp = _mm_and_si128(tmp, mask);
	tmp = _mm_shuffle_epi32(tmp, _MM_SHUFFLE(2, 1, 0, 3));
	*out = _mm_slli_epi32(*out, 1);
	*out = _mm_xor_si128(*out, tmp);
	*out = _mm_shuffle_epi8(*out, shuf);
}

// Assembly:
subq $0x168, %rsp            # imm = 0x168
vmovdqa %xmm0, -0x30(%rsp)
movq %rdi, -0x38(%rsp)
movb $0x0, 0x7f(%rsp)
movb $0x1, 0x7e(%rsp)
movb $0x2, 0x7d(%rsp)
movb $0x3, 0x7c(%rsp)
movb $0x4, 0x7b(%rsp)
movb $0x5, 0x7a(%rsp)
movb $0x6, 0x79(%rsp)
movb $0x7, 0x78(%rsp)
movb $0x8, 0x77(%rsp)
movb $0x9, 0x76(%rsp)
movb $0xa, 0x75(%rsp)
movb $0xb, 0x74(%rsp)
movb $0xc, 0x73(%rsp)
movb $0xd, 0x72(%rsp)
movb $0xe, 0x71(%rsp)
movb $0xf, 0x70(%rsp)
movzbl 0x70(%rsp), %eax
vmovd %eax, %xmm0
movzbl 0x71(%rsp), %eax
vpinsrb $0x1, %eax, %xmm0, %xmm0
movzbl 0x72(%rsp), %eax
vpinsrb $0x2, %eax, %xmm0, %xmm0
movzbl 0x73(%rsp), %eax
vpinsrb $0x3, %eax, %xmm0, %xmm0
movzbl 0x74(%rsp), %eax
vpinsrb $0x4, %eax, %xmm0, %xmm0
movzbl 0x75(%rsp), %eax
vpinsrb $0x5, %eax, %xmm0, %xmm0
movzbl 0x76(%rsp), %eax
vpinsrb $0x6, %eax, %xmm0, %xmm0
movzbl 0x77(%rsp), %eax
vpinsrb $0x7, %eax, %xmm0, %xmm0
movzbl 0x78(%rsp), %eax
vpinsrb $0x8, %eax, %xmm0, %xmm0
movzbl 0x79(%rsp), %eax
vpinsrb $0x9, %eax, %xmm0, %xmm0
movzbl 0x7a(%rsp), %eax
vpinsrb $0xa, %eax, %xmm0, %xmm0
movzbl 0x7b(%rsp), %eax
vpinsrb $0xb, %eax, %xmm0, %xmm0
movzbl 0x7c(%rsp), %eax
vpinsrb $0xc, %eax, %xmm0, %xmm0
movzbl 0x7d(%rsp), %eax
vpinsrb $0xd, %eax, %xmm0, %xmm0
movzbl 0x7e(%rsp), %eax
vpinsrb $0xe, %eax, %xmm0, %xmm0
movzbl 0x7f(%rsp), %eax
vpinsrb $0xf, %eax, %xmm0, %xmm0
vmovdqa %xmm0, 0x60(%rsp)
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm0, -0x50(%rsp)
movl $0x87, 0xa8(%rsp)
movl $0x1, 0xa4(%rsp)
movl $0x1, 0xa0(%rsp)
movl $0x1, 0x9c(%rsp)
movl 0xa0(%rsp), %edx
movl 0xa4(%rsp), %ecx
movl 0xa8(%rsp), %eax
vmovd 0x9c(%rsp), %xmm0
vpinsrd $0x1, %edx, %xmm0, %xmm0
vpinsrd $0x2, %ecx, %xmm0, %xmm0
vpinsrd $0x3, %eax, %xmm0, %xmm0
vmovdqa %xmm0, 0x80(%rsp)
vmovdqa 0x80(%rsp), %xmm0
vmovdqa %xmm0, -0x60(%rsp)
vmovdqa -0x30(%rsp), %xmm1
vmovdqa -0x50(%rsp), %xmm0
vmovdqa %xmm1, 0x50(%rsp)
vmovdqa %xmm0, 0x40(%rsp)
vmovdqa 0x50(%rsp), %xmm0
vmovdqa 0x40(%rsp), %xmm1
vpshufb %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, -0x70(%rsp)
vmovdqa -0x70(%rsp), %xmm0
vmovdqa %xmm0, 0xd0(%rsp)
movl $0x1f, 0xcc(%rsp)
vmovdqa 0xd0(%rsp), %xmm0
vmovd 0xcc(%rsp), %xmm1
vpsrad %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, -0x80(%rsp)
vmovdqa -0x80(%rsp), %xmm1
vmovdqa -0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x110(%rsp)
vmovdqa %xmm0, 0x100(%rsp)
vmovdqa 0x110(%rsp), %xmm0
vmovdqa 0x100(%rsp), %xmm1
vpand %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, -0x80(%rsp)
vmovdqa -0x80(%rsp), %xmm0
vpshufd $0x93, %xmm0, %xmm0     # xmm0 = xmm0[3,0,1,2]
vmovdqa %xmm0, -0x80(%rsp)
vmovdqa -0x70(%rsp), %xmm0
vmovdqa %xmm0, 0x150(%rsp)
movl $0x1, 0x14c(%rsp)
vmovdqa 0x150(%rsp), %xmm0
vmovd 0x14c(%rsp), %xmm1
vpslld %xmm1, %xmm0, %xmm0
movq -0x38(%rsp), %rax
vmovdqa %xmm0, (%rax)
movq -0x38(%rsp), %rax
vmovdqa (%rax), %xmm1
vmovdqa -0x80(%rsp), %xmm0
vmovdqa %xmm1, 0x10(%rsp)
vmovdqa %xmm0, (%rsp)
vmovdqa 0x10(%rsp), %xmm0
vmovdqa (%rsp), %xmm1
vpxor %xmm1, %xmm0, %xmm0
movq -0x38(%rsp), %rax
vmovdqa %xmm0, (%rax)
movq -0x38(%rsp), %rax
vmovdqa (%rax), %xmm0
vmovdqa %xmm0, 0xb0(%rsp)
movl $0x1f, 0xac(%rsp)
vmovdqa 0xb0(%rsp), %xmm0
vmovd 0xac(%rsp), %xmm1
vpsrad %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, -0x80(%rsp)
vmovdqa -0x80(%rsp), %xmm1
vmovdqa -0x60(%rsp), %xmm0
vmovdqa %xmm1, 0xf0(%rsp)
vmovdqa %xmm0, 0xe0(%rsp)
vmovdqa 0xf0(%rsp), %xmm0
vmovdqa 0xe0(%rsp), %xmm1
vpand %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, -0x80(%rsp)
vmovdqa -0x80(%rsp), %xmm0
vpshufd $0x93, %xmm0, %xmm0     # xmm0 = xmm0[3,0,1,2]
vmovdqa %xmm0, -0x80(%rsp)
movq -0x38(%rsp), %rax
vmovdqa (%rax), %xmm0
vmovdqa %xmm0, 0x130(%rsp)
movl $0x1, 0x12c(%rsp)
vmovdqa 0x130(%rsp), %xmm0
movl 0x12c(%rsp), %eax
vmovd %eax, %xmm1
vpslld %xmm1, %xmm0, %xmm0
movq -0x38(%rsp), %rax
vmovdqa %xmm0, (%rax)
movq -0x38(%rsp), %rax
vmovdqa (%rax), %xmm1
vmovdqa -0x80(%rsp), %xmm0
vmovdqa %xmm1, -0x10(%rsp)
vmovdqa %xmm0, -0x20(%rsp)
vmovdqa -0x10(%rsp), %xmm0
vpxor -0x20(%rsp), %xmm0, %xmm0
movq -0x38(%rsp), %rax
vmovdqa %xmm0, (%rax)
movq -0x38(%rsp), %rax
vmovdqa (%rax), %xmm1
vmovdqa -0x50(%rsp), %xmm0
vmovdqa %xmm1, 0x30(%rsp)
vmovdqa %xmm0, 0x20(%rsp)
vmovdqa 0x30(%rsp), %xmm0
vmovdqa 0x20(%rsp), %xmm1
vpshufb %xmm1, %xmm0, %xmm0
movq -0x38(%rsp), %rax
vmovdqa %xmm0, (%rax)
addq $0x168, %rsp            # imm = 0x168
retq