// File: /workspace/github_c_makefile_star2_O3/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 $0x168, %rsp            # imm = 0x168
movq %r9, %r15
movl %r8d, %r14d
movq %rdi, %r13
movq 0x1a8(%rsp), %rdi
movq 0x1a0(%rsp), %rax
leal 0x3(%r14), %r8d
leal 0x6(%r14), %r9d
testl %r8d, %r8d
cmovnsl %r8d, %r9d
movl (%r15), %r8d
sarl $0x2, %r9d
movq %r9, (%rsp)
movl $0x0, (%rdi)
movl %edx, 0x8(%rdi)
movl %r14d, 0xc(%rdi)
movq %rdi, 0x128(%rsp)
movl $0x80000000, 0x10(%rdi) # imm = 0x80000000
leaq 0x100(%rsp), %r10
movl %r8d, 0xe0(%rsp)
testb $0x2, %r8b
movl %edx, 0x8(%rsp)
leaq 0xb8(%rsp), %r11
leaq 0x108(%rsp), %rbx
movq %r13, %rdi
movl %r14d, %r8d
movq %r15, %r9
jne 0xabcc
pushq %r10
pushq %r11
pushq %rbx
pushq %rax
callq 0xa10a
jmp 0xabd7
pushq %r10
pushq %r11
pushq %rbx
pushq %rax
callq 0x9d8c
addq $0x20, %rsp
movq %rax, 0x38(%rsp)
movslq 0x1c(%r15), %rsi
movslq (%rsp), %rbp
imulq %rbp, %rsi
shlq $0x4, %rsi
addq $0x10, %rsi
movq %r13, %rdi
callq 0x84a5
movq %rax, 0x120(%rsp)
addq $0xf, %rax
andq $-0x10, %rax
movq %rax, 0xa0(%rsp)
movl 0x1c(%r15), %r9d
testl %r9d, %r9d
movq %r15, 0x80(%rsp)
jle 0xacba
movq (%rsp), %rdi
leal (,%rdi,4), %eax
movq 0x40(%r15), %rcx
movl %edi, %edx
cmpl $0x2, %edi
movl $0x1, %esi
cmovgel %edi, %esi
xorl %edi, %edi
movq 0xa0(%rsp), %r8
testl %r14d, %r14d
jle 0xacb3
imull %edi, %r9d
movslq %r9d, %r9
addq %rcx, %r9
xorl %r10d, %r10d
cmpl %r10d, %eax
jle 0xac9f
movq 0x108(%rsp), %r11
addq %r10, %r11
xorl %ebx, %ebx
leal (%r10,%rbx), %r12d
movl $0xc0000000, %r15d      # imm = 0xC0000000
cmpl %r14d, %r12d
jge 0xac8c
movzbl (%r11,%rbx), %r15d
movsbl (%r9,%r15), %r15d
movl %r15d, (%r8)
addq $0x4, %r8
addq %rdx, %rbx
leal (%r10,%rbx), %r15d
cmpl %r15d, %eax
jg 0xac73
incq %r10
cmpq %rsi, %r10
jne 0xac61
movq 0x80(%rsp), %r15
movl 0x1c(%r15), %r9d
incl %edi
cmpl %r9d, %edi
jl 0xac4f
movsd 0x4(%r15), %xmm0
movaps %xmm0, 0xd0(%rsp)
movl 0xc(%r15), %eax
movl %eax, 0xc(%rsp)
movss 0x10(%r15), %xmm0
movaps %xmm0, 0x70(%rsp)
movq (%rsp), %r15
leal 0x1(%r15), %ebx
leal (%rbx,%rbx,4), %eax
leal (,%r15,8), %r12d
subl %r15d, %r12d
addl %eax, %r12d
movslq %r12d, %rsi
shlq $0x4, %rsi
addq $0x10, %rsi
movq %r13, 0xf8(%rsp)
movq %r13, %rdi
callq 0x84a5
movdqa 0xd0(%rsp), %xmm3
leaq 0xf(%rax), %r13
andq $-0x10, %r13
leal 0x2(,%r15,2), %ecx
movslq %ecx, %r10
shlq $0x4, %r10
leal (%rbx,%rbx,2), %ecx
movslq %ecx, %rbx
shlq $0x4, %rbx
leal 0x4(,%r15,4), %ecx
movslq %ecx, %rdi
shlq $0x4, %rdi
leaq (%rdi,%r13), %r8
movq %rbp, %rsi
shlq $0x4, %rsi
leaq (%r8,%rsi), %rcx
addq %rsi, %rcx
addq $0x10, %rcx
movq %rcx, 0x18(%rsp)
leaq (%rcx,%rsi), %rdx
movq %rsi, 0x10(%rsp)
leaq (%rdx,%rsi), %r15
xorl %ecx, %ecx
pshufd $0x55, %xmm3, %xmm15    # xmm15 = xmm3[1,1,1,1]
testb $0x6, 0xe0(%rsp)
movdqa %xmm15, 0xe0(%rsp)
movq %rax, 0x118(%rsp)
movq %rdx, 0x48(%rsp)
movq %rdi, 0x50(%rsp)
movq %r8, 0x60(%rsp)
jne 0xae0b
movq 0x80(%rsp), %rax
movl (%rax), %eax
movl $0x0, %edx
andl $0x1, %eax
je 0xae0d
movq (%rsp), %rax
imull 0x8(%rsp), %eax
movslq %eax, %rsi
shlq $0x4, %rsi
addq $0x10, %rsi
movq 0xf8(%rsp), %rdi
movq %rbx, 0x20(%rsp)
movq %r10, %rbx
callq 0x84a5
movq %rbx, %r10
movq 0x20(%rsp), %rbx
movdqa 0xd0(%rsp), %xmm3
movdqa 0xe0(%rsp), %xmm15
movq %rax, %rcx
movq %rax, %rdx
addq $0xf, %rdx
andq $-0x10, %rdx
jmp 0xae0d
xorl %edx, %edx
movq %rdx, 0x98(%rsp)
movq %rcx, 0x110(%rsp)
movq 0x10(%rsp), %rcx
leaq (%r15,%rcx), %rax
movdqa %xmm15, %xmm1
paddd %xmm3, %xmm1
movd 0xc(%rsp), %xmm2
leaq (%r10,%r13), %r9
leaq (%rbx,%r13), %rdi
leaq (%rcx,%r13), %r8
addq $0x10, %r8
testl %r12d, %r12d
jle 0xae78
movq (%rsp), %rcx
leal (%rcx,%rcx,2), %ecx
leal 0x4(,%rcx,4), %ecx
shlq $0x4, %rcx
orq $0x10, %rcx
xorl %edx, %edx
movaps 0x9d17(%rip), %xmm0     # 0x14b80
movaps %xmm0, (%r13,%rdx)
addq $0x10, %rdx
cmpq %rdx, %rcx
jne 0xae69
movq 0x10(%rsp), %r11
leaq (%rax,%r11), %rdx
leaq 0x10(%r13), %rcx
movq %rcx, 0x20(%rsp)
pshufd $0x0, %xmm3, %xmm0      # xmm0 = xmm3[0,0,0,0]
pshufd $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
movdqa %xmm1, 0x150(%rsp)
pshufd $0x0, %xmm2, %xmm1      # xmm1 = xmm2[0,0,0,0]
movdqa %xmm1, 0xd0(%rsp)
pshufd $0x0, 0x70(%rsp), %xmm3 # xmm3 = mem[0,0,0,0]
leaq 0x20(%r13,%r11), %rcx
leaq 0x10(%r13,%r10), %rsi
leaq 0x10(%r13,%rbx), %r12
movaps (%rdi), %xmm1
andps 0x9cc5(%rip), %xmm1     # 0x14b90
movaps %xmm1, (%rdi)
movdqa (%r9), %xmm1
xorl %r10d, %r10d
xorl %edi, %edi
movq 0x80(%rsp), %rbx
subw 0x10(%rbx), %di
pinsrw $0x0, %edi, %xmm1
pinsrw $0x1, %r10d, %xmm1
movq 0x60(%rsp), %rdi
addq %r11, %rdi
addq $0x10, %rdi
movdqa %xmm1, (%r9)
movdqa (%r8), %xmm1
movzwl 0x10(%rbx), %r9d
xorl %r11d, %r11d
subw %r9w, %r11w
pinsrw $0x0, %r11d, %xmm1
pinsrw $0x1, %r10d, %xmm1
movdqa %xmm1, (%r8)
cmpq $0x0, 0x98(%rsp)
je 0xb5e8
movl 0x8(%rsp), %r10d
cmpl $0x3, %r10d
jl 0xba83
movq 0x10(%rsp), %r8
addq %rdx, %r8
movq 0xb8(%rsp), %r9
movq %r9, 0x148(%rsp)
movq 0x100(%rsp), %r9
movq %r9, 0x140(%rsp)
movq (%rsp), %r13
leal -0x1(%r13), %r9d
cmpl $0x2, %r13d
movl $0x1, %r11d
cmovgel %r13d, %r11d
movslq %r9d, %r9
movl %r10d, %r10d
movq %r10, 0x138(%rsp)
shlq $0x5, %rbp
addq 0x98(%rsp), %rbp
shlq $0x4, %r11
movl $0x2, %r10d
shlq $0x4, %r9
movq %r9, 0x130(%rsp)
movdqa 0x9c59(%rip), %xmm14    # 0x14c10
movq 0x20(%rsp), %rbx
movdqa 0x9c5b(%rip), %xmm10    # 0x14c20
movq %r15, 0xa8(%rsp)
movq 0x48(%rsp), %r9
movq %r9, 0xb0(%rsp)
movq 0x18(%rsp), %r9
movq %r9, 0x48(%rsp)
movq %rdi, 0x18(%rsp)
movq %rsi, %rdi
movq %rcx, %rsi
movq %rbx, %rcx
movq 0x38(%rsp), %r9
movzbl (%r9,%r10), %r9d
movdqa %xmm3, %xmm1
cmpl $0x14, %r9d
je 0xb00b
movdqa %xmm15, %xmm1
movdqa %xmm1, %xmm9
movq 0x148(%rsp), %r13
movsbl -0x1(%r13,%r10), %ebx
movsbl (%r13,%r10), %r15d
movl %r15d, 0x70(%rsp)
movsbl 0x1(%r13,%r10), %r15d
movl %r15d, 0x60(%rsp)
movq 0x140(%rsp), %r13
movsbl (%r13,%r10), %r15d
movl %r15d, 0x20(%rsp)
movsbl -0x1(%r13,%r10), %r15d
movl %r15d, 0x50(%rsp)
movsbl -0x2(%r13,%r10), %r13d
movl %r13d, 0xc0(%rsp)
movq %r10, 0x40(%rsp)
cmpq $0x3, %r10
jb 0xb0a5
movq 0x130(%rsp), %r13
movdqa (%r12,%r13), %xmm1
pslldq $0x4, %xmm1             # xmm1 = zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm1, -0x10(%r12)
movdqa (%rdi,%r13), %xmm1
pslldq $0x4, %xmm1             # xmm1 = zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm1, -0x10(%rdi)
movdqa (%rsi,%r13), %xmm1
pslldq $0x4, %xmm1             # xmm1 = zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm1, -0x10(%rsi)
movdqa 0x9ad2(%rip), %xmm13    # 0x14b80
movdqa %xmm13, %xmm11
testl %r14d, %r14d
movq 0x18(%rsp), %r13
movdqa 0x9add(%rip), %xmm4     # 0x14ba0
movdqa 0x9b65(%rip), %xmm7     # 0x14c30
movdqa %xmm9, 0x80(%rsp)
movq 0xa8(%rsp), %r15
jle 0xb508
imull (%rsp), %r9d
movslq %r9d, %r9
shlq $0x4, %r9
addq 0xa0(%rsp), %r9
movd 0x70(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
movdqa %xmm1, 0x70(%rsp)
movd 0x60(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
movdqa %xmm1, 0x60(%rsp)
movd 0x20(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
movdqa %xmm1, 0x20(%rsp)
movd 0x50(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
movdqa %xmm1, 0x50(%rsp)
movd 0xc0(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
movdqa %xmm1, 0xc0(%rsp)
addl 0xc(%rsp), %ebx
movd %ebx, %xmm1
pshufd $0x0, %xmm1, %xmm12     # xmm12 = xmm1[0,0,0,0]
xorl %r10d, %r10d
movdqa 0x9a15(%rip), %xmm1     # 0x14b80
movdqa %xmm1, %xmm13
movdqa (%r9,%r10), %xmm2
paddd -0x10(%r12,%r10), %xmm2
psubd %xmm0, %xmm13
movdqa %xmm7, %xmm9
movdqa %xmm14, %xmm7
movdqa %xmm1, %xmm14
pcmpgtd %xmm13, %xmm14
pand %xmm4, %xmm14
movdqa %xmm13, %xmm11
pcmpgtd %xmm1, %xmm11
pand %xmm11, %xmm13
pandn %xmm1, %xmm11
por %xmm13, %xmm11
psubd %xmm15, %xmm11
movdqa %xmm11, %xmm1
pcmpgtd %xmm2, %xmm1
movdqa %xmm2, %xmm15
pcmpgtd %xmm11, %xmm15
pand %xmm15, %xmm2
pandn %xmm11, %xmm15
por %xmm2, %xmm15
movdqa (%r12,%r10), %xmm2
psubd %xmm0, %xmm2
movdqa %xmm4, %xmm8
movdqa (%r15,%r10), %xmm4
movdqa %xmm2, %xmm5
pcmpgtd %xmm4, %xmm5
movdqa %xmm2, %xmm6
pand %xmm5, %xmm6
pandn %xmm4, %xmm5
por %xmm6, %xmm5
psubd 0x80(%rsp), %xmm5
movdqa %xmm5, %xmm6
pcmpgtd %xmm15, %xmm6
movdqa %xmm6, %xmm13
pandn %xmm1, %xmm13
pcmpgtd %xmm2, %xmm4
pand 0x9980(%rip), %xmm4     # 0x14bb0
por %xmm14, %xmm4
movdqa %xmm5, (%r13,%r10)
pand 0x997c(%rip), %xmm6     # 0x14bc0
psrld $0x1f, %xmm13
por %xmm6, %xmm13
movdqa %xmm15, %xmm2
pcmpgtd %xmm5, %xmm2
pand %xmm2, %xmm15
pandn %xmm5, %xmm2
por %xmm15, %xmm2
movdqa (%rsi,%r10), %xmm1
psubd %xmm12, %xmm1
movdqa (%rax,%r10), %xmm5
movdqa %xmm5, %xmm14
pcmpgtd %xmm1, %xmm14
pand 0x9946(%rip), %xmm14    # 0x14bd0
por %xmm4, %xmm14
movdqa %xmm1, %xmm6
pcmpgtd %xmm5, %xmm6
pand %xmm6, %xmm1
pandn %xmm5, %xmm6
por %xmm1, %xmm6
movdqa %xmm6, (%rax,%r10)
psubd 0x20(%rsp), %xmm6
movdqa %xmm6, %xmm5
pcmpgtd %xmm2, %xmm5
movdqa %xmm5, %xmm1
pandn %xmm13, %xmm1
psrld $0x1e, %xmm5
por %xmm1, %xmm5
movdqa %xmm2, %xmm4
pcmpgtd %xmm6, %xmm4
pand %xmm4, %xmm2
pandn %xmm6, %xmm4
por %xmm2, %xmm4
movdqa -0x10(%rsi,%r10), %xmm15
psubd 0xd0(%rsp), %xmm15
movdqa (%rdx,%r10), %xmm1
movdqa %xmm15, %xmm2
psubd 0x70(%rsp), %xmm2
movdqa %xmm1, %xmm6
pcmpgtd %xmm2, %xmm6
movdqa %xmm2, %xmm13
pcmpgtd %xmm1, %xmm13
pand %xmm13, %xmm2
pandn %xmm1, %xmm13
por %xmm2, %xmm13
movdqa %xmm13, (%rdx,%r10)
psubd 0xc0(%rsp), %xmm13
movdqa %xmm13, %xmm1
pcmpgtd %xmm4, %xmm1
movdqa %xmm1, %xmm2
pandn %xmm5, %xmm2
pand 0x9897(%rip), %xmm6     # 0x14be0
pand 0x989f(%rip), %xmm1     # 0x14bf0
por %xmm2, %xmm1
movdqa %xmm4, %xmm2
pcmpgtd %xmm13, %xmm2
pand %xmm2, %xmm4
pandn %xmm13, %xmm2
por %xmm4, %xmm2
movdqa (%r8,%r10), %xmm4
psubd 0x60(%rsp), %xmm15
movdqa %xmm4, %xmm13
pcmpgtd %xmm15, %xmm13
pand 0x9875(%rip), %xmm13    # 0x14c00
por %xmm6, %xmm13
por %xmm14, %xmm13
movdqa %xmm7, %xmm14
movdqa %xmm9, %xmm7
movdqa %xmm15, %xmm5
pcmpgtd %xmm4, %xmm5
pand %xmm5, %xmm15
pandn %xmm4, %xmm5
por %xmm15, %xmm5
movdqa 0xe0(%rsp), %xmm15
movdqa %xmm5, (%r8,%r10)
psubd 0x50(%rsp), %xmm5
movdqa %xmm5, %xmm4
pcmpgtd %xmm2, %xmm4
movdqa %xmm4, %xmm6
pandn %xmm1, %xmm6
pand %xmm14, %xmm4
por %xmm6, %xmm4
movdqa %xmm2, %xmm1
pcmpgtd %xmm5, %xmm1
pand %xmm1, %xmm2
pandn %xmm5, %xmm1
por %xmm2, %xmm1
movdqa (%rsi,%r10), %xmm2
psubd %xmm3, %xmm2
movdqa %xmm2, %xmm5
pcmpgtd %xmm1, %xmm5
movdqa %xmm5, %xmm6
pandn %xmm4, %xmm6
pand %xmm10, %xmm5
por %xmm6, %xmm5
movdqa %xmm1, %xmm4
pcmpgtd %xmm2, %xmm4
pand %xmm4, %xmm1
pandn %xmm2, %xmm4
por %xmm1, %xmm4
movdqa (%rdi,%r10), %xmm1
psubd %xmm3, %xmm1
movdqa %xmm1, %xmm2
pcmpgtd %xmm4, %xmm2
movdqa %xmm2, %xmm6
pandn %xmm5, %xmm6
movdqa -0x10(%rsi,%r10), %xmm5
psrld $0x1d, %xmm2
por %xmm6, %xmm2
movdqa %xmm4, %xmm6
pcmpgtd %xmm1, %xmm6
pand %xmm6, %xmm4
pandn %xmm1, %xmm6
por %xmm4, %xmm6
psubd %xmm3, %xmm5
movdqa %xmm5, %xmm1
pcmpgtd %xmm6, %xmm1
movdqa %xmm1, %xmm4
pandn %xmm2, %xmm4
movdqa -0x10(%rdi,%r10), %xmm2
pand %xmm9, %xmm1
por %xmm4, %xmm1
movdqa %xmm6, %xmm4
pcmpgtd %xmm5, %xmm4
pand %xmm4, %xmm6
pandn %xmm5, %xmm4
por %xmm6, %xmm4
psubd %xmm3, %xmm2
movdqa %xmm2, %xmm5
pcmpgtd %xmm4, %xmm5
movdqa %xmm5, %xmm6
pandn %xmm1, %xmm6
pand 0x977e(%rip), %xmm5     # 0x14c40
por %xmm6, %xmm5
por %xmm13, %xmm5
movdqa %xmm4, %xmm13
pcmpgtd %xmm2, %xmm13
pand %xmm13, %xmm4
pandn %xmm2, %xmm13
por %xmm4, %xmm13
movdqa %xmm8, %xmm4
movdqa %xmm5, (%rbp,%r10)
movdqa %xmm13, (%rcx,%r10)
addq $0x10, %r10
movdqa %xmm11, %xmm1
cmpq %r10, %r11
jne 0xb170
incq 0x40(%rsp)
movdqa 0x150(%rsp), %xmm7
psubd %xmm7, %xmm13
psubd %xmm15, %xmm11
movdqa %xmm13, %xmm5
pcmpgtd %xmm11, %xmm5
pand %xmm5, %xmm13
pandn %xmm11, %xmm5
por %xmm13, %xmm5
xorl %r9d, %r9d
movdqa 0x970b(%rip), %xmm8     # 0x14c50
pslldq $0x4, %xmm5             # xmm5 = zero,zero,zero,zero,xmm5[0,1,2,3,4,5,6,7,8,9,10,11]
testl %r14d, %r14d
jle 0xb5b1
xorl %r10d, %r10d
movdqa (%rcx,%r10), %xmm1
movdqa %xmm5, %xmm2
pcmpgtd %xmm1, %xmm2
movdqa %xmm2, %xmm4
pand %xmm8, %xmm4
por (%rbp,%r10), %xmm4
movdqa %xmm5, %xmm6
pand %xmm2, %xmm6
pandn %xmm1, %xmm2
por %xmm6, %xmm2
movdqa %xmm4, (%rbp,%r10)
movdqa %xmm2, (%rcx,%r10)
psubd %xmm7, %xmm2
psubd %xmm15, %xmm5
movdqa %xmm5, %xmm1
pcmpgtw %xmm2, %xmm1
pmovmskb %xmm1, %r13d
testl %r13d, %r13d
je 0xb5ba
addq $0x10, %r10
cmpq %r10, %r11
jne 0xb552
incl %r9d
cmpl $0x4, %r9d
jne 0xb545
addq 0x10(%rsp), %rbp
movq %r12, %rbx
movq %rdi, %r12
movq %r15, %rdi
movq 0xb0(%rsp), %r15
movq 0x40(%rsp), %r10
cmpq 0x138(%rsp), %r10
jne 0xafc5
jmp 0xba83
movl 0x8(%rsp), %r9d
cmpl $0x3, %r9d
jl 0xba83
movq 0xb8(%rsp), %r8
movq %r8, 0x40(%rsp)
movq 0x100(%rsp), %r8
movq %r8, 0xb0(%rsp)
movq (%rsp), %r11
leal -0x1(%r11), %r8d
movslq %r8d, %rbx
cmpl $0x2, %r11d
movl $0x1, %r10d
cmovgel %r11d, %r10d
movl %r9d, %r8d
movq %r8, 0xa8(%rsp)
imulq $0x70, %rbp, %r8
addq 0x50(%rsp), %r8
addq %r8, %r13
addq $0x10, %r13
shlq $0x4, %r10
movl $0x2, %ebp
shlq $0x4, %rbx
movq %rbx, 0x10(%rsp)
movq 0x20(%rsp), %r11
movdqa 0xd0(%rsp), %xmm4
movq 0x48(%rsp), %r8
movq %r8, 0x80(%rsp)
movq 0x18(%rsp), %r8
movq %r8, 0x48(%rsp)
movq %rdi, 0x18(%rsp)
movq %rsi, %r9
movq %rcx, %rsi
movq %r11, %rcx
movq 0x38(%rsp), %rdi
movzbl (%rdi,%rbp), %r11d
movdqa %xmm3, %xmm5
cmpl $0x14, %r11d
je 0xb6a6
movdqa %xmm15, %xmm5
movq 0x40(%rsp), %rbx
movsbl -0x1(%rbx,%rbp), %edi
movsbl (%rbx,%rbp), %r8d
movl %r8d, 0xc0(%rsp)
movsbl 0x1(%rbx,%rbp), %r8d
movl %r8d, 0x50(%rsp)
movq 0xb0(%rsp), %rbx
movsbl (%rbx,%rbp), %r8d
movl %r8d, 0x20(%rsp)
movsbl -0x1(%rbx,%rbp), %r8d
movl %r8d, 0x60(%rsp)
movsbl -0x2(%rbx,%rbp), %ebx
movl %ebx, 0x70(%rsp)
cmpq $0x3, %rbp
jb 0xb72b
movq 0x10(%rsp), %rbx
movdqa (%r12,%rbx), %xmm1
pslldq $0x4, %xmm1             # xmm1 = zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm1, -0x10(%r12)
movdqa (%r9,%rbx), %xmm1
pslldq $0x4, %xmm1             # xmm1 = zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm1, -0x10(%r9)
movdqa (%rsi,%rbx), %xmm1
pslldq $0x4, %xmm1             # xmm1 = zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9,10,11]
movdqa %xmm1, -0x10(%rsi)
movdqa 0x944c(%rip), %xmm11    # 0x14b80
movdqa %xmm11, %xmm13
testl %r14d, %r14d
movq 0x18(%rsp), %rbx
jle 0xb9db
imull (%rsp), %r11d
movslq %r11d, %r11
shlq $0x4, %r11
addq 0xa0(%rsp), %r11
movd 0xc0(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm6      # xmm6 = xmm1[0,0,0,0]
movd 0x50(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm7      # xmm7 = xmm1[0,0,0,0]
movd 0x20(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm8      # xmm8 = xmm1[0,0,0,0]
movd 0x60(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm9      # xmm9 = xmm1[0,0,0,0]
movd 0x70(%rsp), %xmm1
pshufd $0x0, %xmm1, %xmm10     # xmm10 = xmm1[0,0,0,0]
addl 0xc(%rsp), %edi
movd %edi, %xmm1
pshufd $0x0, %xmm1, %xmm12     # xmm12 = xmm1[0,0,0,0]
xorl %edi, %edi
movdqa 0x93cf(%rip), %xmm13    # 0x14b80
movdqa %xmm13, %xmm1
movdqa (%r11,%rdi), %xmm2
paddd -0x10(%r12,%rdi), %xmm2
psubd %xmm0, %xmm13
movdqa %xmm13, %xmm11
pcmpgtd %xmm1, %xmm11
pand %xmm11, %xmm13
pandn %xmm1, %xmm11
por %xmm13, %xmm11
psubd %xmm15, %xmm11
movdqa %xmm2, %xmm1
pcmpgtd %xmm11, %xmm1
pand %xmm1, %xmm2
pandn %xmm11, %xmm1
por %xmm2, %xmm1
movdqa (%r12,%rdi), %xmm2
movdqa (%r15,%rdi), %xmm13
psubd %xmm0, %xmm2
movdqa %xmm2, %xmm14
pcmpgtd %xmm13, %xmm14
pand %xmm14, %xmm2
pandn %xmm13, %xmm14
por %xmm2, %xmm14
psubd %xmm5, %xmm14
movdqa %xmm14, (%rbx,%rdi)
movdqa %xmm1, %xmm2
pcmpgtd %xmm14, %xmm2
pand %xmm2, %xmm1
pandn %xmm14, %xmm2
por %xmm1, %xmm2
movdqa (%rsi,%rdi), %xmm1
psubd %xmm12, %xmm1
movdqa (%rax,%rdi), %xmm13
movdqa %xmm1, %xmm14
pcmpgtd %xmm13, %xmm14
pand %xmm14, %xmm1
pandn %xmm13, %xmm14
por %xmm1, %xmm14
movdqa %xmm14, (%rax,%rdi)
psubd %xmm8, %xmm14
movdqa %xmm2, %xmm13
pcmpgtd %xmm14, %xmm13
pand %xmm13, %xmm2
pandn %xmm14, %xmm13
por %xmm2, %xmm13
movdqa -0x10(%rsi,%rdi), %xmm1
psubd %xmm4, %xmm1
movdqa (%rdx,%rdi), %xmm2
movdqa %xmm1, %xmm14
psubd %xmm6, %xmm14
movdqa %xmm14, %xmm15
pcmpgtd %xmm2, %xmm15
pand %xmm15, %xmm14
pandn %xmm2, %xmm15
por %xmm14, %xmm15
movdqa %xmm15, (%rdx,%rdi)
psubd %xmm10, %xmm15
movdqa %xmm13, %xmm2
pcmpgtd %xmm15, %xmm2
pand %xmm2, %xmm13
pandn %xmm15, %xmm2
movdqa 0xe0(%rsp), %xmm15
por %xmm13, %xmm2
movdqa (%r13,%rdi), %xmm13
psubd %xmm7, %xmm1
movdqa %xmm1, %xmm14
pcmpgtd %xmm13, %xmm14
pand %xmm14, %xmm1
pandn %xmm13, %xmm14
por %xmm1, %xmm14
movdqa %xmm14, (%r13,%rdi)
psubd %xmm9, %xmm14
movdqa %xmm2, %xmm1
pcmpgtd %xmm14, %xmm1
pand %xmm1, %xmm2
pandn %xmm14, %xmm1
por %xmm2, %xmm1
movdqa (%rsi,%rdi), %xmm2
psubd %xmm3, %xmm2
movdqa %xmm1, %xmm13
pcmpgtd %xmm2, %xmm13
pand %xmm13, %xmm1
pandn %xmm2, %xmm13
por %xmm1, %xmm13
movdqa (%r9,%rdi), %xmm1
psubd %xmm3, %xmm1
movdqa %xmm13, %xmm2
pcmpgtd %xmm1, %xmm2
pand %xmm2, %xmm13
pandn %xmm1, %xmm2
movdqa -0x10(%rsi,%rdi), %xmm1
por %xmm13, %xmm2
psubd %xmm3, %xmm1
movdqa %xmm2, %xmm14
pcmpgtd %xmm1, %xmm14
pand %xmm14, %xmm2
pandn %xmm1, %xmm14
movdqa -0x10(%r9,%rdi), %xmm1
por %xmm2, %xmm14
psubd %xmm3, %xmm1
movdqa %xmm14, %xmm13
pcmpgtd %xmm1, %xmm13
pand %xmm13, %xmm14
pandn %xmm1, %xmm13
por %xmm14, %xmm13
movdqa %xmm13, (%rcx,%rdi)
addq $0x10, %rdi
movdqa %xmm11, %xmm1
cmpq %rdi, %r10
jne 0xb7b6
incq %rbp
movdqa 0x150(%rsp), %xmm6
psubd %xmm6, %xmm13
psubd %xmm15, %xmm11
movdqa %xmm13, %xmm5
pcmpgtd %xmm11, %xmm5
pand %xmm5, %xmm13
pandn %xmm11, %xmm5
por %xmm13, %xmm5
xorl %edi, %edi
pslldq $0x4, %xmm5             # xmm5 = zero,zero,zero,zero,xmm5[0,1,2,3,4,5,6,7,8,9,10,11]
testl %r14d, %r14d
jle 0xba5d
xorl %r8d, %r8d
movdqa (%rcx,%r8), %xmm1
movdqa %xmm1, %xmm2
pcmpgtd %xmm5, %xmm2
pand %xmm2, %xmm1
pandn %xmm5, %xmm2
por %xmm1, %xmm2
movdqa %xmm2, (%rcx,%r8)
psubd %xmm6, %xmm2
psubd %xmm15, %xmm5
movdqa %xmm5, %xmm1
pcmpgtw %xmm2, %xmm1
pmovmskb %xmm1, %r11d
testl %r11d, %r11d
je 0xba64
addq $0x10, %r8
cmpq %r8, %r10
jne 0xba19
incl %edi
cmpl $0x4, %edi
jne 0xba0c
movq %r12, %r11
movq %r9, %r12
movq %r15, %rdi
movq 0x80(%rsp), %r15
cmpq 0xa8(%rsp), %rbp
jne 0xb668
leal -0x1(%r14), %eax
cltd
idivl (%rsp)
movslq %edx, %rdx
shlq $0x4, %rdx
addq %rcx, %rdx
cltq
movl (%rdx,%rax,4), %eax
movq 0x128(%rsp), %r15
movl %eax, 0x10(%r15)
movq 0xf8(%rsp), %rbx
movq %rbx, %rdi
movq 0x118(%rsp), %rsi
callq 0x83df
movq %rbx, %rdi
movq 0x120(%rsp), %rsi
callq 0x83df
movq %rbx, %rdi
movq 0x38(%rsp), %rsi
callq 0x83df
movq 0x98(%rsp), %rdx
testq %rdx, %rdx
je 0xbb2c
leaq 0x18(%r15), %r9
leaq 0x4(%r15), %rax
movq %rbx, %rdi
movl $0x4, %esi
movl 0x8(%rsp), %ecx
movl %r14d, %r8d
pushq %rax
pushq %r15
callq 0xa3ff
addq $0x10, %rsp
movq %rbx, %rdi
movq 0x110(%rsp), %rsi
addq $0x168, %rsp            # imm = 0x168
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x83df
addq $0x168, %rsp            # imm = 0x168
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq