Tôi đang sử dụng SSE để xác định xem một hình chữ nhật (quy định bởi bốn int32
giá trị) đã thay đổi 0:Cách hiệu quả nhất để kiểm tra xem tất cả các thành phần __m128i là [sử dụng SSE intrinsics] intrinsics
__m128i oldRect; // contains old left, top, right, bottom packed to 128 bits
__m128i newRect; // contains new left, top, right, bottom packed to 128 bits
__m128i xor = _mm_xor_si128(oldRect, newRect);
Tại thời điểm này, giá trị xor
kết quả sẽ là tất cả các số không nếu hình chữ nhật không thay đổi. Vậy thì cách hiệu quả nhất để xác định điều đó là gì?
Hiện nay tôi đang làm như vậy:
if (xor.m128i_u64[0] | xor.m128i_u64[1])
{
// rectangle changed
}
Nhưng tôi giả sử có một cách thông minh hơn (có thể sử dụng một số lệnh SSE mà tôi đã không tìm thấy chưa).
Tôi đang nhắm mục tiêu SSE4.1 trên x64 và tôi đang viết mã C++ trong Visual Studio 2013.
Tại sao bạn đề cập đến giá trị số nguyên 128 bit dưới dạng 'NULL', là hằng số null * *? –
@KeithThompson 'NULL' là macro mở rộng tới 0. C++ có' nullptr' là hằng số con trỏ null. – d7samurai
'NULL' mở rộng đến một triển khai xác định hằng số con trỏ null C++. Nó * có thể * mở rộng thành 'nullptr'. Ngay cả khi nó xảy ra để mở rộng đến '0', nó không nên được sử dụng như một số nguyên. –