当使用 SSE2 指令(例如PADDD
,_mm_add_epi32
内在指令)时,有没有办法检查是否有任何操作溢出?
我认为在溢出后可能会设置 MXCSR 控制寄存器上的标志,但我没有看到这种情况发生。例如,_mm_getcsr()
在以下两种情况下打印相同的值 (8064):
#include <iostream>
#include <emmintrin.h>
using namespace std;
void main()
{
__m128i a = _mm_set_epi32(1, 0, 0, 0);
__m128i b = _mm_add_epi32(a, a);
cout << "MXCSR: " << _mm_getcsr() << endl;
cout << "Result: " << b.m128i_i32[3] << endl;
__m128i c = _mm_set_epi32((1<<31)-1, 3, 2, 1);
__m128i d = _mm_add_epi32(c, c);
cout << "MXCSR: " << _mm_getcsr() << endl;
cout << "Result: " << d.m128i_i32[3] << endl;
}
是否有其他方法可以检查 SSE2 是否溢出?