덧셈

__m128i R = _mm_add_epi16(__m128i a, __m128i b)

 

뺄셈

__m128i R = _mm_sub_epi16(__m128i a, __m128i b)

 

곱셈

__m128i R = _mm_mullo_epi16(__m128i a, __m128i b)

 

나눗셈(지원 X)

 

최댓값(Max)

__m128i R = _mm_max_epi16(__m128i a, __m128i b)

 

최솟값(Min)

__m128i R = _mm_min_epi16(__m128i a, __m128i b)

 

평균

__m128i R = _mm_avg_epi16(__m128i a, __m128i b)

 

사용 예제

#include <iostream>
#include <afx.h>
using namespace std;
#include <emmintrin.h>

int main(int argc, char* argv[])
{
	__declspec(align(16)) short A[8] = { 2, 4, 6, 8, 10, 8, 6, 4 };
	__declspec(align(16)) short B[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
	__declspec(align(16)) short R[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };

	__m128i xmmA = _mm_load_si128((__m128i*)A);
	__m128i xmmB = _mm_load_si128((__m128i*)B);

	__m128i xmmR = _mm_add_epi16(xmmA, xmmB);	//덧셈 연산

	_mm_store_si128((__m128i*)R, xmmR);			//결과 출력
	cout << "Add : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	xmmR = _mm_sub_epi16(xmmA, xmmB);	//뺄셈 연산

	_mm_store_si128((__m128i*)R, xmmR);			//결과 출력
	cout << "Sub : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	xmmR = _mm_mullo_epi16(xmmA, xmmB);	//곱셈 연산

	_mm_store_si128((__m128i*)R, xmmR);			//결과 출력
	cout << "Mul : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	xmmR = _mm_max_epi16(xmmA, xmmB);	//Max값 계산

	_mm_store_si128((__m128i*)R, xmmR);			//결과 출력
	cout << "Max : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	xmmR = _mm_min_epi16(xmmA, xmmB);	//Min값 계산

	_mm_store_si128((__m128i*)R, xmmR);			//결과 출력
	cout << "Min : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	xmmR = _mm_avg_epu16(xmmA, xmmB);	//평균 계산

	_mm_store_si128((__m128i*)R, xmmR);			//결과 출력
	cout << "Avg : " << R[7] << ", " << R[6] << ", " << R[5] << ", " << R[4] << ", " << R[3] << ", " << R[2] << ", " << R[1] << ", " << R[0] << endl;

	return 0;
}

실행 결과

Posted by pi92

블로그 이미지
pi92

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.7
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함