| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -964,7 +964,7 @@ static inline void SigMatchSignaturesBuildMatchArraySIMD(DetectEngineThreadCtx *
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				         * _mm_movemask_epi8 in this order as well */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        bitno = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        for (x = u; x < det_ctx->sgh->sig_cnt && bitno < 64; x++, bitno++) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if (bm & (1 << bitno)) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if (bm & ((uint64_t)1 << bitno)) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                SignatureHeader *s = &det_ctx->sgh->head_array[x];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                if (SigMatchSignaturesBuildMatchArrayAddSignature(det_ctx, p, s, alproto) == 1) {
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -10493,6 +10493,9 @@ end:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				   SCLogInfo("%s %08X %08X %08X %08X", #v, (v).dw[0], (v).dw[1], (v).dw[2], (v).dw[3]); \
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/**
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 *  \test Test 32 bit SIMD code.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				int SigTestSIMDMask01(void) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#if defined (__SSE3__)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    Vector pm, sm, r1, r2;
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -10553,6 +10556,9 @@ int SigTestSIMDMask01(void) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#endif
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/**
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 *  \test Test 32 bit SIMD code.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				int SigTestSIMDMask02(void) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#if defined (__SSE3__)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    Vector pm, sm, r1, r2;
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -10612,6 +10618,186 @@ int SigTestSIMDMask02(void) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#endif
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/**
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 *  \test Test 64 bit SIMD code.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				int SigTestSIMDMask03(void) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#if defined (__SSE3__)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    Vector pm, sm, r1, r2;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    uint64_t bm = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    uint8_t *mask = SCMallocAligned(64, 16);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    memset(mask, 0xEF, 64);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mask[31] = 0xFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mask[62] = 0xFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    printf("\n");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    pm.v = _mm_set1_epi8(0xEF);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(pm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* load a batch of masks */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    sm.v = _mm_load_si128((const __m128i *)&mask[0]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(sm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* logical AND them with the packet's mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r1.v = _mm_and_si128(pm.v, sm.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* compare the result with the original mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r2.v = _mm_cmpeq_epi8(sm.v, r1.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* convert into a bitarray */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    bm = ((uint64_t) _mm_movemask_epi8(r2.v));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    SCLogInfo("bm1 %"PRIxMAX, (uintmax_t)bm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* load a batch of masks */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    sm.v = _mm_load_si128((const __m128i *)&mask[16]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(sm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* logical AND them with the packet's mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r1.v = _mm_and_si128(pm.v, sm.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* compare the result with the original mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r2.v = _mm_cmpeq_epi8(sm.v, r1.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* convert into a bitarray */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    bm |= ((uint64_t) _mm_movemask_epi8(r2.v)) << 16;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    SCLogInfo("bm2 %"PRIxMAX, (uintmax_t)bm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* load a batch of masks */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    sm.v = _mm_load_si128((const __m128i *)&mask[32]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(sm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* logical AND them with the packet's mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r1.v = _mm_and_si128(pm.v, sm.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* compare the result with the original mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r2.v = _mm_cmpeq_epi8(sm.v, r1.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* convert into a bitarray */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    bm |= ((uint64_t) _mm_movemask_epi8(r2.v)) << 32;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    SCLogInfo("bm3 %"PRIxMAX, (uintmax_t)bm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* load a batch of masks */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    sm.v = _mm_load_si128((const __m128i *)&mask[48]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(sm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* logical AND them with the packet's mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r1.v = _mm_and_si128(pm.v, sm.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* compare the result with the original mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r2.v = _mm_cmpeq_epi8(sm.v, r1.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* convert into a bitarray */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    bm |= ((uint64_t) _mm_movemask_epi8(r2.v)) << 48;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    SCLogInfo("bm4 %"PRIxMAX, (uintmax_t)bm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    int b = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    for ( ; b < 64; b++){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if (bm & ((uint64_t)1 << b)) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            SCLogInfo("b %02d, set", b);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        } else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            SCLogInfo("b %02d, not set", b);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (!(bm & ((uint64_t)1 << 31)) && !(bm & ((uint64_t)1 << 62))) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    return 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#else
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    return 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#endif
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/**
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 *  \test Test 64 bit SIMD code.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				int SigTestSIMDMask04(void) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#if defined (__SSE3__)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    Vector pm, sm, r1, r2;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    uint64_t bm = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    uint8_t *mask = SCMallocAligned(64, 16);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    memset(mask, 0x01, 64);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mask[31] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mask[62] = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    pm.v = _mm_set1_epi8(0x02);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(pm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* load a batch of masks */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    sm.v = _mm_load_si128((const __m128i *)&mask[0]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(sm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* logical AND them with the packet's mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r1.v = _mm_and_si128(pm.v, sm.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* compare the result with the original mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r2.v = _mm_cmpeq_epi8(sm.v, r1.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* convert into a bitarray */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    bm = ((uint64_t) _mm_movemask_epi8(r2.v));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    SCLogInfo("bm1 %"PRIxMAX, (uintmax_t)bm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* load a batch of masks */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    sm.v = _mm_load_si128((const __m128i *)&mask[16]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(sm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* logical AND them with the packet's mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r1.v = _mm_and_si128(pm.v, sm.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* compare the result with the original mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r2.v = _mm_cmpeq_epi8(sm.v, r1.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* convert into a bitarray */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    bm |= ((uint64_t) _mm_movemask_epi8(r2.v)) << 16;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    SCLogInfo("bm2 %"PRIxMAX, (uintmax_t)bm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* load a batch of masks */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    sm.v = _mm_load_si128((const __m128i *)&mask[32]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(sm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* logical AND them with the packet's mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r1.v = _mm_and_si128(pm.v, sm.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* compare the result with the original mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r2.v = _mm_cmpeq_epi8(sm.v, r1.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* convert into a bitarray */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    bm |= ((uint64_t) _mm_movemask_epi8(r2.v)) << 32;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    SCLogInfo("bm3 %"PRIxMAX, (uintmax_t)bm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* load a batch of masks */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    sm.v = _mm_load_si128((const __m128i *)&mask[48]);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(sm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* logical AND them with the packet's mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r1.v = _mm_and_si128(pm.v, sm.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* compare the result with the original mask */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    r2.v = _mm_cmpeq_epi8(sm.v, r1.v);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    VECTOR_SCLogInfo(r2);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    /* convert into a bitarray */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    bm |= (((uint64_t) _mm_movemask_epi8(r2.v)) << 48);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    SCLogInfo("bm4-total %"PRIxMAX, (uintmax_t)bm);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    int b = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    for ( ; b < 64; b++){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if (bm & ((uint64_t)1 << b)) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            SCLogInfo("b %02d, set", b);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        } else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            SCLogInfo("b %02d, not set", b);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if ((bm & ((uint64_t)1 << 31)) && (bm & ((uint64_t)1 << 62))) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    return 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#else
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    return 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#endif
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#endif /* UNITTESTS */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void SigRegisterTests(void) {
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -10821,6 +11007,8 @@ void SigRegisterTests(void) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    UtRegisterTest("SigTestSIMDMask01", SigTestSIMDMask01, 1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    UtRegisterTest("SigTestSIMDMask02", SigTestSIMDMask02, 1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    UtRegisterTest("SigTestSIMDMask03", SigTestSIMDMask03, 1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    UtRegisterTest("SigTestSIMDMask04", SigTestSIMDMask04, 1);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				#endif /* UNITTESTS */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |