C++로 코딩 된 문자열 일치 알고리즘에서 일부 SSE4.2 intruction을 사용하려고합니다.작은 패턴의 SSE4.2 명령 PCMPESTRM 사용
작은 패턴과 일치시키기 위해이 지침을 사용하는 방법을 이해하지 못하고 누군가가 나를 도와 줄 수 있기를 바랍니다.
코드 예제에서 나는 포장 된 문자열 "antelope"내에서 패턴 "ant"를 찾으려고합니다. 나는 sse4.2 지침을 포함 nmmintrin.h에 대한 #INCLUDE을 가지고이 지금 내 코드를 8.
인덱스에 1을 제외하고 모두 0으로 설정 마스크로 결과에 대한 희망 :
void print128_num(__m128i var)
{
uint8_t *val = (uint8_t*) &var;
printf("Text: %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i \n",
val[0], val[1], val[2], val[3], val[4], val[5],
val[6], val[7], val[8], val[9], val[10], val[11],
val[12], val[13], val[14], val[15]);
}
int main(){
__m128i s = _mm_set_epi8('e','p','o','l','e','t','n','a',' ','n','a',' ','m','a',' ','i');
__m128i p = _mm_set_epi8(0,0,0,0,0,0,0,0,0,0,0,0,0,'t','n','a');
print128_num(s);
print128_num(p);
__m128i res = _mm_cmpestrm(s, 16, p, 3, 0);
print128_num(res);
return 0;
}
초기화 함수가 더 적은 인수를 허용하지 않기 때문에 모든 0을 추가했습니다. 이것이 잘못되었다는 것을 알지만 어떻게해야할지 모르고 몇 가지 절실한 시도를했습니다.
어쨌든 이것은 내가 컴파일하는 방법입니다 : g ++ -g sse4test.cpp -o sse4test -std = C++ -msse4.2
(11)이 내 출력 :
Text: 105 32 97 109 32 97 110 32 97 110 116 101 108 111 112 101
Text: 97 110 116 0 0 0 0 0 0 0 0 0 0 0 0 0
Text: 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
하는 I 정말 이해가 안돼. (마지막 줄).
도움이 될 것입니다.