diff options
author | 2016-07-15 16:18:42 +1000 | |
---|---|---|
committer | 2016-07-15 16:18:42 +1000 | |
commit | 7d5da01f947546f9538f2244ceb02a807e7cb5bc (patch) | |
tree | a0b3608afab05e7ab046544f7a135bd126a82271 /src/emu/video | |
parent | 231bfb62379c1b1c21ed8d556e465a96abc5c506 (diff) |
check a bunch more RGB operations in validity (nw)
implement the missing ones in rgbgen
format similar one-liners in a more tabular way
use default copy construct/assign
Diffstat (limited to 'src/emu/video')
-rw-r--r-- | src/emu/video/rgbgen.h | 110 | ||||
-rw-r--r-- | src/emu/video/rgbsse.h | 116 | ||||
-rw-r--r-- | src/emu/video/rgbvmx.h | 9 |
3 files changed, 58 insertions, 177 deletions
diff --git a/src/emu/video/rgbgen.h b/src/emu/video/rgbgen.h index 22cd253b3f8..3b2279a3d01 100644 --- a/src/emu/video/rgbgen.h +++ b/src/emu/video/rgbgen.h @@ -24,6 +24,9 @@ public: rgbaint_t(INT32 a, INT32 r, INT32 g, INT32 b) { set(a, r, g, b); } explicit rgbaint_t(const rgb_t& rgba) { set(rgba); } + rgbaint_t(const rgbaint_t& other) = default; + rgbaint_t &operator=(const rgbaint_t& other) = default; + void set(const rgbaint_t& other) { set(other.m_a, other.m_r, other.m_g, other.m_b); } void set(UINT32 rgba) { set((rgba >> 24) & 0xff, (rgba >> 16) & 0xff, (rgba >> 8) & 0xff, rgba & 0xff); } void set(INT32 a, INT32 r, INT32 g, INT32 b) @@ -212,15 +215,15 @@ public: m_b |= high_mask; } - inline void or_reg(const rgbaint_t& color) - { - or_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); - } + void or_reg(const rgbaint_t& color) { or_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); } + void and_reg(const rgbaint_t& color) { and_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); } + void xor_reg(const rgbaint_t& color) { xor_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); } - inline void or_imm(const INT32 imm) - { - or_imm_rgba(imm, imm, imm, imm); - } + void andnot_reg(const rgbaint_t& color) { and_imm_rgba(~color.m_a, ~color.m_r, ~color.m_g, ~color.m_b); } + + void or_imm(INT32 imm) { or_imm_rgba(imm, imm, imm, imm); } + void and_imm(INT32 imm) { and_imm_rgba(imm, imm, imm, imm); } + void xor_imm(INT32 imm) { xor_imm_rgba(imm, imm, imm, imm); } inline void or_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) { @@ -230,21 +233,6 @@ public: m_b |= b; } - inline void and_reg(const rgbaint_t& color) - { - and_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); - } - - inline void andnot_reg(const rgbaint_t& color) - { - and_imm_rgba(~color.m_a, ~color.m_r, ~color.m_g, ~color.m_b); - } - - inline void and_imm(const INT32 imm) - { - and_imm_rgba(imm, imm, imm, imm); - } - inline void and_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) { m_a &= a; @@ -253,16 +241,6 @@ public: m_b &= b; } - inline void xor_reg(const rgbaint_t& color) - { - xor_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); - } - - inline void xor_imm(const INT32 imm) - { - xor_imm_rgba(imm, imm, imm, imm); - } - inline void xor_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) { m_a ^= a; @@ -328,65 +306,43 @@ public: void scale_add_and_clamp(const rgbaint_t& scale, const rgbaint_t& other); void scale_imm_add_and_clamp(const INT32 scale, const rgbaint_t& other); - inline void cmpeq(const rgbaint_t& value) - { - m_a = (m_a == value.m_a) ? 0xffffffff : 0; - m_r = (m_r == value.m_r) ? 0xffffffff : 0; - m_g = (m_g == value.m_g) ? 0xffffffff : 0; - m_b = (m_b == value.m_b) ? 0xffffffff : 0; - } - - inline void cmpeq_imm(const INT32 value) - { - m_a = (m_a == value) ? 0xffffffff : 0; - m_r = (m_r == value) ? 0xffffffff : 0; - m_g = (m_g == value) ? 0xffffffff : 0; - m_b = (m_b == value) ? 0xffffffff : 0; - } + void cmpeq(const rgbaint_t& value) { cmpeq_imm_rgba(value.m_a, value.m_r, value.m_g, value.m_b); } + void cmpgt(const rgbaint_t& value) { cmpgt_imm_rgba(value.m_a, value.m_r, value.m_g, value.m_b); } + void cmplt(const rgbaint_t& value) { cmplt_imm_rgba(value.m_a, value.m_r, value.m_g, value.m_b); } - inline void cmpgt(const rgbaint_t& value) - { - m_a = (m_a > value.m_a) ? 0xffffffff : 0; - m_r = (m_r > value.m_r) ? 0xffffffff : 0; - m_g = (m_g > value.m_g) ? 0xffffffff : 0; - m_b = (m_b > value.m_b) ? 0xffffffff : 0; - } + void cmpeq_imm(INT32 value) { cmpeq_imm_rgba(value, value, value, value); } + void cmpgt_imm(INT32 value) { cmpgt_imm_rgba(value, value, value, value); } + void cmplt_imm(INT32 value) { cmplt_imm_rgba(value, value, value, value); } - inline void cmpgt_imm(const INT32 value) + void cmpeq_imm_rgba(INT32 a, INT32 r, INT32 g, INT32 b) { - m_a = (m_a > value) ? 0xffffffff : 0; - m_r = (m_r > value) ? 0xffffffff : 0; - m_g = (m_g > value) ? 0xffffffff : 0; - m_b = (m_b > value) ? 0xffffffff : 0; + m_a = (m_a == a) ? 0xffffffff : 0; + m_r = (m_r == r) ? 0xffffffff : 0; + m_g = (m_g == g) ? 0xffffffff : 0; + m_b = (m_b == b) ? 0xffffffff : 0; } - inline void cmplt(const rgbaint_t& value) + void cmpgt_imm_rgba(INT32 a, INT32 r, INT32 g, INT32 b) { - m_a = (m_a < value.m_a) ? 0xffffffff : 0; - m_r = (m_r < value.m_r) ? 0xffffffff : 0; - m_g = (m_g < value.m_g) ? 0xffffffff : 0; - m_b = (m_b < value.m_b) ? 0xffffffff : 0; + m_a = (m_a > a) ? 0xffffffff : 0; + m_r = (m_r > r) ? 0xffffffff : 0; + m_g = (m_g > g) ? 0xffffffff : 0; + m_b = (m_b > b) ? 0xffffffff : 0; } - inline void cmplt_imm(const INT32 value) + void cmplt_imm_rgba(INT32 a, INT32 r, INT32 g, INT32 b) { - m_a = (m_a < value) ? 0xffffffff : 0; - m_r = (m_r < value) ? 0xffffffff : 0; - m_g = (m_g < value) ? 0xffffffff : 0; - m_b = (m_b < value) ? 0xffffffff : 0; + m_a = (m_a < a) ? 0xffffffff : 0; + m_r = (m_r < r) ? 0xffffffff : 0; + m_g = (m_g < g) ? 0xffffffff : 0; + m_b = (m_b < b) ? 0xffffffff : 0; } - inline void merge_alpha(const rgbaint_t& alpha) + void merge_alpha(const rgbaint_t& alpha) { m_a = alpha.m_a; } - rgbaint_t &operator=(const rgbaint_t& other) - { - set(other.m_a, other.m_r, other.m_g, other.m_b); - return *this; - } - rgbaint_t& operator+=(const rgbaint_t& other) { add_imm_rgba(other.m_a, other.m_r, other.m_g, other.m_b); diff --git a/src/emu/video/rgbsse.h b/src/emu/video/rgbsse.h index 6b7c1bd6043..a7ac2ad3fc3 100644 --- a/src/emu/video/rgbsse.h +++ b/src/emu/video/rgbsse.h @@ -34,6 +34,9 @@ public: explicit rgbaint_t(const rgb_t& rgb) { set(rgb); } explicit rgbaint_t(__m128i rgba) { m_value = rgba; } + rgbaint_t(const rgbaint_t& other) = default; + rgbaint_t &operator=(const rgbaint_t& other) = default; + void set(const rgbaint_t& other) { m_value = other.m_value; } void set(UINT32 rgba) { m_value = _mm_and_si128(_mm_set1_epi32(0xff), _mm_set_epi32(rgba >> 24, rgba >> 16, rgba >> 8, rgba)); } void set(INT32 a, INT32 r, INT32 g, INT32 b) { m_value = _mm_set_epi32(a, r, g, b); } @@ -212,55 +215,19 @@ public: m_value = _mm_srai_epi32(m_value, shift); } - inline void or_reg(const rgbaint_t& color2) - { - m_value = _mm_or_si128(m_value, color2.m_value); - } - - inline void or_imm(const INT32 value) - { - m_value = _mm_or_si128(m_value, _mm_set1_epi32(value)); - } - - inline void or_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) - { - m_value = _mm_or_si128(m_value, _mm_set_epi32(a, r, g, b)); - } - - inline void and_reg(const rgbaint_t& color) - { - m_value = _mm_and_si128(m_value, color.m_value); - } - - inline void andnot_reg(const rgbaint_t& color) - { - m_value = _mm_andnot_si128(color.m_value, m_value); - } - - inline void and_imm(const INT32 value) - { - m_value = _mm_and_si128(m_value, _mm_set1_epi32(value)); - } - - inline void and_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) - { - m_value = _mm_and_si128(m_value, _mm_set_epi32(a, r, g, b)); - } + void or_reg(const rgbaint_t& color2) { m_value = _mm_or_si128(m_value, color2.m_value); } + void and_reg(const rgbaint_t& color2) { m_value = _mm_and_si128(m_value, color2.m_value); } + void xor_reg(const rgbaint_t& color2) { m_value = _mm_xor_si128(m_value, color2.m_value); } - inline void xor_reg(const rgbaint_t& color2) - { - m_value = _mm_xor_si128(m_value, color2.m_value); - } + void andnot_reg(const rgbaint_t& color2) { m_value = _mm_andnot_si128(color2.m_value, m_value); } - inline void xor_imm(const INT32 value) - { - m_value = _mm_xor_si128(m_value, _mm_set1_epi32(value)); - } + void or_imm(INT32 value) { m_value = _mm_or_si128(m_value, _mm_set1_epi32(value)); } + void and_imm(INT32 value) { m_value = _mm_and_si128(m_value, _mm_set1_epi32(value)); } + void xor_imm(INT32 value) { m_value = _mm_xor_si128(m_value, _mm_set1_epi32(value)); } - inline void xor_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) - { - m_value = _mm_xor_si128(m_value, _mm_set_epi32(a, r, g, b)); - } + void or_imm_rgba(INT32 a, INT32 r, INT32 g, INT32 b) { m_value = _mm_or_si128(m_value, _mm_set_epi32(a, r, g, b)); } + void and_imm_rgba(INT32 a, INT32 r, INT32 g, INT32 b) { m_value = _mm_and_si128(m_value, _mm_set_epi32(a, r, g, b)); } + void xor_imm_rgba(INT32 a, INT32 r, INT32 g, INT32 b) { m_value = _mm_xor_si128(m_value, _mm_set_epi32(a, r, g, b)); } inline void clamp_and_clear(const UINT32 sign) { @@ -344,56 +311,17 @@ public: clamp_to_uint8(); } - inline void cmpeq(const rgbaint_t& value) - { - m_value = _mm_cmpeq_epi32(m_value, value.m_value); - } - - inline void cmpeq_imm(const INT32 value) - { - m_value = _mm_cmpeq_epi32(m_value, _mm_set1_epi32(value)); - } - - inline void cmpeq_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) - { - m_value = _mm_cmpeq_epi32(m_value, _mm_set_epi32(a, r, g, b)); - } + void cmpeq(const rgbaint_t& value) { m_value = _mm_cmpeq_epi32(m_value, value.m_value); } + void cmpgt(const rgbaint_t& value) { m_value = _mm_cmpgt_epi32(m_value, value.m_value); } + void cmplt(const rgbaint_t& value) { m_value = _mm_cmplt_epi32(m_value, value.m_value); } - inline void cmpgt(const rgbaint_t& value) - { - m_value = _mm_cmpgt_epi32(m_value, value.m_value); - } + void cmpeq_imm(INT32 value) { m_value = _mm_cmpeq_epi32(m_value, _mm_set1_epi32(value)); } + void cmpgt_imm(INT32 value) { m_value = _mm_cmpgt_epi32(m_value, _mm_set1_epi32(value)); } + void cmplt_imm(INT32 value) { m_value = _mm_cmplt_epi32(m_value, _mm_set1_epi32(value)); } - inline void cmpgt_imm(const INT32 value) - { - m_value = _mm_cmpgt_epi32(m_value, _mm_set1_epi32(value)); - } - - inline void cmpgt_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) - { - m_value = _mm_cmpgt_epi32(m_value, _mm_set_epi32(a, r, g, b)); - } - - inline void cmplt(const rgbaint_t& value) - { - m_value = _mm_cmplt_epi32(m_value, value.m_value); - } - - inline void cmplt_imm(const INT32 value) - { - m_value = _mm_cmplt_epi32(m_value, _mm_set1_epi32(value)); - } - - inline void cmplt_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) - { - m_value = _mm_cmplt_epi32(m_value, _mm_set_epi32(a, r, g, b)); - } - - inline rgbaint_t &operator=(const rgbaint_t& other) - { - m_value = other.m_value; - return *this; - } + void cmpeq_imm_rgba(INT32 a, INT32 r, INT32 g, INT32 b) { m_value = _mm_cmpeq_epi32(m_value, _mm_set_epi32(a, r, g, b)); } + void cmpgt_imm_rgba(INT32 a, INT32 r, INT32 g, INT32 b) { m_value = _mm_cmpgt_epi32(m_value, _mm_set_epi32(a, r, g, b)); } + void cmplt_imm_rgba(INT32 a, INT32 r, INT32 g, INT32 b) { m_value = _mm_cmplt_epi32(m_value, _mm_set_epi32(a, r, g, b)); } inline rgbaint_t& operator+=(const rgbaint_t& other) { diff --git a/src/emu/video/rgbvmx.h b/src/emu/video/rgbvmx.h index 4aca3ff8fa9..d4cc5184d69 100644 --- a/src/emu/video/rgbvmx.h +++ b/src/emu/video/rgbvmx.h @@ -34,6 +34,9 @@ public: explicit rgbaint_t(const rgb_t& rgb) { set(rgb); } explicit rgbaint_t(VECS32 rgba) : m_value(rgba) { } + rgbaint_t(const rgbaint_t& other) = default; + rgbaint_t &operator=(const rgbaint_t& other) = default; + void set(const rgbaint_t& other) { m_value = other.m_value; } void set(UINT32 rgba) @@ -545,12 +548,6 @@ public: m_value = VECS32(vec_cmplt(m_value, temp)); } - inline rgbaint_t &operator=(const rgbaint_t& other) - { - m_value = other.m_value; - return *this; - } - inline rgbaint_t& operator+=(const rgbaint_t& other) { m_value = vec_add(m_value, other.m_value); |