From 93c7761d9d4a0da8a9491cc06b310cc6d4019f5f Mon Sep 17 00:00:00 2001 From: Ted Green Date: Fri, 29 Sep 2017 10:32:33 -0600 Subject: rgbsse: Rather simple performance optimization. (nw) --- src/emu/validity.cpp | 8 ++++++++ src/emu/video/rgbsse.h | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp index 618214970c2..b7b6f0d6f90 100644 --- a/src/emu/validity.cpp +++ b/src/emu/validity.cpp @@ -597,6 +597,14 @@ void validity_checker::validate_rgb() rgb.set(rgbaint_t(expected_a, expected_r, expected_g, expected_b)); check_expected("rgbaint_t::set(rgbaint_t)"); + packed = random_i32(); + expected_a = packed.a(); + expected_r = packed.r(); + expected_g = packed.g(); + expected_b = packed.b(); + rgb.set(packed); + check_expected("rgbaint_t::set(const rgb_t& rgb)"); + // check construct/assign expected_a = random_i32(); expected_r = random_i32(); diff --git a/src/emu/video/rgbsse.h b/src/emu/video/rgbsse.h index ce7c848ae4d..68e57bca7fd 100644 --- a/src/emu/video/rgbsse.h +++ b/src/emu/video/rgbsse.h @@ -38,9 +38,9 @@ public: rgbaint_t &operator=(const rgbaint_t& other) = default; void set(const rgbaint_t& other) { m_value = other.m_value; } - void set(u32 rgba) { m_value = _mm_and_si128(_mm_set1_epi32(0xff), _mm_set_epi32(rgba >> 24, rgba >> 16, rgba >> 8, rgba)); } + void set(const u32& rgba) { m_value = _mm_unpacklo_epi16(_mm_unpacklo_epi8(_mm_cvtsi32_si128(rgba), _mm_setzero_si128()), _mm_setzero_si128()); } void set(s32 a, s32 r, s32 g, s32 b) { m_value = _mm_set_epi32(a, r, g, b); } - void set(const rgb_t& rgb) { m_value = _mm_unpacklo_epi16(_mm_unpacklo_epi8(_mm_cvtsi32_si128(rgb), _mm_setzero_si128()), _mm_setzero_si128()); } + void set(const rgb_t& rgb) { set((const u32&) rgb); } inline rgb_t to_rgba() const { -- cgit v1.2.3