summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/video
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2016-07-15 16:18:42 +1000
committer Vas Crabb <vas@vastheman.com>2016-07-15 16:18:42 +1000
commit7d5da01f947546f9538f2244ceb02a807e7cb5bc (patch)
treea0b3608afab05e7ab046544f7a135bd126a82271 /src/emu/video
parent231bfb62379c1b1c21ed8d556e465a96abc5c506 (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.h110
-rw-r--r--src/emu/video/rgbsse.h116
-rw-r--r--src/emu/video/rgbvmx.h9
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);