diff --git a/Utilities/BEType.h b/Utilities/BEType.h index 3913262171..e51be44648 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "types.h" #include "util/endian.hpp" @@ -355,12 +355,12 @@ union alignas(16) v128 bool operator==(const v128& right) const { - return _u64[0] == right._u64[0] && _u64[1] == right._u64[1]; + return _mm_movemask_epi8(v128::eq32(*this, right).vi) == 0xffff; } bool operator!=(const v128& right) const { - return _u64[0] != right._u64[0] || _u64[1] != right._u64[1]; + return !operator==(right); } // result = (~left) & (right) @@ -371,8 +371,7 @@ union alignas(16) v128 void clear() { - _u64[0] = 0; - _u64[1] = 0; + *this = {}; } }; @@ -403,7 +402,7 @@ inline v128 operator^(const v128& left, const v128& right) inline v128 operator~(const v128& other) { - return v128::from64(~other._u64[0], ~other._u64[1]); + return other ^ v128::from32p(UINT32_MAX); // XOR with ones } using stx::se_t; diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 3dbcc8983a..b73059cfe8 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -85,7 +85,7 @@ static FORCE_INLINE bool cmp_rdata(const decltype(spu_thread::rdata)& lhs, const const v128 c = (lhs[4] ^ rhs[4]) | (lhs[5] ^ rhs[5]); const v128 d = (lhs[6] ^ rhs[6]) | (lhs[7] ^ rhs[7]); const v128 r = (a | b) | (c | d); - return !(r._u64[0] | r._u64[1]); + return r == v128{}; } static FORCE_INLINE void mov_rdata_avx(__m256i* dst, const __m256i* src)