// File: /workspace/github_c_makefile_star2_O1/lh3[P]miniprot/nasw-sse.c
// Function: ns_global_gs32b
void ns_global_gs32b(void *km, const char *ns, int32_t nl, const char *as, int32_t al, const ns_opt_t *opt, const uint8_t *ss, ns_rst_t *r)
{
	typedef int32_t ns_int_t;
	const int32_t ssize = sizeof(ns_int_t), vsize = 16 / ssize;
	const ns_int_t neg_inf = -0x40000000;
	NS_GEN_VAR(epi32)
	NS_GEN_PREPARE(epi32)
	NS_GEN_INIT1(epi32)

	if (tb == 0) {
		for (i = 2; i < nl; ++i) {
			NS_GEN_INIT2(epi32)
			for (j = 0; j < slen; ++j) {
				__m128i h, t, u, v;
				// H(i-3,j-1) + s(i,j)
				u = _mm_load_si128(H3 + j - 1);
				v = _mm_load_si128(S + j);
				h = _mm_add_epi32(u, v);
				// I(i,j) = max{ H(i,j-1) - q, I(i,j-1) } - e
				t = _mm_sub_epi32(last_h, go);
				t = _mm_max_epi32(t, I);
				I = _mm_sub_epi32(t, ge);
				h = _mm_max_epi32(h, I);
				// D(i,j) = max{ H(i-3,j) - q, D(i-3,j) } - e
				u = _mm_load_si128(H3 + j);
				v = _mm_load_si128(D3 + j);
				t = _mm_max_epi32(_mm_sub_epi32(u, go), v);
				t = _mm_sub_epi32(t, gei);
				_mm_store_si128(D + j, t);
				h = _mm_max_epi32(h, t);
				// A(i,j) = max{ H(i-1,j)   - r - d(i-1), A(i-1,j) }
				u = _mm_sub_epi32(_mm_load_si128(H1 + j), io);
				v = _mm_load_si128(A + j);
				t = _mm_sub_epi32(u, dim1);
				t = _mm_max_epi32(t, v);
				_mm_store_si128(A + j, t);
				h = _mm_max_epi32(h, _mm_sub_epi32(t, ai));
				// B(i,j) = max{ H(i-1,j-1) - r - d(i),   B(i-1,j) }
				u = _mm_sub_epi32(_mm_load_si128(H1 + j - 1), io);
				v = _mm_load_si128(B + j);
				t = _mm_sub_epi32(u, di);
				t = _mm_max_epi32(t, v);
				_mm_store_si128(B + j, t);
				h = _mm_max_epi32(h, _mm_sub_epi32(t, aim2));
				// C(i,j) = max{ H(i-1,j-1) - r - d(i+1), C(i-1,j) }
				v = _mm_load_si128(C + j);
				t = _mm_sub_epi32(u, dip1);
				t = _mm_max_epi32(t, v);
				_mm_store_si128(C + j, t);
				h = _mm_max_epi32(h, _mm_sub_epi32(t, aim1));
				// H(i-1,j-1)-f and H(i-2,j-1)-f
				t = _mm_sub_epi32(_mm_load_si128(H1 + j), fs);
				h = _mm_max_epi32(h, t);
				t = _mm_sub_epi32(_mm_load_si128(H2 + j), fs);
				h = _mm_max_epi32(h, t);
				// H(i-1,j)-f and H(i-2,j)-f
				t = _mm_sub_epi32(_mm_load_si128(H1 + j - 1), fs);
				h = _mm_max_epi32(h, t);
				t = _mm_sub_epi32(_mm_load_si128(H2 + j - 1), fs);
				h = _mm_max_epi32(h, t);
				// save H
				_mm_store_si128(H + j, h);
				last_h = h;
			}
			I = _mm_max_epi32(_mm_sub_epi32(last_h, goe), _mm_sub_epi32(I, ge));
			for (k = 0; k < vsize; ++k) { // lazy-F loop
				I = _mm_insert_epi32(_mm_slli_si128(I, sizeof(ns_int_t)), neg_inf, 0);
				for (j = 0; j < slen; ++j) {
					__m128i h;
					h = _mm_load_si128(H + j);
					h = _mm_max_epi32(h, I);
					_mm_store_si128(H + j, h);
					h = _mm_sub_epi32(h, goe);
					I = _mm_sub_epi32(I, ge);
					if (ns_le_epi32(I, h)) break;
				}
				if (j < slen) break;
			}
			tmp = H3, H3 = H2, H2 = H1, H1 = H, H = tmp;
			tmp = D3, D3 = D2, D2 = D1, D1 = D, D = tmp;
		}
	} else {
		for (i = 2; i < nl; ++i) {
			__m128i *tbi = tb + i * slen;
			NS_GEN_INIT2(epi32)
			for (j = 0; j < slen; ++j) {
				__m128i h, t, u, v, y, z;
				// H(i-3,j-1) + s(i,j)
				y = _mm_setzero_si128();
				z = _mm_setzero_si128();
				u = _mm_load_si128(H3 + j - 1);
				v = _mm_load_si128(S + j);
				h = _mm_add_epi32(u, v);
				// I(i,j) = max{ H(i,j-1) - q, I(i,j-1) } - e
				t = _mm_sub_epi32(last_h, go);
				z = _mm_or_si128(z, _mm_and_si128(_mm_cmpgt_epi32(I, t), _mm_set1_epi32(1<<4)));
				t = _mm_max_epi32(t, I);
				I = _mm_sub_epi32(t, ge);
				y = ns_select(_mm_cmpgt_epi32(I, h), _mm_set1_epi32(1), y);
				h = _mm_max_epi32(h, I);
				// D(i,j) = max{ H(i-3,j) - q, D(i-3,j) } - e
				u = _mm_sub_epi32(_mm_load_si128(H3 + j), go);
				v = _mm_load_si128(D3 + j);
				z = _mm_or_si128(z, _mm_and_si128(_mm_cmpgt_epi32(v, u), _mm_set1_epi32(1<<5)));
				t = _mm_max_epi32(u, v);
				t = _mm_sub_epi32(t, gei);
				_mm_store_si128(D + j, t);
				y = ns_select(_mm_cmpgt_epi32(t, h), _mm_set1_epi32(2), y);
				h = _mm_max_epi32(h, t);
				// A(i,j) = max{ H(i-1,j)   - r - d(i-1), A(i-1,j) }
				u = _mm_sub_epi32(_mm_load_si128(H1 + j), io);
				v = _mm_load_si128(A + j);
				t = _mm_sub_epi32(u, dim1);
				z = _mm_or_si128(z, _mm_and_si128(_mm_cmpgt_epi32(v, t), _mm_set1_epi32(1<<6)));
				t = _mm_max_epi32(t, v);
				_mm_store_si128(A + j, t);
				t = _mm_sub_epi32(t, ai);
				y = ns_select(_mm_cmpgt_epi32(t, h), _mm_set1_epi32(3), y);
				h = _mm_max_epi32(h, t);
				// B(i,j) = max{ H(i-1,j-1) - r - d(i),   B(i-1,j) }
				u = _mm_sub_epi32(_mm_load_si128(H1 + j - 1), io);
				v = _mm_load_si128(B + j);
				t = _mm_sub_epi32(u, di);
				z = _mm_or_si128(z, _mm_and_si128(_mm_cmpgt_epi32(v, t), _mm_set1_epi32(1<<7)));
				t = _mm_max_epi32(t, v);
				_mm_store_si128(B + j, t);
				t = _mm_sub_epi32(t, aim2);
				y = ns_select(_mm_cmpgt_epi32(t, h), _mm_set1_epi32(4), y);
				h = _mm_max_epi32(h, t);
				// C(i,j) = max{ H(i-1,j-1) - r - d(i+1), C(i-1,j) }
				v = _mm_load_si128(C + j);
				t = _mm_sub_epi32(u, dip1);
				z = _mm_or_si128(z, _mm_and_si128(_mm_cmpgt_epi32(v, t), _mm_set1_epi32(1<<8)));
				t = _mm_max_epi32(t, v);
				_mm_store_si128(C + j, t);
				t = _mm_sub_epi32(t, aim1);
				y = ns_select(_mm_cmpgt_epi32(t, h), _mm_set1_epi32(5), y);
				h = _mm_max_epi32(h, t);
				// H(i-1,j-1)-f and H(i-2,j-1)-f
				t = _mm_sub_epi32(_mm_load_si128(H1 + j), fs);
				y = ns_select(_mm_cmpgt_epi32(t, h), _mm_set1_epi32(6), y);
				h = _mm_max_epi32(h, t);
				t = _mm_sub_epi32(_mm_load_si128(H2 + j), fs);
				y = ns_select(_mm_cmpgt_epi32(t, h), _mm_set1_epi32(7), y);
				h = _mm_max_epi32(h, t);
				// H(i-1,j)-f and H(i-2,j)-f
				t = _mm_sub_epi32(_mm_load_si128(H1 + j - 1), fs);
				y = ns_select(_mm_cmpgt_epi32(t, h), _mm_set1_epi32(8), y);
				h = _mm_max_epi32(h, t);
				t = _mm_sub_epi32(_mm_load_si128(H2 + j - 1), fs);
				y = ns_select(_mm_cmpgt_epi32(t, h), _mm_set1_epi32(9), y);
				h = _mm_max_epi32(h, t);
				// save H and traceback
				z = _mm_or_si128(z, y);
				_mm_store_si128(tbi + j, z);
				_mm_store_si128(H + j, h);
				last_h = h;
			}
			I = _mm_max_epi32(_mm_sub_epi32(last_h, goe), _mm_sub_epi32(I, ge));
			for (k = 0; k < vsize; ++k) { // lazy-F loop
				I = _mm_insert_epi32(_mm_slli_si128(I, sizeof(ns_int_t)), neg_inf, 0);
				for (j = 0; j < slen; ++j) {
					__m128i h, z;
					z = _mm_load_si128(tbi + j);
					h = _mm_load_si128(H + j);
					z = _mm_or_si128(z, _mm_and_si128(_mm_cmpgt_epi32(I, h), _mm_set1_epi32(1<<9)));
					h = _mm_max_epi32(h, I);
					_mm_store_si128(tbi + j, z);
					_mm_store_si128(H + j, h);
					h = _mm_sub_epi32(h, goe);
					I = _mm_sub_epi32(I, ge);
					if (ns_le_epi32(I, h)) break;
				}
				if (j < slen) break;
			}
			tmp = H3, H3 = H2, H2 = H1, H1 = H, H = tmp;
			tmp = D3, D3 = D2, D2 = D1, D1 = D, D = tmp;
		}
	}
	r->score = *((ns_int_t*)&H1[(al-1)%slen] + (al-1)/slen);
	kfree(km, mem_H);
	kfree(km, mem_ap);
	kfree(km, nas);
	if (tb) {
		ns_backtrack(km, vsize, tb, nl, al, &r->cigar, &r->n_cigar, &r->m_cigar);
		kfree(km, mem_tb);
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x188, %rsp            # imm = 0x188
movq %r9, %r12
movl %r8d, %r14d
movq %rdi, %r13
movq 0x1c8(%rsp), %rdi
movq 0x1c0(%rsp), %rax
leal 0x3(%r14), %r8d
leal 0x6(%r14), %r9d
testl %r8d, %r8d
cmovnsl %r8d, %r9d
movl (%r12), %r8d
sarl $0x2, %r9d
movq %r9, 0x8(%rsp)
movl $0x0, (%rdi)
movl %edx, 0x8(%rdi)
movl %r14d, 0xc(%rdi)
movl $0x80000000, 0x10(%rdi) # imm = 0x80000000
leaq 0x120(%rsp), %r10
movl %r8d, 0xd0(%rsp)
testb $0x2, %r8b
movl %edx, 0x14(%rsp)
movq %rdi, 0x170(%rsp)
leaq 0xc8(%rsp), %r11
leaq 0x128(%rsp), %rbx
movq %r13, %rdi
movl %r14d, %r8d
movq %r12, %r9
jne 0xa864
pushq %r10
pushq %r11
pushq %rbx
pushq %rax
callq 0x9db0
jmp 0xa86f
pushq %r10
pushq %r11
pushq %rbx
pushq %rax
callq 0x9a01
addq $0x20, %rsp
movq %rax, 0x50(%rsp)
movslq 0x1c(%r12), %rsi
movslq 0x8(%rsp), %r15
imulq %r15, %rsi
shlq $0x4, %rsi
addq $0x10, %rsi
movq %r13, 0xa0(%rsp)
movq %r13, %rdi
callq 0x80a1
movq %rax, 0x168(%rsp)
addq $0xf, %rax
andq $-0x10, %rax
movq %rax, 0xb8(%rsp)
movl 0x1c(%r12), %r9d
testl %r9d, %r9d
jle 0xa94e
movq 0x8(%rsp), %rdi
leal (,%rdi,4), %eax
movq 0x40(%r12), %rcx
movl %edi, %edx
cmpl $0x2, %edi
movl $0x1, %esi
cmovgel %edi, %esi
xorl %edi, %edi
movq 0xb8(%rsp), %r8
testl %r14d, %r14d
jle 0xa942
imull %edi, %r9d
movslq %r9d, %r9
addq %rcx, %r9
xorl %r10d, %r10d
cmpl %r10d, %eax
jle 0xa93a
movq 0x128(%rsp), %r11
addq %r10, %r11
xorl %ebx, %ebx
leal (%r10,%rbx), %r13d
movl $0xc0000000, %ebp       # imm = 0xC0000000
cmpl %r14d, %r13d
jge 0xa928
movzbl (%r11,%rbx), %r13d
movsbl (%r9,%r13), %ebp
movl %ebp, (%r8)
addq $0x4, %r8
addq %rdx, %rbx
leal (%r10,%rbx), %ebp
cmpl %ebp, %eax
jg 0xa910
incq %r10
cmpq %rsi, %r10
jne 0xa8fe
incl %edi
movl 0x1c(%r12), %r9d
cmpl %r9d, %edi
jl 0xa8ec
movl 0x4(%r12), %eax
movl 0x8(%r12), %ecx
movq %rax, 0x130(%rsp)
movq %rcx, 0x100(%rsp)
addl %ecx, %eax
movl %eax, 0x70(%rsp)
movl 0xc(%r12), %eax
movl %eax, 0x24(%rsp)
movss 0x10(%r12), %xmm0
movaps %xmm0, 0x80(%rsp)
movq 0x8(%rsp), %rbp
leal 0x1(%rbp), %eax
movq %rax, 0x40(%rsp)
leal (%rax,%rax,4), %eax
leal (,%rbp,8), %ebx
subl %ebp, %ebx
addl %eax, %ebx
movslq %ebx, %rsi
shlq $0x4, %rsi
addq $0x10, %rsi
movq 0xa0(%rsp), %rdi
callq 0x80a1
leaq 0xf(%rax), %r13
andq $-0x10, %r13
leal 0x2(,%rbp,2), %ecx
movslq %ecx, %r10
shlq $0x4, %r10
movq 0x40(%rsp), %rcx
leal (%rcx,%rcx,2), %ecx
movslq %ecx, %r11
shlq $0x4, %r11
leal 0x4(,%rbp,4), %ecx
movslq %ecx, %r8
shlq $0x4, %r8
leaq (%r8,%r13), %rbp
movq %r15, %rdi
shlq $0x4, %rdi
leaq (%rdi,%rbp), %rcx
leaq (%rdi,%rcx), %rdx
addq $0x10, %rdx
leaq (%rdx,%rdi), %rsi
movq %rdi, 0x28(%rsp)
addq %rsi, %rdi
xorl %ecx, %ecx
testb $0x6, 0xd0(%rsp)
movq %rax, 0x160(%rsp)
movq %rdx, 0x30(%rsp)
movq %rsi, 0x58(%rsp)
movq %rdi, 0x18(%rsp)
movq %r8, 0x40(%rsp)
jne 0xaa9c
movl (%r12), %eax
movl $0x0, %edx
andl $0x1, %eax
je 0xaa9e
movq 0x8(%rsp), %rax
imull 0x14(%rsp), %eax
movslq %eax, %rsi
shlq $0x4, %rsi
addq $0x10, %rsi
movq %rbp, 0xd0(%rsp)
movq 0xa0(%rsp), %rdi
movq %r10, %rbp
movq %r11, 0x60(%rsp)
callq 0x80a1
movq 0x60(%rsp), %r11
movq %rbp, %r10
movq 0x18(%rsp), %rdi
movq 0xd0(%rsp), %rbp
movq %rax, %rcx
movq %rax, %rdx
addq $0xf, %rdx
andq $-0x10, %rdx
jmp 0xaa9e
xorl %edx, %edx
movq %rdx, 0x98(%rsp)
movq %rcx, 0x158(%rsp)
movq 0x28(%rsp), %rax
leaq (%rdi,%rax), %r8
movd 0x130(%rsp), %xmm0
movd 0x100(%rsp), %xmm1
movd 0x70(%rsp), %xmm2
movd 0x24(%rsp), %xmm3
leaq (%r10,%r13), %r9
leaq (%r11,%r13), %rdi
leaq (%rax,%r13), %rcx
addq $0x10, %rcx
testl %ebx, %ebx
jle 0xab18
movq 0x8(%rsp), %rax
leal (%rax,%rax,2), %edx
leal 0x4(,%rdx,4), %edx
shlq $0x4, %rdx
orq $0x10, %rdx
xorl %esi, %esi
movaps 0x9027(%rip), %xmm4     # 0x13b30
movaps %xmm4, (%r13,%rsi)
addq $0x10, %rsi
cmpq %rsi, %rdx
jne 0xab09
movq %r8, 0x118(%rsp)
movq 0x28(%rsp), %rax
leaq (%r8,%rax), %rdx
leaq 0x10(%r13), %rbx
pshufd $0x0, %xmm0, %xmm15     # xmm15 = xmm0[0,0,0,0]
pshufd $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
pshufd $0x0, %xmm2, %xmm2      # xmm2 = xmm2[0,0,0,0]
pshufd $0x0, %xmm3, %xmm0      # xmm0 = xmm3[0,0,0,0]
movdqa %xmm0, 0x130(%rsp)
pshufd $0x0, 0x80(%rsp), %xmm4 # xmm4 = mem[0,0,0,0]
leaq 0x20(%r13,%rax), %rsi
leaq 0x10(%r13,%r10), %r8
leaq 0x10(%r13,%r11), %r10
movaps (%rdi), %xmm0
andps 0x8fd2(%rip), %xmm0     # 0x13b40
movaps %xmm0, (%rdi)
movdqa (%r9), %xmm0
xorl %r11d, %r11d
xorl %edi, %edi
subw 0x10(%r12), %di
pinsrw $0x0, %edi, %xmm0
pinsrw $0x1, %r11d, %xmm0
leaq (%rax,%rbp), %rdi
addq $0x10, %rdi
movdqa %xmm0, (%r9)
movdqa (%rcx), %xmm0
movzwl 0x10(%r12), %r9d
xorl %ebp, %ebp
subw %r9w, %bp
pinsrw $0x0, %ebp, %xmm0
pinsrw $0x1, %r11d, %xmm0
movdqa %xmm0, (%rcx)
cmpq $0x0, 0x98(%rsp)
movdqa %xmm15, 0xd0(%rsp)
je 0xb2fc
movl 0x14(%rsp), %eax
cmpl $0x3, %eax
jl 0xb7ee
movq 0x28(%rsp), %rcx
addq %rdx, %rcx
movq 0xc8(%rsp), %r9
movq %r9, 0xb0(%rsp)
movq 0x120(%rsp), %r9
movq %r9, 0xa8(%rsp)
movq 0x8(%rsp), %r12
leal -0x1(%r12), %r9d
movslq %r9d, %r9
testl %r14d, %r14d
setg 0x80(%rsp)
cmpl $0x2, %r12d
movl $0x1, %r11d
cmovgel %r12d, %r11d
movl %eax, %eax
movq %rax, 0x180(%rsp)
movq %r15, %r12
shlq $0x5, %r12
addq 0x98(%rsp), %r12
shlq $0x4, %r11
shlq $0x4, %r9
movq %r9, 0x178(%rsp)
movl $0x2, %r9d
movdqa 0x8eec(%rip), %xmm9     # 0x13b50
movdqa 0x8f23(%rip), %xmm11    # 0x13b90
movdqa 0x8f2a(%rip), %xmm12    # 0x13ba0
movdqa 0x8f31(%rip), %xmm14    # 0x13bb0
movq 0x58(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x58(%rsp)
movq %rdi, 0x30(%rsp)
movq %r8, %rdi
movq %rsi, %r8
movq %rbx, %rsi
movq 0x50(%rsp), %rax
movq %r9, 0x38(%rsp)
movzbl (%rax,%r9), %r9d
movdqa %xmm4, %xmm0
cmpl $0x14, %r9d
je 0xacc1
movdqa %xmm1, %xmm0
movdqa %xmm0, %xmm3
movq 0xb0(%rsp), %rax
movq 0x38(%rsp), %r13
movsbl -0x1(%rax,%r13), %ebx
movsbl (%rax,%r13), %ebp
movl %ebp, 0x70(%rsp)
movsbl 0x1(%rax,%r13), %eax
movl %eax, 0x40(%rsp)
movq 0xa8(%rsp), %rax
movsbl (%rax,%r13), %ebp
movl %ebp, 0x60(%rsp)
movsbl -0x1(%rax,%r13), %ebp
movl %ebp, 0xf0(%rsp)
movsbl -0x2(%rax,%r13), %eax
movl %eax, 0xe0(%rsp)
cmpq $0x3, %r13
jb 0xad55
movq 0x178(%rsp), %rax
movdqa (%r10,%rax), %xmm0
pslldq $0x4, %xmm0             # xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm0, -0x10(%r10)
movdqa (%rdi,%rax), %xmm0
pslldq $0x4, %xmm0             # xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm0, -0x10(%rdi)
movdqa (%r8,%rax), %xmm0
pslldq $0x4, %xmm0             # xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm0, -0x10(%r8)
movdqa 0x8dd3(%rip), %xmm5     # 0x13b30
movdqa %xmm5, %xmm13
testl %r14d, %r14d
movq 0x30(%rsp), %rax
movq 0x18(%rsp), %r13
movq 0x118(%rsp), %rbp
movdqa %xmm3, 0x100(%rsp)
jle 0xb1fb
imull 0x8(%rsp), %r9d
movslq %r9d, %r9
shlq $0x4, %r9
addq 0xb8(%rsp), %r9
movd 0x70(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa %xmm0, 0x70(%rsp)
movd 0x40(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa %xmm0, 0x40(%rsp)
movd 0x60(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa %xmm0, 0x60(%rsp)
movd 0xf0(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa %xmm0, 0xf0(%rsp)
movd 0xe0(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa %xmm0, 0xe0(%rsp)
addl 0x24(%rsp), %ebx
movd %ebx, %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa %xmm0, 0x140(%rsp)
xorl %ebx, %ebx
movdqa 0x8d14(%rip), %xmm0     # 0x13b30
movdqa %xmm0, %xmm5
movdqa (%r9,%rbx), %xmm7
paddd -0x10(%r10,%rbx), %xmm7
psubd %xmm15, %xmm5
movdqa %xmm0, %xmm3
pcmpgtd %xmm5, %xmm3
pand %xmm9, %xmm3
movdqa %xmm5, %xmm13
pcmpgtd %xmm0, %xmm13
pand %xmm13, %xmm5
pandn %xmm0, %xmm13
por %xmm5, %xmm13
psubd %xmm1, %xmm13
movdqa %xmm13, %xmm0
pcmpgtd %xmm7, %xmm0
movdqa %xmm7, %xmm5
pcmpgtd %xmm13, %xmm5
pand %xmm5, %xmm7
pandn %xmm13, %xmm5
por %xmm7, %xmm5
movdqa (%r10,%rbx), %xmm8
psubd %xmm15, %xmm8
movdqa (%r13,%rbx), %xmm7
movdqa %xmm4, %xmm6
movdqa %xmm14, %xmm4
movdqa %xmm12, %xmm14
movdqa %xmm11, %xmm12
movdqa %xmm9, %xmm11
movdqa %xmm8, %xmm9
pcmpgtd %xmm7, %xmm9
movdqa %xmm8, %xmm10
pand %xmm9, %xmm10
pandn %xmm7, %xmm9
por %xmm10, %xmm9
psubd 0x100(%rsp), %xmm9
movdqa %xmm9, %xmm10
pcmpgtd %xmm5, %xmm10
movdqa %xmm10, %xmm15
pandn %xmm0, %xmm15
pcmpgtd %xmm8, %xmm7
pand 0x8c71(%rip), %xmm7     # 0x13b60
por %xmm3, %xmm7
movdqa %xmm9, (%rax,%rbx)
pand 0x8c6e(%rip), %xmm10    # 0x13b70
psrld $0x1f, %xmm15
por %xmm10, %xmm15
movdqa %xmm5, %xmm0
pcmpgtd %xmm9, %xmm0
pand %xmm0, %xmm5
pandn %xmm9, %xmm0
por %xmm5, %xmm0
movdqa (%r8,%rbx), %xmm3
psubd 0x140(%rsp), %xmm3
movdqa (%rbp,%rbx), %xmm8
movdqa %xmm8, %xmm5
pcmpgtd %xmm3, %xmm5
pand 0x8c36(%rip), %xmm5     # 0x13b80
por %xmm7, %xmm5
movdqa %xmm3, %xmm10
pcmpgtd %xmm8, %xmm10
pand %xmm10, %xmm3
pandn %xmm8, %xmm10
por %xmm3, %xmm10
movdqa %xmm10, (%rbp,%rbx)
psubd 0x60(%rsp), %xmm10
movdqa %xmm10, %xmm9
pcmpgtd %xmm0, %xmm9
movdqa %xmm9, %xmm3
pandn %xmm15, %xmm3
psrld $0x1e, %xmm9
por %xmm3, %xmm9
movdqa %xmm0, %xmm7
pcmpgtd %xmm10, %xmm7
pand %xmm7, %xmm0
pandn %xmm10, %xmm7
por %xmm0, %xmm7
movdqa -0x10(%r8,%rbx), %xmm3
psubd 0x130(%rsp), %xmm3
movdqa (%rdx,%rbx), %xmm0
movdqa %xmm3, %xmm8
psubd 0x70(%rsp), %xmm8
movdqa %xmm0, %xmm10
pcmpgtd %xmm8, %xmm10
movdqa %xmm8, %xmm15
pcmpgtd %xmm0, %xmm15
pand %xmm15, %xmm8
pandn %xmm0, %xmm15
por %xmm8, %xmm15
movdqa %xmm15, (%rdx,%rbx)
psubd 0xe0(%rsp), %xmm15
movdqa %xmm15, %xmm8
pcmpgtd %xmm7, %xmm8
movdqa %xmm8, %xmm0
pandn %xmm9, %xmm0
movdqa %xmm11, %xmm9
movdqa %xmm12, %xmm11
movdqa %xmm14, %xmm12
movdqa %xmm4, %xmm14
movdqa %xmm6, %xmm4
movdqa 0x8b8e(%rip), %xmm6     # 0x13bc0
pand %xmm11, %xmm10
pand %xmm12, %xmm8
por %xmm0, %xmm8
movdqa %xmm7, %xmm0
pcmpgtd %xmm15, %xmm0
pand %xmm0, %xmm7
pandn %xmm15, %xmm0
por %xmm7, %xmm0
movdqa (%rcx,%rbx), %xmm7
psubd 0x40(%rsp), %xmm3
movdqa %xmm7, %xmm15
pcmpgtd %xmm3, %xmm15
pand %xmm14, %xmm15
por %xmm10, %xmm15
por %xmm5, %xmm15
movdqa %xmm3, %xmm5
pcmpgtd %xmm7, %xmm5
pand %xmm5, %xmm3
pandn %xmm7, %xmm5
por %xmm3, %xmm5
movdqa %xmm5, (%rcx,%rbx)
psubd 0xf0(%rsp), %xmm5
movdqa %xmm5, %xmm3
pcmpgtd %xmm0, %xmm3
movdqa %xmm3, %xmm7
pandn %xmm8, %xmm7
pand %xmm6, %xmm3
movdqa 0x8b16(%rip), %xmm6     # 0x13bd0
por %xmm7, %xmm3
movdqa %xmm0, %xmm7
pcmpgtd %xmm5, %xmm7
pand %xmm7, %xmm0
pandn %xmm5, %xmm7
por %xmm0, %xmm7
movdqa (%r8,%rbx), %xmm0
psubd %xmm4, %xmm0
movdqa %xmm0, %xmm5
pcmpgtd %xmm7, %xmm5
movdqa %xmm5, %xmm8
pandn %xmm3, %xmm8
pand %xmm6, %xmm5
movdqa 0x8ae6(%rip), %xmm6     # 0x13be0
por %xmm8, %xmm5
movdqa %xmm7, %xmm3
pcmpgtd %xmm0, %xmm3
pand %xmm3, %xmm7
pandn %xmm0, %xmm3
por %xmm7, %xmm3
movdqa (%rdi,%rbx), %xmm0
psubd %xmm4, %xmm0
movdqa %xmm0, %xmm7
pcmpgtd %xmm3, %xmm7
movdqa %xmm7, %xmm8
pandn %xmm5, %xmm8
movdqa -0x10(%r8,%rbx), %xmm5
psrld $0x1d, %xmm7
por %xmm8, %xmm7
movdqa %xmm3, %xmm8
pcmpgtd %xmm0, %xmm8
pand %xmm8, %xmm3
pandn %xmm0, %xmm8
por %xmm3, %xmm8
psubd %xmm4, %xmm5
movdqa %xmm5, %xmm0
pcmpgtd %xmm8, %xmm0
movdqa %xmm0, %xmm3
pandn %xmm7, %xmm3
movdqa -0x10(%rdi,%rbx), %xmm7
pand %xmm6, %xmm0
movdqa 0x8a71(%rip), %xmm6     # 0x13bf0
por %xmm3, %xmm0
movdqa %xmm8, %xmm3
pcmpgtd %xmm5, %xmm3
pand %xmm3, %xmm8
pandn %xmm5, %xmm3
por %xmm8, %xmm3
psubd %xmm4, %xmm7
movdqa %xmm7, %xmm8
pcmpgtd %xmm3, %xmm8
movdqa %xmm8, %xmm5
pandn %xmm0, %xmm5
pand %xmm6, %xmm8
por %xmm5, %xmm8
por %xmm15, %xmm8
movdqa 0xd0(%rsp), %xmm15
movdqa %xmm3, %xmm5
pcmpgtd %xmm7, %xmm5
pand %xmm5, %xmm3
pandn %xmm7, %xmm5
por %xmm3, %xmm5
movdqa %xmm8, (%r12,%rbx)
movdqa %xmm5, (%rsi,%rbx)
addq $0x10, %rbx
movdqa %xmm13, %xmm0
cmpq %rbx, %r11
jne 0xae20
incq 0x38(%rsp)
psubd %xmm2, %xmm5
psubd %xmm1, %xmm13
movdqa %xmm5, %xmm7
pcmpgtd %xmm13, %xmm7
pand %xmm7, %xmm5
pandn %xmm13, %xmm7
por %xmm5, %xmm7
xorl %r9d, %r9d
movdqa 0x89d6(%rip), %xmm6     # 0x13c00
pslldq $0x4, %xmm7             # xmm7 = zero,zero,zero,zero,xmm7[0,1,2,3,4,5,6,7,8,9,10,11]
testl %r14d, %r14d
jle 0xb2aa
movl $0x1, %ebp
xorl %r13d, %r13d
movb 0x80(%rsp), %bl
movdqa (%rsi,%r13), %xmm0
movdqa %xmm7, %xmm3
pcmpgtd %xmm0, %xmm3
movdqa %xmm3, %xmm5
pand %xmm6, %xmm5
por (%r12,%r13), %xmm5
movdqa %xmm7, %xmm8
pand %xmm3, %xmm8
pandn %xmm0, %xmm3
por %xmm8, %xmm3
movdqa %xmm5, (%r12,%r13)
movdqa %xmm3, (%rsi,%r13)
psubd %xmm2, %xmm3
psubd %xmm1, %xmm7
movdqa %xmm7, %xmm0
pcmpgtw %xmm3, %xmm0
pmovmskb %xmm0, %eax
testl %eax, %eax
je 0xb2b1
cmpq %r15, %rbp
setl %bl
addq $0x10, %r13
incq %rbp
cmpq %r13, %r11
jne 0xb243
jmp 0xb2b1
movb 0x80(%rsp), %bl
testb $0x1, %bl
jne 0xb2c7
leal 0x1(%r9), %eax
cmpl $0x3, %r9d
movl %eax, %r9d
jb 0xb22a
addq 0x28(%rsp), %r12
movq %r10, %rbx
movq %rdi, %r10
movq 0x18(%rsp), %rdi
movq 0xc0(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x38(%rsp), %r9
cmpq 0x180(%rsp), %r9
jne 0xac7f
jmp 0xb7ee
movl 0x14(%rsp), %eax
cmpl $0x3, %eax
jl 0xb7ee
movq 0xc8(%rsp), %rcx
movq %rcx, 0x140(%rsp)
movq 0x120(%rsp), %rcx
movq %rcx, 0x38(%rsp)
movq 0x8(%rsp), %r9
leal -0x1(%r9), %ecx
movslq %ecx, %r11
testl %r14d, %r14d
setg 0xc0(%rsp)
cmpl $0x2, %r9d
movl $0x1, %r12d
cmovgel %r9d, %r12d
movl %eax, %eax
movq %rax, 0x28(%rsp)
imulq $0x70, %r15, %rcx
addq 0x40(%rsp), %rcx
addq %rcx, %r13
addq $0x10, %r13
movq %r12, %rbp
shlq $0x4, %rbp
negq %r12
movl $0x2, %ecx
shlq $0x4, %r11
movq %r11, 0xa8(%rsp)
movq %rbp, 0xb0(%rsp)
movq 0x58(%rsp), %rax
movq %rax, 0x100(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x58(%rsp)
movq %rdi, 0x30(%rsp)
movq %r8, %r9
movq %rsi, %r8
movq %rbx, %rsi
movq 0x50(%rsp), %rax
movzbl (%rax,%rcx), %ebx
movdqa %xmm4, %xmm6
cmpl $0x14, %ebx
je 0xb3c0
movdqa %xmm1, %xmm6
movq 0x140(%rsp), %rax
movsbl -0x1(%rax,%rcx), %edi
movsbl (%rax,%rcx), %r11d
movl %r11d, 0xe0(%rsp)
movsbl 0x1(%rax,%rcx), %eax
movl %eax, 0xf0(%rsp)
movq 0x38(%rsp), %rax
movsbl (%rax,%rcx), %r11d
movl %r11d, 0x60(%rsp)
movsbl -0x1(%rax,%rcx), %r11d
movl %r11d, 0x40(%rsp)
movsbl -0x2(%rax,%rcx), %eax
movl %eax, 0x70(%rsp)
movq %rcx, 0x80(%rsp)
cmpq $0x3, %rcx
jb 0xb452
movq 0xa8(%rsp), %rax
movdqa (%r10,%rax), %xmm0
pslldq $0x4, %xmm0             # xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm0, -0x10(%r10)
movdqa (%r9,%rax), %xmm0
pslldq $0x4, %xmm0             # xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm0, -0x10(%r9)
movdqa (%r8,%rax), %xmm0
pslldq $0x4, %xmm0             # xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm0, -0x10(%r8)
movdqa 0x86d5(%rip), %xmm12    # 0x13b30
movdqa %xmm12, %xmm14
testl %r14d, %r14d
movq 0x30(%rsp), %rax
movq 0x18(%rsp), %r11
movq 0x118(%rsp), %rbp
movq 0xb0(%rsp), %rcx
jle 0xb718
imull 0x8(%rsp), %ebx
movslq %ebx, %rbx
shlq $0x4, %rbx
addq 0xb8(%rsp), %rbx
movd 0xe0(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm7      # xmm7 = xmm0[0,0,0,0]
movd 0xf0(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm8      # xmm8 = xmm0[0,0,0,0]
movd 0x60(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm9      # xmm9 = xmm0[0,0,0,0]
movd 0x40(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm10     # xmm10 = xmm0[0,0,0,0]
movd 0x70(%rsp), %xmm0
pshufd $0x0, %xmm0, %xmm11     # xmm11 = xmm0[0,0,0,0]
addl 0x24(%rsp), %edi
movd %edi, %xmm0
pshufd $0x0, %xmm0, %xmm13     # xmm13 = xmm0[0,0,0,0]
xorl %edi, %edi
movdqa 0x863f(%rip), %xmm14    # 0x13b30
movdqa %xmm14, %xmm0
movdqa (%rbx,%rdi), %xmm3
paddd -0x10(%r10,%rdi), %xmm3
psubd %xmm15, %xmm14
movdqa %xmm14, %xmm12
pcmpgtd %xmm0, %xmm12
pand %xmm12, %xmm14
pandn %xmm0, %xmm12
por %xmm14, %xmm12
psubd %xmm1, %xmm12
movdqa %xmm3, %xmm0
pcmpgtd %xmm12, %xmm0
pand %xmm0, %xmm3
pandn %xmm12, %xmm0
por %xmm3, %xmm0
movdqa (%r10,%rdi), %xmm3
movdqa (%r11,%rdi), %xmm14
psubd %xmm15, %xmm3
movdqa %xmm3, %xmm15
pcmpgtd %xmm14, %xmm15
pand %xmm15, %xmm3
pandn %xmm14, %xmm15
por %xmm3, %xmm15
psubd %xmm6, %xmm15
movdqa %xmm15, (%rax,%rdi)
movdqa %xmm0, %xmm3
pcmpgtd %xmm15, %xmm3
pand %xmm3, %xmm0
pandn %xmm15, %xmm3
por %xmm0, %xmm3
movdqa (%r8,%rdi), %xmm0
psubd %xmm13, %xmm0
movdqa (%rbp,%rdi), %xmm14
movdqa %xmm0, %xmm15
pcmpgtd %xmm14, %xmm15
pand %xmm15, %xmm0
pandn %xmm14, %xmm15
por %xmm0, %xmm15
movdqa %xmm15, (%rbp,%rdi)
psubd %xmm9, %xmm15
movdqa %xmm3, %xmm14
pcmpgtd %xmm15, %xmm14
pand %xmm14, %xmm3
pandn %xmm15, %xmm14
por %xmm3, %xmm14
movdqa -0x10(%r8,%rdi), %xmm5
psubd 0x130(%rsp), %xmm5
movdqa (%rdx,%rdi), %xmm3
movdqa %xmm5, %xmm0
psubd %xmm7, %xmm0
movdqa %xmm0, %xmm15
pcmpgtd %xmm3, %xmm15
pand %xmm15, %xmm0
pandn %xmm3, %xmm15
por %xmm0, %xmm15
movdqa %xmm15, (%rdx,%rdi)
psubd %xmm11, %xmm15
movdqa %xmm14, %xmm0
pcmpgtd %xmm15, %xmm0
pand %xmm0, %xmm14
pandn %xmm15, %xmm0
movdqa 0xd0(%rsp), %xmm15
por %xmm14, %xmm0
movdqa (%r13,%rdi), %xmm3
psubd %xmm8, %xmm5
movdqa %xmm5, %xmm14
pcmpgtd %xmm3, %xmm14
pand %xmm14, %xmm5
pandn %xmm3, %xmm14
por %xmm5, %xmm14
movdqa %xmm14, (%r13,%rdi)
psubd %xmm10, %xmm14
movdqa %xmm0, %xmm3
pcmpgtd %xmm14, %xmm3
pand %xmm3, %xmm0
pandn %xmm14, %xmm3
por %xmm0, %xmm3
movdqa (%r8,%rdi), %xmm0
psubd %xmm4, %xmm0
movdqa %xmm3, %xmm5
pcmpgtd %xmm0, %xmm5
pand %xmm5, %xmm3
pandn %xmm0, %xmm5
por %xmm3, %xmm5
movdqa (%r9,%rdi), %xmm0
psubd %xmm4, %xmm0
movdqa %xmm5, %xmm3
pcmpgtd %xmm0, %xmm3
pand %xmm3, %xmm5
pandn %xmm0, %xmm3
movdqa -0x10(%r8,%rdi), %xmm0
por %xmm5, %xmm3
psubd %xmm4, %xmm0
movdqa %xmm3, %xmm5
pcmpgtd %xmm0, %xmm5
pand %xmm5, %xmm3
pandn %xmm0, %xmm5
movdqa -0x10(%r9,%rdi), %xmm0
por %xmm3, %xmm5
psubd %xmm4, %xmm0
movdqa %xmm5, %xmm14
pcmpgtd %xmm0, %xmm14
pand %xmm14, %xmm5
pandn %xmm0, %xmm14
por %xmm5, %xmm14
movdqa %xmm14, (%rsi,%rdi)
addq $0x10, %rdi
movdqa %xmm12, %xmm0
cmpq %rdi, %rcx
jne 0xb4f6
incq 0x80(%rsp)
psubd %xmm2, %xmm14
psubd %xmm1, %xmm12
movdqa %xmm14, %xmm6
pcmpgtd %xmm12, %xmm6
pand %xmm6, %xmm14
pandn %xmm12, %xmm6
por %xmm14, %xmm6
xorl %edi, %edi
movb 0xc0(%rsp), %al
pslldq $0x4, %xmm6             # xmm6 = zero,zero,zero,zero,xmm6[0,1,2,3,4,5,6,7,8,9,10,11]
testl %r14d, %r14d
jle 0xb7b2
movl $0x1, %ebp
movq %rsi, %rcx
movl %eax, %ebx
movdqa (%rcx), %xmm0
movdqa %xmm0, %xmm3
pcmpgtd %xmm6, %xmm3
pand %xmm3, %xmm0
pandn %xmm6, %xmm3
por %xmm0, %xmm3
movdqa %xmm3, (%rcx)
psubd %xmm2, %xmm3
psubd %xmm1, %xmm6
movdqa %xmm6, %xmm0
pcmpgtw %xmm3, %xmm0
pmovmskb %xmm0, %r11d
testl %r11d, %r11d
je 0xb7b4
cmpq %r15, %rbp
setl %bl
addq $0x10, %rcx
leaq (%r12,%rbp), %r11
incq %r11
incq %rbp
cmpq $0x1, %r11
jne 0xb760
jmp 0xb7b4
movl %eax, %ebx
testb $0x1, %bl
jne 0xb7c3
leal 0x1(%rdi), %ecx
cmpl $0x3, %edi
movl %ecx, %edi
jb 0xb74c
movq %r10, %rbx
movq %r9, %r10
movq 0x18(%rsp), %rdi
movq 0x100(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x80(%rsp), %rcx
cmpq 0x28(%rsp), %rcx
jne 0xb385
leal -0x1(%r14), %eax
cltd
idivl 0x8(%rsp)
movslq %edx, %rcx
shlq $0x4, %rcx
addq %rsi, %rcx
cltq
movl (%rcx,%rax,4), %eax
movq 0x170(%rsp), %r15
movl %eax, 0x10(%r15)
movq 0xa0(%rsp), %rbx
movq %rbx, %rdi
movq 0x160(%rsp), %rsi
callq 0x7fd6
movq %rbx, %rdi
movq 0x168(%rsp), %rsi
callq 0x7fd6
movq %rbx, %rdi
movq 0x50(%rsp), %rsi
callq 0x7fd6
movq 0x98(%rsp), %rdx
testq %rdx, %rdx
je 0xb898
leaq 0x18(%r15), %r9
leaq 0x4(%r15), %rax
movq %rbx, %rdi
movl $0x4, %esi
movl 0x14(%rsp), %ecx
movl %r14d, %r8d
pushq %rax
pushq %r15
callq 0xa0a0
addq $0x10, %rsp
movq %rbx, %rdi
movq 0x158(%rsp), %rsi
addq $0x188, %rsp            # imm = 0x188
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x7fd6
addq $0x188, %rsp            # imm = 0x188
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq