// File: /workspace/github_c_makefile_star2_O3/nh13[P]ksw/src/parasail/src/sg_scan_sse2_128_8.c
// Function: parasail_sg_flags_rowcol_scan_profile_sse2_128_8
parasail_result_t* PNAME(
        const parasail_profile_t * const restrict profile,
        const char * const restrict s2, const int s2Len,
        const int open, const int gap,
        int s1_beg, int s1_end, int s2_beg, int s2_end)
{
    /* declare local variables */
    int32_t i = 0;
    int32_t j = 0;
    int32_t k = 0;
    int32_t end_query = 0;
    int32_t end_ref = 0;
    int32_t s1Len = 0;
    const parasail_matrix_t *matrix = NULL;
    int32_t segWidth = 0;
    int32_t segLen = 0;
    int32_t offset = 0;
    int32_t position = 0;
    __m128i* restrict pvP = NULL;
    __m128i* restrict pvE = NULL;
    int8_t* restrict boundary = NULL;
    __m128i* restrict pvHt = NULL;
    __m128i* restrict pvH = NULL;
    __m128i* restrict pvGapper = NULL;
    __m128i vGapO;
    __m128i vGapE;
    int8_t NEG_LIMIT = 0;
    int8_t POS_LIMIT = 0;
    __m128i vZero;
    int8_t score = 0;
    __m128i vNegLimit;
    __m128i vPosLimit;
    __m128i vSaturationCheckMin;
    __m128i vSaturationCheckMax;
    __m128i vMaxH;
    __m128i vPosMask;
    __m128i vNegInfFront;
    __m128i vSegLenXgap;
    parasail_result_t *result = NULL;

    /* validate inputs */
    PARASAIL_CHECK_NULL(profile);
    PARASAIL_CHECK_NULL(profile->profile8.score);
    PARASAIL_CHECK_NULL(profile->matrix);
    PARASAIL_CHECK_GT0(profile->s1Len);
    PARASAIL_CHECK_NULL(s2);
    PARASAIL_CHECK_GT0(s2Len);
    PARASAIL_CHECK_GE0(open);
    PARASAIL_CHECK_GE0(gap);

    /* initialize stack variables */
    i = 0;
    j = 0;
    k = 0;
    s1Len = profile->s1Len;
    end_query = s1Len-1;
    end_ref = s2Len-1;
    matrix = profile->matrix;
    segWidth = 16; /* number of values in vector unit */
    segLen = (s1Len + segWidth - 1) / segWidth;
    offset = (s1Len - 1) % segLen;
    position = (segWidth - 1) - (s1Len - 1) / segLen;
    pvP = (__m128i*)profile->profile8.score;
    vGapO = _mm_set1_epi8(open);
    vGapE = _mm_set1_epi8(gap);
    NEG_LIMIT = (-open < matrix->min ? INT8_MIN + open : INT8_MIN - matrix->min) + 1;
    POS_LIMIT = INT8_MAX - matrix->max - 1;
    vZero = _mm_setzero_si128();
    score = NEG_LIMIT;
    vNegLimit = _mm_set1_epi8(NEG_LIMIT);
    vPosLimit = _mm_set1_epi8(POS_LIMIT);
    vSaturationCheckMin = vPosLimit;
    vSaturationCheckMax = vNegLimit;
    vMaxH = vNegLimit;
    vPosMask = _mm_cmpeq_epi8(_mm_set1_epi8(position),
            _mm_set_epi8(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15));
    vNegInfFront = vZero;
    vNegInfFront = _mm_insert_epi8_rpl(vNegInfFront, NEG_LIMIT, 0);
    vSegLenXgap = _mm_adds_epi8(vNegInfFront,
            _mm_slli_si128(_mm_set1_epi8(-segLen*gap), 1));

    /* initialize result */
#ifdef PARASAIL_TABLE
    result = parasail_result_new_table1(segLen*segWidth, s2Len);
#else
#ifdef PARASAIL_ROWCOL
    result = parasail_result_new_rowcol1(segLen*segWidth, s2Len);
#else
    result = parasail_result_new();
#endif
#endif
    if (!result) return NULL;

    /* set known flags */
    result->flag |= PARASAIL_FLAG_SG | PARASAIL_FLAG_SCAN
        | PARASAIL_FLAG_BITS_8 | PARASAIL_FLAG_LANES_16;
    result->flag |= s1_beg ? PARASAIL_FLAG_SG_S1_BEG : 0;
    result->flag |= s1_end ? PARASAIL_FLAG_SG_S1_END : 0;
    result->flag |= s2_beg ? PARASAIL_FLAG_SG_S2_BEG : 0;
    result->flag |= s2_end ? PARASAIL_FLAG_SG_S2_END : 0;
#ifdef PARASAIL_TABLE
    result->flag |= PARASAIL_FLAG_TABLE;
#endif
#ifdef PARASAIL_ROWCOL
    result->flag |= PARASAIL_FLAG_ROWCOL;
#endif

    /* initialize heap variables */
    pvE = parasail_memalign___m128i(16, segLen);
    boundary = parasail_memalign_int8_t(16, s2Len+1);
    pvHt= parasail_memalign___m128i(16, segLen);
    pvH = parasail_memalign___m128i(16, segLen);
    pvGapper = parasail_memalign___m128i(16, segLen);

    /* validate heap variables */
    if (!pvE) return NULL;
    if (!boundary) return NULL;
    if (!pvHt) return NULL;
    if (!pvH) return NULL;
    if (!pvGapper) return NULL;

    /* initialize H and E */
    {
        int32_t index = 0;
        for (i=0; i<segLen; ++i) {
            int32_t segNum = 0;
            __m128i_8_t h;
            __m128i_8_t e;
            for (segNum=0; segNum<segWidth; ++segNum) {
                int64_t tmp = s1_beg ? 0 : (-open-gap*(segNum*segLen+i));
                h.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
                tmp = tmp - open;
                e.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
            }
            _mm_store_si128(&pvH[index], h.m);
            _mm_store_si128(&pvE[index], e.m);
            ++index;
        }
    }

    /* initialize uppder boundary */
    {
        boundary[0] = 0;
        for (i=1; i<=s2Len; ++i) {
            int64_t tmp = s2_beg ? 0 : (-open-gap*(i-1));
            boundary[i] = tmp < INT8_MIN ? INT8_MIN : tmp;
        }
    }

    {
        __m128i vGapper = _mm_subs_epi8(vZero,vGapO);
        for (i=segLen-1; i>=0; --i) {
            _mm_store_si128(pvGapper+i, vGapper);
            vGapper = _mm_subs_epi8(vGapper, vGapE);
            /* long queries and/or large penalties will break the pseudo prefix scan */
            vSaturationCheckMin = _mm_min_epi8_rpl(vSaturationCheckMin, vGapper);
        }
    }

    /* outer loop over database sequence */
    for (j=0; j<s2Len; ++j) {
        __m128i vE;
        __m128i vHt;
        __m128i vF;
        __m128i vH;
        __m128i vHp;
        __m128i *pvW;
        __m128i vW;

        /* calculate E */
        /* calculate Ht */
        /* calculate F and H first pass */
        vHp = _mm_load_si128(pvH+(segLen-1));
        vHp = _mm_slli_si128(vHp, 1);
        vHp = _mm_insert_epi8_rpl(vHp, boundary[j], 0);
        pvW = pvP + matrix->mapper[(unsigned char)s2[j]]*segLen;
        vHt = _mm_subs_epi8(vNegLimit, pvGapper[0]);
        vF = vNegLimit;
        for (i=0; i<segLen; ++i) {
            vH = _mm_load_si128(pvH+i);
            vE = _mm_load_si128(pvE+i);
            vW = _mm_load_si128(pvW+i);
            vE = _mm_max_epi8_rpl(
                    _mm_subs_epi8(vE, vGapE),
                    _mm_subs_epi8(vH, vGapO));
            vHp = _mm_adds_epi8(vHp, vW);
            vF = _mm_max_epi8_rpl(vF, _mm_adds_epi8(vHt, pvGapper[i]));
            vHt = _mm_max_epi8_rpl(vE, vHp);
            _mm_store_si128(pvE+i, vE);
            _mm_store_si128(pvHt+i, vHt);
            vHp = vH;
        }

        /* pseudo prefix scan on F and H */
        vHt = _mm_slli_si128(vHt, 1);
        vHt = _mm_insert_epi8_rpl(vHt, boundary[j+1], 0);
        vF = _mm_max_epi8_rpl(vF, _mm_adds_epi8(vHt, pvGapper[0]));
        for (i=0; i<segWidth-2; ++i) {
            __m128i vFt = _mm_slli_si128(vF, 1);
            vFt = _mm_adds_epi8(vFt, vSegLenXgap);
            vF = _mm_max_epi8_rpl(vF, vFt);
        }

        /* calculate final H */
        vF = _mm_slli_si128(vF, 1);
        vF = _mm_adds_epi8(vF, vNegInfFront);
        vH = _mm_max_epi8_rpl(vHt, vF);
        for (i=0; i<segLen; ++i) {
            vHt = _mm_load_si128(pvHt+i);
            vF = _mm_max_epi8_rpl(
                    _mm_subs_epi8(vF, vGapE),
                    _mm_subs_epi8(vH, vGapO));
            vH = _mm_max_epi8_rpl(vHt, vF);
            _mm_store_si128(pvH+i, vH);
            vSaturationCheckMin = _mm_min_epi8_rpl(vSaturationCheckMin, vH);
            vSaturationCheckMin = _mm_min_epi8_rpl(vSaturationCheckMin, vF);
            vSaturationCheckMax = _mm_max_epi8_rpl(vSaturationCheckMax, vH);
#ifdef PARASAIL_TABLE
            arr_store_si128(result->tables->score_table, vH, i, segLen, j, s2Len);
#endif
        } 

        /* extract vector containing last value from column */
        {
            __m128i vCompare;
            vH = _mm_load_si128(pvH + offset);
            vCompare = _mm_and_si128(vPosMask, _mm_cmpgt_epi8(vH, vMaxH));
            vMaxH = _mm_max_epi8_rpl(vH, vMaxH);
            if (_mm_movemask_epi8(vCompare)) {
                end_ref = j;
            }
#ifdef PARASAIL_ROWCOL
            for (k=0; k<position; ++k) {
                vH = _mm_slli_si128(vH, 1);
            }
            result->rowcols->score_row[j] = (int8_t) _mm_extract_epi8_rpl (vH, 15);
#endif
        }
    }

#ifdef PARASAIL_ROWCOL
    for (i=0; i<segLen; ++i) {
        __m128i vH = _mm_load_si128(pvH + i);
        arr_store_col(result->rowcols->score_col, vH, i, segLen);
    }
#endif

    /* max last value from all columns */
    if (s2_end)
    {
        for (k=0; k<position; ++k) {
            vMaxH = _mm_slli_si128(vMaxH, 1);
        }
        score = (int8_t) _mm_extract_epi8_rpl(vMaxH, 15);
        end_query = s1Len-1;
    }

    /* max of last column */
    if (s1_end)
    {
        /* Trace the alignment ending position on read. */
        int8_t *t = (int8_t*)pvH;
        int32_t column_len = segLen * segWidth;
        for (i = 0; i<column_len; ++i, ++t) {
            int32_t temp = i / segWidth + i % segWidth * segLen;
            if (temp >= s1Len) continue;
            if (*t > score) {
                score = *t;
                end_query = temp;
                end_ref = s2Len-1;
            }
            else if (*t == score && end_ref == s2Len-1 && temp < end_query) {
                end_query = temp;
            }
        }
    }

    if (!s1_end && !s2_end) {
        /* extract last value from the last column */
        {
            __m128i vH = _mm_load_si128(pvH + offset);
            for (k=0; k<position; ++k) {
                vH = _mm_slli_si128(vH, 1);
            }
            score = (int8_t) _mm_extract_epi8_rpl (vH, 15);
            end_ref = s2Len - 1;
            end_query = s1Len - 1;
        }
    }

    if (_mm_movemask_epi8(_mm_or_si128(
            _mm_cmplt_epi8(vSaturationCheckMin, vNegLimit),
            _mm_cmpgt_epi8(vSaturationCheckMax, vPosLimit)))) {
        result->flag |= PARASAIL_FLAG_SATURATED;
        score = 0;
        end_query = 0;
        end_ref = 0;
    }

    result->score = score;
    result->end_query = end_query;
    result->end_ref = end_ref;

    parasail_free(pvGapper);
    parasail_free(pvH);
    parasail_free(pvHt);
    parasail_free(boundary);
    parasail_free(pvE);

    return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x158, %rsp            # imm = 0x158
movq %r8, 0x50(%rsp)
movq %rsi, 0x60(%rsp)
testq %rdi, %rdi
je 0x355ca4
movq 0x18(%rdi), %rax
movq %rax, 0x88(%rsp)
testq %rax, %rax
je 0x355cab
movq 0x10(%rdi), %rax
movq %rax, 0x58(%rsp)
testq %rax, %rax
je 0x355cb2
movl %edx, %r12d
movl 0x8(%rdi), %edx
testl %edx, %edx
jle 0x355cb9
cmpq $0x0, 0x60(%rsp)
je 0x355cc0
testl %r12d, %r12d
jle 0x355cc7
testl %ecx, %ecx
js 0x355cce
cmpl $0x0, 0x50(%rsp)
js 0x355cd5
movl %r9d, %ebx
leal -0x1(%rdx), %eax
movq %rdx, 0x108(%rsp)
leaq 0xf(%rdx), %r14
movq %r14, %r15
shrq $0x4, %r15
movl %eax, 0x9c(%rsp)
xorl %edx, %edx
divl %r15d
movl %eax, 0xc(%rsp)
movl %edx, %ebp
movl %ecx, %r13d
negl %r13d
movq 0x58(%rsp), %rdx
movl 0x20(%rdx), %eax
movl %eax, %esi
negb %sil
cmpl %r13d, %eax
movzbl %sil, %eax
movl %ecx, 0x30(%rsp)
cmovgl %ecx, %eax
movl %eax, 0x2c(%rsp)
movb $0x7e, %al
subb 0x1c(%rdx), %al
movb %al, 0x70(%rsp)
andl $0x7ffffff0, %r14d      # imm = 0x7FFFFFF0
movl %r14d, %edi
movl %r12d, %esi
callq 0x20ac53
testq %rax, %rax
je 0x355cda
movl %r13d, 0xa0(%rsp)
movl %ebp, 0x94(%rsp)
movq %r14, 0x100(%rsp)
movl 0x1a0(%rsp), %edi
xorl %r8d, %r8d
testl %ebx, %ebx
setne %r8b
xorl %ecx, %ecx
cmpl $0x0, 0x190(%rsp)
setne %cl
shll $0x4, %ecx
xorl %edx, %edx
cmpl $0x0, 0x198(%rsp)
setne %dl
shll $0xe, %edx
xorl %esi, %esi
movl %edi, 0x98(%rsp)
testl %edi, %edi
setne %sil
shll $0xf, %esi
leal (%rcx,%r8,8), %ecx
orl %edx, %ecx
orl %esi, %ecx
orl 0xc(%rax), %ecx
orl $0x10140402, %ecx       # imm = 0x10140402
movq %rax, 0xc8(%rsp)
movl %ecx, 0xc(%rax)
movl $0x10, %edi
movq %r15, %rsi
callq 0x2f600c
movq %rax, %r14
movq %r12, 0xb0(%rsp)
leal 0x1(%r12), %esi
movl $0x10, %edi
callq 0x20a620
movq %r15, %r12
movq %rax, %r13
movl $0x10, %edi
movq %r15, %rsi
callq 0x2f600c
movq %rax, %rbp
movl $0x10, %edi
movq %r15, %rsi
callq 0x2f600c
movq %rax, %r15
movl $0x10, %edi
movq %r12, 0x48(%rsp)
movq %r12, %rsi
callq 0x2f600c
movq %r14, %xmm0
movq %r13, 0x68(%rsp)
movq %r13, %xmm1
punpcklqdq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0]
movq %rbp, %xmm1
movq %r15, %xmm2
punpcklqdq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0]
pxor %xmm2, %xmm2
pcmpeqd %xmm2, %xmm0
pcmpeqd %xmm2, %xmm1
movdqa %xmm0, %xmm2
shufps $0xdd, %xmm1, %xmm2     # xmm2 = xmm2[1,3],xmm1[1,3]
shufps $0x88, %xmm1, %xmm0     # xmm0 = xmm0[0,2],xmm1[0,2]
andps %xmm2, %xmm0
movmskps %xmm0, %ecx
xorl %r12d, %r12d
testl %ecx, %ecx
jne 0x355cdd
testq %rax, %rax
je 0x355cdd
movq 0xb0(%rsp), %rcx
decl %ecx
movl %ecx, 0x8(%rsp)
movl $0xf, %edx
subl 0xc(%rsp), %edx
movl 0x30(%rsp), %edi
movd %edi, %xmm0
movdqa %xmm0, 0xd0(%rsp)
punpcklbw %xmm0, %xmm0    # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
pshuflw $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0,4,5,6,7]
pshufd $0x0, %xmm0, %xmm2      # xmm2 = xmm0[0,0,0,0]
movq 0x50(%rsp), %rsi
movd %esi, %xmm1
movdqa %xmm1, %xmm0
punpcklbw %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
pshuflw $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0,4,5,6,7]
pshufd $0x0, %xmm0, %xmm3      # xmm3 = xmm0[0,0,0,0]
movl 0x2c(%rsp), %ecx
addb $-0x7f, %cl
movl %ecx, 0x2c(%rsp)
movzbl %cl, %ecx
movd %ecx, %xmm7
movdqa %xmm7, %xmm0
punpcklbw %xmm7, %xmm0    # xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1],xmm0[2],xmm7[2],xmm0[3],xmm7[3],xmm0[4],xmm7[4],xmm0[5],xmm7[5],xmm0[6],xmm7[6],xmm0[7],xmm7[7]
pshuflw $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0,4,5,6,7]
pshufd $0x0, %xmm0, %xmm4      # xmm4 = xmm0[0,0,0,0]
movzbl 0x70(%rsp), %ecx
movd %ecx, %xmm0
punpcklbw %xmm0, %xmm0    # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
pshuflw $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0,4,5,6,7]
pshufd $0x0, %xmm0, %xmm5      # xmm5 = xmm0[0,0,0,0]
movd %edx, %xmm0
punpcklbw %xmm0, %xmm0    # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
pshuflw $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0,4,5,6,7]
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movdqa %xmm0, 0x70(%rsp)
movq 0x48(%rsp), %r8
movl %r8d, %ecx
imull %esi, %ecx
negb %cl
movzbl %cl, %ecx
movd %ecx, %xmm0
punpcklbw %xmm0, %xmm0    # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
pshuflw $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0,4,5,6,7]
pshufd $0x0, %xmm0, %xmm6      # xmm6 = xmm0[0,0,0,0]
pslldq $0x1, %xmm6             # xmm6 = zero,xmm6[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
movdqa %xmm7, 0xe0(%rsp)
paddsb %xmm7, %xmm6
movl %edi, %ecx
movl %esi, %esi
movslq 0xa0(%rsp), %r13
movq %rsi, 0x30(%rsp)
imulq %rsi, %r8
xorl %r9d, %r9d
movq $-0x80, %r10
movq %r13, %rdi
xorl %r12d, %r12d
testl %ebx, %ebx
je 0x354db4
xorl %r11d, %r11d
jmp 0x354db7
movq %rdi, %r11
cmpq $-0x7f, %r11
movq $-0x80, %rsi
cmovgeq %r11, %rsi
movb %sil, 0x140(%rsp,%r12)
subq %rcx, %r11
cmpq $-0x7f, %r11
cmovlq %r10, %r11
movb %r11b, 0x130(%rsp,%r12)
incq %r12
subq %r8, %rdi
cmpq $0x10, %r12
jne 0x354dab
movq %r9, %rsi
shlq $0x4, %rsi
movaps 0x140(%rsp), %xmm0
movaps %xmm0, (%r15,%rsi)
movdqa 0x130(%rsp), %xmm0
movdqa %xmm0, (%r14,%rsi)
incq %r9
subq 0x30(%rsp), %r13
cmpq 0x48(%rsp), %r9
jne 0x354da5
movdqa %xmm5, 0x110(%rsp)
movdqa %xmm4, 0x120(%rsp)
movq 0x68(%rsp), %r13
movb $0x0, (%r13)
movq 0xb0(%rsp), %r12
movl %r12d, %ecx
addl $0xf, %r12d
andl $-0x10, %r12d
movq %rcx, 0xf8(%rsp)
decq %rcx
movq %rcx, %xmm0
pshufd $0x44, %xmm0, %xmm0     # xmm0 = xmm0[0,1,0,1]
movdqa %xmm0, 0xb0(%rsp)
movd 0xa0(%rsp), %xmm0
movdqa %xmm0, 0xa0(%rsp)
pshufd $0x0, %xmm0, %xmm12     # xmm12 = xmm0[0,0,0,0]
pshufd $0x0, %xmm1, %xmm15     # xmm15 = xmm1[0,0,0,0]
movq 0x50(%rsp), %rsi
movl %esi, %edi
negl %edi
movl %esi, %r8d
shll $0x4, %r8d
leal (%rsi,%rsi,2), %ecx
movq %rcx, 0x80(%rsp)
addl %esi, %esi
xorl %r10d, %r10d
movdqa 0x2d3fee(%rip), %xmm1   # 0x628ea0
pcmpeqd %xmm11, %xmm11
xorl %r11d, %r11d
xorl %ebx, %ebx
movq %r12, %r9
movq %rbx, %xmm0
pshufd $0x44, %xmm0, %xmm13    # xmm13 = xmm0[0,1,0,1]
movdqa %xmm13, %xmm0
por 0x2d3fb9(%rip), %xmm0   # 0x628e90
movdqa 0xb0(%rsp), %xmm8
pxor %xmm1, %xmm8
pxor %xmm1, %xmm0
movdqa %xmm0, %xmm4
pcmpgtd %xmm8, %xmm4
pshufd $0xa0, %xmm4, %xmm7     # xmm7 = xmm4[0,0,2,2]
pshuflw $0xe8, %xmm7, %xmm9     # xmm9 = xmm7[0,2,2,3,4,5,6,7]
pcmpeqd %xmm8, %xmm0
pshufd $0xf5, %xmm0, %xmm5     # xmm5 = xmm0[1,1,3,3]
pshuflw $0xe8, %xmm5, %xmm0     # xmm0 = xmm5[0,2,2,3,4,5,6,7]
pand %xmm9, %xmm0
pshufd $0xf5, %xmm4, %xmm14    # xmm14 = xmm4[1,1,3,3]
pshuflw $0xe8, %xmm14, %xmm9    # xmm9 = xmm14[0,2,2,3,4,5,6,7]
por %xmm0, %xmm9
pxor %xmm11, %xmm9
packssdw %xmm9, %xmm9
leal (%rsi,%r11), %ecx
movq 0x80(%rsp), %r12
leal (%r12,%r11), %r12d
movd %edi, %xmm0
punpcklqdq 0xa0(%rsp), %xmm0 # xmm0 = xmm0[0],mem[0]
pshufd $0xa2, %xmm0, %xmm0     # xmm0 = xmm0[2,0,2,2]
movd %r12d, %xmm4
movd %ecx, %xmm10
punpckldq %xmm4, %xmm10   # xmm10 = xmm10[0],xmm4[0],xmm10[1],xmm4[1]
movd %r11d, %xmm4
punpckldq 0xd0(%rsp), %xmm4 # xmm4 = xmm4[0],mem[0],xmm4[1],mem[1]
punpcklqdq %xmm10, %xmm4   # xmm4 = xmm4[0],xmm10[0]
psubd %xmm4, %xmm0
movdqa %xmm0, %xmm4
movdqa 0x2d4c8e(%rip), %xmm10  # 0x629c10
pcmpgtd %xmm10, %xmm4
pand %xmm4, %xmm0
pandn %xmm10, %xmm4
por %xmm0, %xmm4
movd %xmm9, %ecx
testb $0x1, %cl
je 0x354fb3
cmpl $0x0, 0x198(%rsp)
movd %xmm4, %ecx
cmovnel %r10d, %ecx
movb %cl, 0x1(%r13,%rbx)
pand %xmm7, %xmm5
por %xmm14, %xmm5
packssdw %xmm5, %xmm5
pxor %xmm11, %xmm5
packssdw %xmm5, %xmm5
packsswb %xmm5, %xmm5
movd %xmm5, %ecx
shrl $0x8, %ecx
testb $0x1, %cl
je 0x354fef
pextrw $0x2, %xmm4, %ecx
cmpl $0x0, 0x198(%rsp)
cmovnel %r10d, %ecx
movb %cl, 0x2(%r13,%rbx)
movdqa %xmm13, %xmm0
por 0x2d3e84(%rip), %xmm0   # 0x628e80
pxor %xmm1, %xmm0
movdqa %xmm0, %xmm9
pcmpgtd %xmm8, %xmm9
pshufd $0xa0, %xmm9, %xmm5     # xmm5 = xmm9[0,0,2,2]
pcmpeqd %xmm8, %xmm0
pshufd $0xf5, %xmm0, %xmm7     # xmm7 = xmm0[1,1,3,3]
movdqa %xmm7, %xmm0
pand %xmm5, %xmm0
pshufd $0xf5, %xmm9, %xmm9     # xmm9 = xmm9[1,1,3,3]
por %xmm9, %xmm0
packssdw %xmm0, %xmm0
pxor %xmm11, %xmm0
packssdw %xmm0, %xmm0
packsswb %xmm0, %xmm0
movd %xmm0, %ecx
shrl $0x10, %ecx
testb $0x1, %cl
movq %r9, %r12
movl 0x198(%rsp), %r9d
je 0x355066
pextrw $0x4, %xmm4, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0x3(%r13,%rbx)
pshufhw $0x84, %xmm5, %xmm0     # xmm0 = xmm5[0,1,2,3,4,5,4,6]
pshufhw $0x84, %xmm7, %xmm5     # xmm5 = xmm7[0,1,2,3,4,5,4,6]
pand %xmm0, %xmm5
pshufhw $0x84, %xmm9, %xmm0     # xmm0 = xmm9[0,1,2,3,4,5,4,6]
por %xmm5, %xmm0
pxor %xmm11, %xmm0
packssdw %xmm0, %xmm0
packsswb %xmm0, %xmm0
movd %xmm0, %ecx
shrl $0x18, %ecx
testb $0x1, %cl
je 0x3550a8
pextrw $0x6, %xmm4, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0x4(%r13,%rbx)
movdqa %xmm13, %xmm9
por 0x2d3e1a(%rip), %xmm9   # 0x628ed0
movd %ebx, %xmm0
pshufd $0x0, %xmm0, %xmm4      # xmm4 = xmm0[0,0,0,0]
movdqa %xmm4, %xmm0
por 0x2d4a35(%rip), %xmm0   # 0x629b00
pshufd $0xf5, %xmm0, %xmm7     # xmm7 = xmm0[1,1,3,3]
pmuludq %xmm15, %xmm0
pshufd $0xe8, %xmm0, %xmm0     # xmm0 = xmm0[0,2,2,3]
pshufd $0xf5, %xmm15, %xmm5    # xmm5 = xmm15[1,1,3,3]
movdqa %xmm5, 0x30(%rsp)
pmuludq %xmm5, %xmm7
pshufd $0xe8, %xmm7, %xmm7     # xmm7 = xmm7[0,2,2,3]
punpckldq %xmm7, %xmm0    # xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1]
movdqa %xmm12, %xmm10
psubd %xmm0, %xmm10
movdqa %xmm10, %xmm7
movdqa 0x2d4b06(%rip), %xmm0   # 0x629c10
pcmpgtd %xmm0, %xmm7
pand %xmm7, %xmm10
pandn %xmm0, %xmm7
por %xmm10, %xmm7
pxor %xmm1, %xmm9
movdqa %xmm9, %xmm0
pcmpgtd %xmm8, %xmm0
pshufd $0xa0, %xmm0, %xmm14    # xmm14 = xmm0[0,0,2,2]
pshuflw $0xe8, %xmm14, %xmm10   # xmm10 = xmm14[0,2,2,3,4,5,6,7]
pcmpeqd %xmm8, %xmm9
pshufd $0xf5, %xmm9, %xmm9     # xmm9 = xmm9[1,1,3,3]
pshuflw $0xe8, %xmm9, %xmm11    # xmm11 = xmm9[0,2,2,3,4,5,6,7]
pand %xmm10, %xmm11
pshufd $0xf5, %xmm0, %xmm0     # xmm0 = xmm0[1,1,3,3]
pshuflw $0xe8, %xmm0, %xmm10    # xmm10 = xmm0[0,2,2,3,4,5,6,7]
por %xmm11, %xmm10
pcmpeqd %xmm5, %xmm5
pxor %xmm5, %xmm10
packssdw %xmm10, %xmm10
packsswb %xmm10, %xmm10
pextrw $0x2, %xmm10, %ecx
testb $0x1, %cl
je 0x35518b
testl %r9d, %r9d
movd %xmm7, %ecx
cmovnel %r10d, %ecx
movb %cl, 0x5(%r13,%rbx)
pand %xmm14, %xmm9
por %xmm0, %xmm9
packssdw %xmm9, %xmm9
pxor %xmm5, %xmm9
packssdw %xmm9, %xmm0
packsswb %xmm0, %xmm0
pextrw $0x2, %xmm0, %ecx
shrl $0x8, %ecx
testb $0x1, %cl
je 0x3551c6
pextrw $0x2, %xmm7, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0x6(%r13,%rbx)
movdqa %xmm13, %xmm0
por 0x2d3ced(%rip), %xmm0   # 0x628ec0
pxor %xmm1, %xmm0
movdqa %xmm0, %xmm10
pcmpgtd %xmm8, %xmm10
pshufd $0xa0, %xmm10, %xmm9    # xmm9 = xmm10[0,0,2,2]
pcmpeqd %xmm8, %xmm0
pshufd $0xf5, %xmm0, %xmm14    # xmm14 = xmm0[1,1,3,3]
movdqa %xmm14, %xmm11
pand %xmm9, %xmm11
pshufd $0xf5, %xmm10, %xmm0    # xmm0 = xmm10[1,1,3,3]
por %xmm0, %xmm11
packssdw %xmm11, %xmm10
pxor %xmm5, %xmm10
packssdw %xmm10, %xmm10
packsswb %xmm10, %xmm10
pextrw $0x3, %xmm10, %ecx
testb $0x1, %cl
je 0x355237
pextrw $0x4, %xmm7, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0x7(%r13,%rbx)
pshufhw $0x84, %xmm9, %xmm9     # xmm9 = xmm9[0,1,2,3,4,5,4,6]
pshufhw $0x84, %xmm14, %xmm10   # xmm10 = xmm14[0,1,2,3,4,5,4,6]
pand %xmm9, %xmm10
pshufhw $0x84, %xmm0, %xmm0     # xmm0 = xmm0[0,1,2,3,4,5,4,6]
por %xmm10, %xmm0
pxor %xmm5, %xmm0
packssdw %xmm0, %xmm0
packsswb %xmm0, %xmm0
pextrw $0x3, %xmm0, %ecx
shrl $0x8, %ecx
testb $0x1, %cl
je 0x35527c
pextrw $0x6, %xmm7, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0x8(%r13,%rbx)
movdqa %xmm13, %xmm0
por 0x2d4957(%rip), %xmm0   # 0x629be0
movdqa %xmm4, %xmm7
por 0x2d495b(%rip), %xmm7   # 0x629bf0
pshufd $0xf5, %xmm7, %xmm9     # xmm9 = xmm7[1,1,3,3]
movdqa %xmm15, %xmm5
pmuludq %xmm15, %xmm7
pshufd $0xe8, %xmm7, %xmm7     # xmm7 = xmm7[0,2,2,3]
pmuludq 0x30(%rsp), %xmm9
pshufd $0xe8, %xmm9, %xmm9     # xmm9 = xmm9[0,2,2,3]
punpckldq %xmm9, %xmm7    # xmm7 = xmm7[0],xmm9[0],xmm7[1],xmm9[1]
movdqa %xmm12, %xmm15
movdqa %xmm12, %xmm9
psubd %xmm7, %xmm9
movdqa %xmm9, %xmm7
movdqa 0x2d4937(%rip), %xmm10  # 0x629c10
pcmpgtd %xmm10, %xmm7
pand %xmm7, %xmm9
pandn %xmm10, %xmm7
por %xmm9, %xmm7
pxor %xmm1, %xmm0
movdqa %xmm0, %xmm10
pcmpgtd %xmm8, %xmm10
pshufd $0xa0, %xmm10, %xmm14   # xmm14 = xmm10[0,0,2,2]
pshuflw $0xe8, %xmm14, %xmm11   # xmm11 = xmm14[0,2,2,3,4,5,6,7]
pcmpeqd %xmm8, %xmm0
pshufd $0xf5, %xmm0, %xmm9     # xmm9 = xmm0[1,1,3,3]
pshuflw $0xe8, %xmm9, %xmm12    # xmm12 = xmm9[0,2,2,3,4,5,6,7]
pand %xmm11, %xmm12
pshufd $0xf5, %xmm10, %xmm0    # xmm0 = xmm10[1,1,3,3]
pshuflw $0xe8, %xmm0, %xmm10    # xmm10 = xmm0[0,2,2,3,4,5,6,7]
por %xmm12, %xmm10
pcmpeqd %xmm11, %xmm11
pxor %xmm11, %xmm10
packssdw %xmm10, %xmm10
packsswb %xmm10, %xmm10
pextrw $0x4, %xmm10, %ecx
testb $0x1, %cl
je 0x35535d
testl %r9d, %r9d
movd %xmm7, %ecx
cmovnel %r10d, %ecx
movb %cl, 0x9(%r13,%rbx)
pand %xmm14, %xmm9
por %xmm0, %xmm9
packssdw %xmm9, %xmm9
pxor %xmm11, %xmm9
packssdw %xmm9, %xmm9
packsswb %xmm9, %xmm0
pextrw $0x4, %xmm0, %ecx
shrl $0x8, %ecx
testb $0x1, %cl
je 0x355399
pextrw $0x2, %xmm7, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0xa(%r13,%rbx)
movdqa %xmm13, %xmm0
por 0x2d482a(%rip), %xmm0   # 0x629bd0
pxor %xmm1, %xmm0
movdqa %xmm0, %xmm10
pcmpgtd %xmm8, %xmm10
pshufd $0xa0, %xmm10, %xmm9    # xmm9 = xmm10[0,0,2,2]
pcmpeqd %xmm8, %xmm0
pshufd $0xf5, %xmm0, %xmm0     # xmm0 = xmm0[1,1,3,3]
movdqa %xmm0, %xmm11
pand %xmm9, %xmm11
pshufd $0xf5, %xmm10, %xmm14   # xmm14 = xmm10[1,1,3,3]
por %xmm14, %xmm11
packssdw %xmm11, %xmm10
pcmpeqd %xmm11, %xmm11
pxor %xmm11, %xmm10
packssdw %xmm10, %xmm10
packsswb %xmm10, %xmm10
pextrw $0x5, %xmm10, %ecx
testb $0x1, %cl
movdqa %xmm15, %xmm12
je 0x355413
pextrw $0x4, %xmm7, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0xb(%r13,%rbx)
pshufhw $0x84, %xmm9, %xmm9     # xmm9 = xmm9[0,1,2,3,4,5,4,6]
pshufhw $0x84, %xmm0, %xmm0     # xmm0 = xmm0[0,1,2,3,4,5,4,6]
pand %xmm9, %xmm0
pshufhw $0x84, %xmm14, %xmm9    # xmm9 = xmm14[0,1,2,3,4,5,4,6]
por %xmm0, %xmm9
pxor %xmm11, %xmm9
packssdw %xmm9, %xmm9
packsswb %xmm9, %xmm0
pextrw $0x5, %xmm0, %ecx
shrl $0x8, %ecx
testb $0x1, %cl
movdqa %xmm5, %xmm15
je 0x355460
pextrw $0x6, %xmm7, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0xc(%r13,%rbx)
movdqa %xmm13, %xmm0
por 0x2d4753(%rip), %xmm0   # 0x629bc0
por 0x2d478b(%rip), %xmm4   # 0x629c00
pshufd $0xf5, %xmm4, %xmm7     # xmm7 = xmm4[1,1,3,3]
pmuludq %xmm15, %xmm4
pshufd $0xe8, %xmm4, %xmm4     # xmm4 = xmm4[0,2,2,3]
pmuludq 0x30(%rsp), %xmm7
pshufd $0xe8, %xmm7, %xmm5     # xmm5 = xmm7[0,2,2,3]
punpckldq %xmm5, %xmm4    # xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
movdqa %xmm12, %xmm5
psubd %xmm4, %xmm5
movdqa %xmm5, %xmm4
movdqa 0x2d4768(%rip), %xmm7   # 0x629c10
pcmpgtd %xmm7, %xmm4
pand %xmm4, %xmm5
pandn %xmm7, %xmm4
por %xmm5, %xmm4
pxor %xmm1, %xmm0
movdqa %xmm0, %xmm9
pcmpgtd %xmm8, %xmm9
pshufd $0xa0, %xmm9, %xmm7     # xmm7 = xmm9[0,0,2,2]
pshuflw $0xe8, %xmm7, %xmm10    # xmm10 = xmm7[0,2,2,3,4,5,6,7]
pcmpeqd %xmm8, %xmm0
pshufd $0xf5, %xmm0, %xmm5     # xmm5 = xmm0[1,1,3,3]
pshuflw $0xe8, %xmm5, %xmm11    # xmm11 = xmm5[0,2,2,3,4,5,6,7]
pand %xmm10, %xmm11
pshufd $0xf5, %xmm9, %xmm0     # xmm0 = xmm9[1,1,3,3]
pshuflw $0xe8, %xmm0, %xmm9     # xmm9 = xmm0[0,2,2,3,4,5,6,7]
por %xmm11, %xmm9
pcmpeqd %xmm11, %xmm11
pxor %xmm11, %xmm9
packssdw %xmm9, %xmm9
packsswb %xmm9, %xmm9
pextrw $0x6, %xmm9, %ecx
testb $0x1, %cl
je 0x355527
testl %r9d, %r9d
movd %xmm4, %ecx
cmovnel %r10d, %ecx
movb %cl, 0xd(%r13,%rbx)
pand %xmm7, %xmm5
por %xmm0, %xmm5
packssdw %xmm5, %xmm5
pxor %xmm11, %xmm5
packssdw %xmm5, %xmm0
packsswb %xmm0, %xmm0
pextrw $0x6, %xmm0, %ecx
shrl $0x8, %ecx
testb $0x1, %cl
je 0x35555e
pextrw $0x2, %xmm4, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0xe(%r13,%rbx)
por 0x2d4649(%rip), %xmm13  # 0x629bb0
pxor %xmm1, %xmm13
movdqa %xmm13, %xmm7
pcmpgtd %xmm8, %xmm7
pshufd $0xa0, %xmm7, %xmm5     # xmm5 = xmm7[0,0,2,2]
pcmpeqd %xmm8, %xmm13
pshufd $0xf5, %xmm13, %xmm0    # xmm0 = xmm13[1,1,3,3]
movdqa %xmm0, %xmm8
pand %xmm5, %xmm8
pshufd $0xf5, %xmm7, %xmm7     # xmm7 = xmm7[1,1,3,3]
por %xmm7, %xmm8
packssdw %xmm8, %xmm8
pxor %xmm11, %xmm8
packssdw %xmm8, %xmm8
packsswb %xmm8, %xmm8
pextrw $0x7, %xmm8, %ecx
testb $0x1, %cl
je 0x3555ca
pextrw $0x4, %xmm4, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0xf(%r13,%rbx)
pshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
pshufhw $0x84, %xmm0, %xmm0     # xmm0 = xmm0[0,1,2,3,4,5,4,6]
pand %xmm5, %xmm0
pshufhw $0x84, %xmm7, %xmm5     # xmm5 = xmm7[0,1,2,3,4,5,4,6]
por %xmm0, %xmm5
pxor %xmm11, %xmm5
packssdw %xmm5, %xmm0
packsswb %xmm0, %xmm0
pextrw $0x7, %xmm0, %ecx
shrl $0x8, %ecx
testb $0x1, %cl
je 0x35560c
pextrw $0x6, %xmm4, %ecx
testl %r9d, %r9d
cmovnel %r10d, %ecx
movb %cl, 0x10(%r13,%rbx)
addq $0x10, %rbx
subl %r8d, %edi
addl %r8d, %r11d
cmpq %rbx, %r12
jne 0x354ebc
pxor %xmm4, %xmm4
psubsb %xmm2, %xmm4
movq 0x48(%rsp), %rbx
leal -0x1(%rbx), %r10d
shlq $0x4, %r10
movq %rax, %rcx
addq %r10, %rcx
movl %ebx, %edi
movdqa 0x110(%rsp), %xmm15
movdqa %xmm15, %xmm1
movq 0xc8(%rsp), %r12
movdqa %xmm4, (%rcx)
psubsb %xmm3, %xmm4
movdqa %xmm1, %xmm0
pcmpgtb %xmm4, %xmm0
movdqa %xmm4, %xmm5
pand %xmm0, %xmm5
pandn %xmm1, %xmm0
movdqa %xmm0, %xmm1
por %xmm5, %xmm1
addq $-0x10, %rcx
decl %edi
jg 0x355653
addq %r15, %r10
movl 0x94(%rsp), %r11d
movq %r11, 0x50(%rsp)
shlq $0x4, %r11
addq %r15, %r11
movq %rbx, %r9
shlq $0x4, %r9
xorl %r8d, %r8d
movdqa 0x2d4578(%rip), %xmm4   # 0x629c20
movdqa 0x70(%rsp), %xmm0
pcmpeqb 0x2d459a(%rip), %xmm0   # 0x629c50
movdqa %xmm0, 0x70(%rsp)
movl %ebx, %ebx
movl 0x8(%rsp), %ecx
movl %ecx, 0x30(%rsp)
movdqa 0x120(%rsp), %xmm14
movdqa %xmm14, %xmm8
movdqa %xmm14, %xmm7
movq 0xf8(%rsp), %rsi
movq %r8, %r13
movdqa (%r10), %xmm0
pslldq $0x1, %xmm0             # xmm0 = zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
movq 0x68(%rsp), %rcx
movzbl (%rcx,%r8), %ecx
movd %ecx, %xmm9
movdqa %xmm4, %xmm5
pandn %xmm9, %xmm5
por %xmm0, %xmm5
movq 0x58(%rsp), %rcx
movq 0x10(%rcx), %rcx
movq 0x60(%rsp), %rdi
movzbl (%rdi,%r8), %edi
movslq (%rcx,%rdi,4), %r8
imulq %rbx, %r8
shlq $0x4, %r8
addq 0x88(%rsp), %r8
movdqa %xmm14, %xmm10
psubsb (%rax), %xmm10
xorl %ecx, %ecx
movdqa %xmm14, %xmm9
movdqa (%r15,%rcx), %xmm11
movdqa (%r14,%rcx), %xmm0
psubsb %xmm3, %xmm0
movdqa %xmm11, %xmm12
psubsb %xmm2, %xmm12
movdqa %xmm0, %xmm13
pcmpgtb %xmm12, %xmm13
pand %xmm13, %xmm0
pandn %xmm12, %xmm13
por %xmm0, %xmm13
paddsb (%r8,%rcx), %xmm5
paddsb (%rax,%rcx), %xmm10
movdqa %xmm9, %xmm0
pcmpgtb %xmm10, %xmm9
pand %xmm9, %xmm0
pandn %xmm10, %xmm9
por %xmm0, %xmm9
movdqa %xmm13, %xmm10
pcmpgtb %xmm5, %xmm10
movdqa %xmm13, (%r14,%rcx)
pand %xmm10, %xmm13
pandn %xmm5, %xmm10
por %xmm13, %xmm10
movdqa %xmm10, (%rbp,%rcx)
addq $0x10, %rcx
movdqa %xmm11, %xmm5
cmpq %rcx, %r9
jne 0x355743
pslldq $0x1, %xmm10            # xmm10 = zero,xmm10[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
leaq 0x1(%r13), %r8
movq 0x68(%rsp), %rcx
movzbl 0x1(%rcx,%r13), %ecx
movd %ecx, %xmm0
movdqa %xmm4, %xmm11
pandn %xmm0, %xmm11
por %xmm10, %xmm11
movdqa (%rax), %xmm0
paddsb %xmm11, %xmm0
movdqa %xmm9, %xmm5
pcmpgtb %xmm0, %xmm5
pand %xmm5, %xmm9
pandn %xmm0, %xmm5
por %xmm9, %xmm5
movl $0xe, %ecx
movdqa %xmm5, %xmm0
movdqa %xmm5, %xmm9
pslldq $0x1, %xmm5             # xmm5 = zero,xmm5[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
paddsb %xmm6, %xmm5
pcmpgtb %xmm5, %xmm0
pand %xmm0, %xmm9
pandn %xmm5, %xmm0
movdqa %xmm0, %xmm5
por %xmm9, %xmm5
decl %ecx
jne 0x355820
pslldq $0x1, %xmm5             # xmm5 = zero,xmm5[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
paddsb 0xe0(%rsp), %xmm5
movdqa %xmm11, %xmm9
pcmpgtb %xmm5, %xmm9
pand %xmm9, %xmm11
pandn %xmm5, %xmm9
por %xmm11, %xmm9
xorl %ecx, %ecx
movdqa (%rbp,%rcx), %xmm0
psubsb %xmm3, %xmm5
psubsb %xmm2, %xmm9
movdqa %xmm5, %xmm10
pcmpgtb %xmm9, %xmm10
pand %xmm10, %xmm5
pandn %xmm9, %xmm10
por %xmm10, %xmm5
movdqa %xmm0, %xmm9
pcmpgtb %xmm5, %xmm9
pand %xmm9, %xmm0
pandn %xmm5, %xmm9
por %xmm0, %xmm9
movdqa %xmm9, (%r15,%rcx)
movdqa %xmm1, %xmm0
pcmpgtb %xmm9, %xmm0
movdqa %xmm9, %xmm10
pand %xmm0, %xmm10
pandn %xmm1, %xmm0
por %xmm10, %xmm0
movdqa %xmm0, %xmm1
pcmpgtb %xmm5, %xmm1
movdqa %xmm5, %xmm10
pand %xmm1, %xmm10
pandn %xmm0, %xmm1
por %xmm10, %xmm1
movdqa %xmm7, %xmm0
pcmpgtb %xmm9, %xmm7
pand %xmm7, %xmm0
pandn %xmm9, %xmm7
por %xmm0, %xmm7
addq $0x10, %rcx
cmpq %rcx, %r9
jne 0x355875
movdqa (%r11), %xmm5
movdqa %xmm5, %xmm9
pcmpgtb %xmm8, %xmm9
movdqa %xmm9, %xmm0
pand 0x70(%rsp), %xmm0
pmovmskb %xmm0, %ecx
testl %ecx, %ecx
movl 0x30(%rsp), %ecx
cmovnel %r13d, %ecx
movl %ecx, 0x30(%rsp)
movdqa %xmm5, %xmm0
cmpl $0xe, 0xc(%rsp)
jg 0x35595e
xorl %ecx, %ecx
movdqa %xmm5, %xmm0
pslldq $0x1, %xmm0             # xmm0 = zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
incl %ecx
cmpl %edx, %ecx
jl 0x355953
pand %xmm9, %xmm5
pandn %xmm8, %xmm9
movdqa %xmm9, %xmm8
por %xmm5, %xmm8
pextrw $0x7, %xmm0, %ecx
shrl $0x8, %ecx
movsbl %cl, %ecx
movq 0x10(%r12), %rdi
movq (%rdi), %rdi
movl %ecx, (%rdi,%r13,4)
cmpq %rsi, %r8
jne 0x3556e2
movl %edx, 0x80(%rsp)
movq 0x48(%rsp), %rbx
leal (,%rbx,4), %esi
leal (,%rbx,8), %ecx
movq %rcx, 0x60(%rsp)
leaq (%rsi,%rsi,2), %rcx
movq %rcx, 0x58(%rsp)
imulq $0x3c, %rbx, %rcx
movq %rcx, 0x88(%rsp)
imulq $0x38, %rbx, %rcx
movq %rcx, 0x70(%rsp)
imulq $0x34, %rbx, %rcx
movq %rcx, 0xe0(%rsp)
leaq (%r9,%r9,2), %rcx
movq %rcx, 0xd0(%rsp)
imulq $0x2c, %rbx, %rcx
movq %rcx, 0xb0(%rsp)
leal (,%rbx,8), %ecx
leaq (%rcx,%rcx,4), %rdx
movq %rdx, 0xa0(%rsp)
leal (,%rbx,4), %edi
leaq (%rdi,%rdi,8), %r8
movq %rbx, %r10
shlq $0x5, %r10
leaq (%rbx,%rbx,8), %r11
leaq (%r11,%r11,2), %r11
addq %rbx, %r11
leaq (%rcx,%rcx,2), %rbx
leaq (%rdi,%rdi,4), %r13
xorl %ecx, %ecx
movdqa (%r15,%rcx,4), %xmm0
movq 0x10(%r12), %rdi
movq 0x8(%rdi), %rdi
movdqa %xmm0, 0x10(%rsp)
movsbl 0x10(%rsp), %r12d
movl %r12d, (%rdi,%rcx)
addq %rcx, %rdi
movsbl 0x11(%rsp), %r12d
movl %r12d, (%rsi,%rdi)
movsbl 0x12(%rsp), %r12d
movq 0x60(%rsp), %rdx
movl %r12d, (%rdx,%rdi)
movsbl 0x13(%rsp), %r12d
movq 0x58(%rsp), %rdx
movl %r12d, (%rdx,%rdi)
movsbl 0x14(%rsp), %r12d
movl %r12d, (%r9,%rdi)
movsbl 0x15(%rsp), %r12d
movl %r12d, (%r13,%rdi)
movsbl 0x16(%rsp), %r12d
movl %r12d, (%rbx,%rdi)
movsbl 0x17(%rsp), %r12d
movl %r12d, (%r11,%rdi)
movsbl 0x18(%rsp), %r12d
movl %r12d, (%r10,%rdi)
movsbl 0x19(%rsp), %r12d
movl %r12d, (%r8,%rdi)
movsbl 0x1a(%rsp), %r12d
movq 0xa0(%rsp), %rdx
movl %r12d, (%rdx,%rdi)
movsbl 0x1b(%rsp), %r12d
movq 0xb0(%rsp), %rdx
movl %r12d, (%rdx,%rdi)
movsbl 0x1c(%rsp), %r12d
movq 0xd0(%rsp), %rdx
movl %r12d, (%rdx,%rdi)
movsbl 0x1d(%rsp), %r12d
movq 0xe0(%rsp), %rdx
movl %r12d, (%rdx,%rdi)
movsbl 0x1e(%rsp), %r12d
movq 0x70(%rsp), %rdx
movl %r12d, (%rdx,%rdi)
movsbl 0x1f(%rsp), %r12d
movq 0x88(%rsp), %rdx
movl %r12d, (%rdx,%rdi)
movq 0xc8(%rsp), %r12
addq $0x4, %rcx
cmpq %rcx, %rsi
jne 0x355a2d
cmpl $0x0, 0x1a0(%rsp)
movl 0x9c(%rsp), %r10d
movq 0x108(%rsp), %r11
movl 0x2c(%rsp), %ebx
movl 0x80(%rsp), %edx
je 0x355b75
cmpl $0xe, 0xc(%rsp)
jg 0x355b6c
xorl %ecx, %ecx
pslldq $0x1, %xmm8             # xmm8 = zero,xmm8[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
incl %ecx
cmpl %edx, %ecx
jl 0x355b60
pextrw $0x7, %xmm8, %ebx
shrl $0x8, %ebx
cmpl $0x0, 0x190(%rsp)
je 0x355bf1
cmpl $0x0, 0x100(%rsp)
je 0x355bf1
movq 0x48(%rsp), %r8
andl $0x7ffffff, %r8d        # imm = 0x7FFFFFF
shll $0x4, %r8d
xorl %ecx, %ecx
movl %r10d, %esi
movl %ecx, %r9d
shrl $0x4, %r9d
movl %ecx, %edi
andl $0xf, %edi
imull 0x48(%rsp), %edi
addl %r9d, %edi
cmpl %r11d, %edi
jge 0x355be7
movb (%r15,%rcx), %r9b
cmpb %bl, %r9b
jle 0x355bcf
movl %r9d, %ebx
movl 0x8(%rsp), %esi
movl %esi, 0x30(%rsp)
movl %edi, %esi
jmp 0x355be7
cmpl %esi, %edi
cmovgel %esi, %edi
movl 0x30(%rsp), %r13d
cmpl 0x8(%rsp), %r13d
cmovnel %esi, %edi
cmpb %bl, %r9b
cmovel %edi, %esi
incq %rcx
cmpl %ecx, %r8d
jne 0x355b9e
jmp 0x355bf4
movl %r10d, %esi
movl 0x190(%rsp), %ecx
orl %ecx, 0x98(%rsp)
jne 0x355c3a
movq 0x50(%rsp), %rcx
shlq $0x4, %rcx
movdqa (%r15,%rcx), %xmm0
cmpl $0xe, 0xc(%rsp)
jg 0x355c27
xorl %ecx, %ecx
pslldq $0x1, %xmm0             # xmm0 = zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
incl %ecx
cmpl %edx, %ecx
jl 0x355c1c
pextrw $0x7, %xmm0, %ebx
shrl $0x8, %ebx
movl 0x8(%rsp), %ecx
movl %ecx, 0x30(%rsp)
movl %r10d, %esi
pcmpgtb %xmm1, %xmm14
pcmpgtb %xmm15, %xmm7
por %xmm14, %xmm7
pmovmskb %xmm7, %ecx
testl %ecx, %ecx
je 0x355c63
orb $0x40, 0xc(%r12)
xorl %ebx, %ebx
movl $0x0, 0x30(%rsp)
xorl %esi, %esi
movsbl %bl, %ecx
movl %ecx, (%r12)
movl %esi, 0x4(%r12)
movl 0x30(%rsp), %ecx
movl %ecx, 0x8(%r12)
movq %rax, %rdi
callq 0x20a60d
movq %r15, %rdi
callq 0x20a60d
movq %rbp, %rdi
callq 0x20a60d
movq 0x68(%rsp), %rdi
callq 0x20a60d
movq %r14, %rdi
callq 0x20a60d
jmp 0x355cdd
callq 0x1b4f79
jmp 0x355cda
callq 0x1b4f53
jmp 0x355cda
callq 0x1b4f2d
jmp 0x355cda
callq 0x1b4f07
jmp 0x355cda
callq 0x1b4ee1
jmp 0x355cda
callq 0x1b4ebb
jmp 0x355cda
callq 0x1b4e95
jmp 0x355cda
callq 0x1b4e6f
xorl %r12d, %r12d
movq %r12, %rax
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq