// File: /workspace/github_c_makefile_star2_O3/mjosaarinen[P]brutus/crypto_aead/shellaes128v1d5n64/ref/shellaes.c
// Function: MIX
void MIX(u8 byte1[], u8 byte2[], unsigned int blen){
    u8 temp[blen];
    u8 tempbyte;
    int i;
    u8 carry;

    memcpy(temp, byte1, blen);
    xor_byte_string(byte2, temp, blen);

    /*left rotate temp[] by one bit*/
    carry=temp[0]>>7;
    for(i=blen-1; i>=0; --i){
        tempbyte=temp[i];
        temp[i]=tempbyte<<1;
        temp[i]|=carry;
        carry=tempbyte>>7;
    }

    xor_byte_string(temp, byte1, blen);
    xor_byte_string(temp, byte2, blen);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %edx, %r12d
movq %rsi, %rbx
movq %rdi, %r15
movl %edx, %r13d
movq %rsp, %r14
leaq 0xf(%r13), %rax
andq $-0x10, %rax
subq %rax, %r14
movq %r14, %rsp
movq %r14, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x2240
testl %r12d, %r12d
je 0x3c23
movabsq $0x1ffffffe0, %rcx      # imm = 0x1FFFFFFE0
leaq 0x1f(%r13), %rax
movq %rax, %rdx
andq $-0x20, %rdx
leaq -0x1(%r13), %rsi
vpbroadcastq %rsi, %ymm0
xorl %esi, %esi
vpmovsxbq 0x894b(%rip), %ymm1 # 0xc1a4
vpmovsxbq 0x8946(%rip), %ymm2 # 0xc1a8
vpmovsxbq 0x8941(%rip), %ymm3 # 0xc1ac
vpmovsxbq 0x893c(%rip), %ymm4 # 0xc1b0
vpmovsxbq 0x8937(%rip), %ymm5 # 0xc1b4
vpmovsxbq 0x8932(%rip), %ymm6 # 0xc1b8
vpmovsxbq 0x892d(%rip), %ymm7 # 0xc1bc
vpmovsxbq 0x8928(%rip), %ymm8 # 0xc1c0
vpbroadcastq %rsi, %ymm9
vpor %ymm1, %ymm9, %ymm10
vpor %ymm2, %ymm9, %ymm11
vpor %ymm3, %ymm9, %ymm12
vpor %ymm4, %ymm9, %ymm13
vpor %ymm5, %ymm9, %ymm14
vpor %ymm6, %ymm9, %ymm15
vporq %ymm7, %ymm9, %ymm16
vpor %ymm8, %ymm9, %ymm9
vpcmpleuq %ymm0, %ymm9, %k0
vpcmpleuq %ymm0, %ymm16, %k1
kshiftlb $0x4, %k1, %k1
korb %k1, %k0, %k0
vpcmpleuq %ymm0, %ymm15, %k1
vpcmpleuq %ymm0, %ymm14, %k2
kshiftlb $0x4, %k2, %k2
korb %k2, %k1, %k1
kunpckbw %k0, %k1, %k0
vpcmpleuq %ymm0, %ymm13, %k1
vpcmpleuq %ymm0, %ymm12, %k2
kshiftlb $0x4, %k2, %k2
korb %k2, %k1, %k1
vpcmpleuq %ymm0, %ymm11, %k2
vpcmpleuq %ymm0, %ymm10, %k3
kshiftlb $0x4, %k3, %k3
korb %k3, %k2, %k2
kunpckbw %k1, %k2, %k1
kunpckwd %k0, %k1, %k1
vmovdqu8 (%rbx,%rsi), %ymm9 {%k1} {z}
vmovdqu8 (%r14,%rsi), %ymm10 {%k1} {z}
vpxor %ymm9, %ymm10, %ymm9
vmovdqu8 %ymm9, (%r14,%rsi) {%k1}
addq $0x20, %rsi
cmpq %rsi, %rdx
jne 0x3898
movl %r12d, %edx
decl %edx
js 0x3a9b
movl %edx, %esi
leaq 0x1f(%r13), %rdx
andq %rcx, %rdx
decq %r13
vpbroadcastb (%r14), %ymm12
vpbroadcastq %r13, %ymm9
addq %r14, %rsi
addq $-0x1f, %rsi
xorl %edi, %edi
vbroadcasti128 0x8848(%rip), %ymm10 # ymm10 = mem[0,1,0,1]
vpbroadcastd 0x880f(%rip), %ymm11 # 0xc1a0
vpbroadcastq %rdi, %ymm13
vpor %ymm1, %ymm13, %ymm14
vpor %ymm2, %ymm13, %ymm15
vporq %ymm3, %ymm13, %ymm16
vporq %ymm4, %ymm13, %ymm17
vporq %ymm5, %ymm13, %ymm18
vporq %ymm6, %ymm13, %ymm19
vporq %ymm7, %ymm13, %ymm20
vpor %ymm8, %ymm13, %ymm13
vpcmpleuq %ymm9, %ymm13, %k0
vpcmpleuq %ymm9, %ymm20, %k1
kshiftlb $0x4, %k1, %k1
korb %k1, %k0, %k0
vpcmpleuq %ymm9, %ymm19, %k1
vpcmpleuq %ymm9, %ymm18, %k2
kshiftlb $0x4, %k2, %k2
korb %k2, %k1, %k1
kunpckbw %k0, %k1, %k0
vpcmpleuq %ymm9, %ymm17, %k1
vpcmpleuq %ymm9, %ymm16, %k2
kshiftlb $0x4, %k2, %k2
korb %k2, %k1, %k1
vpcmpleuq %ymm9, %ymm15, %k2
vpcmpleuq %ymm9, %ymm14, %k3
kshiftlb $0x4, %k3, %k3
korb %k3, %k2, %k2
kunpckbw %k1, %k2, %k1
kunpckwd %k0, %k1, %k0
vpmovm2b %k0, %ymm13
vpshufb %ymm10, %ymm13, %ymm13
vpermq $0x4e, %ymm13, %ymm13   # ymm13 = ymm13[2,3,0,1]
vpmovb2m %ymm13, %k1
vmovdqu8 (%rsi), %ymm13 {%k1} {z}
vpshufb %ymm10, %ymm13, %ymm13
vperm2i128 $0x31, %ymm13, %ymm12, %ymm12 # ymm12 = ymm12[2,3],ymm13[2,3]
vpermq $0x4e, %ymm13, %ymm13   # ymm13 = ymm13[2,3,0,1]
vpalignr $0xf, %ymm12, %ymm13, %ymm12 # ymm12 = ymm12[15],ymm13[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm12[31],ymm13[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpsrlw $0x7, %ymm12, %ymm12
vpaddw %ymm13, %ymm13, %ymm14
vpternlogd $0xe4, %ymm11, %ymm12, %ymm14
vpshufb %ymm10, %ymm14, %ymm12
vpermq $0x4e, %ymm12, %ymm12   # ymm12 = ymm12[2,3,0,1]
vmovdqu8 %ymm12, (%rsi) {%k1}
addq $0x20, %rdi
addq $-0x20, %rsi
vmovdqa %ymm13, %ymm12
cmpq %rdi, %rdx
jne 0x3991
testl %r12d, %r12d
je 0x3c23
andq %rcx, %rax
xorl %ecx, %ecx
vpbroadcastq %rcx, %ymm9
vpor %ymm1, %ymm9, %ymm10
vpor %ymm2, %ymm9, %ymm11
vpor %ymm3, %ymm9, %ymm12
vpor %ymm4, %ymm9, %ymm13
vpor %ymm5, %ymm9, %ymm14
vpor %ymm6, %ymm9, %ymm15
vporq %ymm7, %ymm9, %ymm16
vpor %ymm8, %ymm9, %ymm9
vpcmpleuq %ymm0, %ymm9, %k0
vpcmpleuq %ymm0, %ymm16, %k1
kshiftlb $0x4, %k1, %k1
korb %k1, %k0, %k0
vpcmpleuq %ymm0, %ymm15, %k1
vpcmpleuq %ymm0, %ymm14, %k2
kshiftlb $0x4, %k2, %k2
korb %k2, %k1, %k1
kunpckbw %k0, %k1, %k0
vpcmpleuq %ymm0, %ymm13, %k1
vpcmpleuq %ymm0, %ymm12, %k2
kshiftlb $0x4, %k2, %k2
korb %k2, %k1, %k1
vpcmpleuq %ymm0, %ymm11, %k2
vpcmpleuq %ymm0, %ymm10, %k3
kshiftlb $0x4, %k3, %k3
korb %k3, %k2, %k2
kunpckbw %k1, %k2, %k1
kunpckwd %k0, %k1, %k1
vmovdqu8 (%r14,%rcx), %ymm9 {%k1} {z}
vmovdqu8 (%r15,%rcx), %ymm10 {%k1} {z}
vpxor %ymm9, %ymm10, %ymm9
vmovdqu8 %ymm9, (%r15,%rcx) {%k1}
addq $0x20, %rcx
cmpq %rcx, %rax
jne 0x3aa9
xorl %ecx, %ecx
vpbroadcastq %rcx, %ymm9
vpor %ymm1, %ymm9, %ymm10
vpor %ymm2, %ymm9, %ymm11
vpor %ymm3, %ymm9, %ymm12
vpor %ymm4, %ymm9, %ymm13
vpor %ymm5, %ymm9, %ymm14
vpor %ymm6, %ymm9, %ymm15
vporq %ymm7, %ymm9, %ymm16
vpor %ymm8, %ymm9, %ymm9
vpcmpleuq %ymm0, %ymm9, %k0
vpcmpleuq %ymm0, %ymm16, %k1
kshiftlb $0x4, %k1, %k1
korb %k1, %k0, %k0
vpcmpleuq %ymm0, %ymm15, %k1
vpcmpleuq %ymm0, %ymm14, %k2
kshiftlb $0x4, %k2, %k2
korb %k2, %k1, %k1
kunpckbw %k0, %k1, %k0
vpcmpleuq %ymm0, %ymm13, %k1
vpcmpleuq %ymm0, %ymm12, %k2
kshiftlb $0x4, %k2, %k2
korb %k2, %k1, %k1
vpcmpleuq %ymm0, %ymm11, %k2
vpcmpleuq %ymm0, %ymm10, %k3
kshiftlb $0x4, %k3, %k3
korb %k3, %k2, %k2
kunpckbw %k1, %k2, %k1
kunpckwd %k0, %k1, %k1
vmovdqu8 (%r14,%rcx), %ymm9 {%k1} {z}
vmovdqu8 (%rbx,%rcx), %ymm10 {%k1} {z}
vpxor %ymm9, %ymm10, %ymm9
vmovdqu8 %ymm9, (%rbx,%rcx) {%k1}
addq $0x20, %rcx
cmpq %rcx, %rax
jne 0x3b67
leaq -0x28(%rbp), %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
vzeroupper
retq