diff options
author | 2016-07-11 23:19:04 +1000 | |
---|---|---|
committer | 2016-07-11 23:19:04 +1000 | |
commit | 269ed5c815088e8ab6e3b53aa1db4944c218b23b (patch) | |
tree | 7e6f1a6a3afccba84bdc782e45156f0cd3bedb9f /src/emu/video | |
parent | 066dab4bded8b9b45075bd6669252de28caca9be (diff) |
rgbvmx: use function-style casts, add explicit casts to keep newer GCC happy
Diffstat (limited to 'src/emu/video')
-rw-r--r-- | src/emu/video/rgbvmx.h | 162 |
1 files changed, 83 insertions, 79 deletions
diff --git a/src/emu/video/rgbvmx.h b/src/emu/video/rgbvmx.h index 0c9ca32d47e..663e1c9f5af 100644 --- a/src/emu/video/rgbvmx.h +++ b/src/emu/video/rgbvmx.h @@ -8,8 +8,8 @@ ***************************************************************************/ -#ifndef __RGBVMX__ -#define __RGBVMX__ +#ifndef MAME_EMU_VIDEO_RGBVMX_H +#define MAME_EMU_VIDEO_RGBVMX_H #include <altivec.h> @@ -39,8 +39,8 @@ public: inline void set(UINT32 rgba) { const VECU32 zero = { 0, 0, 0, 0 }; - const VECS8 temp = vec_perm(vec_lde(0, &rgba), zero, vec_lvsl(0, &rgba)); - m_value = vec_mergeh((VECS16)zero, (VECS16)vec_mergeh((VECS8)zero, temp)); + const VECS8 temp = VECS8(vec_perm(vec_lde(0, &rgba), zero, vec_lvsl(0, &rgba))); + m_value = VECS32(vec_mergeh(VECS16(zero), VECS16(vec_mergeh(VECS8(zero), temp)))); } inline void set(INT32 a, INT32 r, INT32 g, INT32 b) @@ -52,14 +52,14 @@ public: inline void set(rgb_t& rgb) { const VECU32 zero = { 0, 0, 0, 0 }; - const VECS8 temp = vec_perm(vec_lde(0, rgb.ptr()), zero, vec_lvsl(0, rgb.ptr())); - m_value = vec_mergeh((VECS16)zero, (VECS16)vec_mergeh((VECS8)zero, temp)); + const VECS8 temp = VECS8(vec_perm(vec_lde(0, rgb.ptr()), zero, vec_lvsl(0, rgb.ptr()))); + m_value = VECS32(vec_mergeh(VECS16(zero), VECS16(vec_mergeh(VECS8(zero), temp)))); } inline rgb_t to_rgba() { - VECU32 temp = vec_packs(m_value, m_value); - temp = vec_packsu((VECS16)temp, (VECS16)temp); + VECU32 temp = VECU32(vec_packs(m_value, m_value)); + temp = VECU32(vec_packsu(VECS16(temp), VECS16(temp))); UINT32 result; vec_ste(temp, 0, &result); return result; @@ -67,8 +67,8 @@ public: inline rgb_t to_rgba_clamp() { - VECU32 temp = vec_packs(m_value, m_value); - temp = vec_packsu((VECS16)temp, (VECS16)temp); + VECU32 temp = VECU32(vec_packs(m_value, m_value)); + temp = VECU32(vec_packsu(VECS16(temp), VECS16(temp))); UINT32 result; vec_ste(temp, 0, &result); return result; @@ -152,28 +152,28 @@ public: inline UINT8 get_a() const { UINT8 result; - vec_ste(vec_splat((VECU8)m_value, 3), 0, &result); + vec_ste(vec_splat(VECU8(m_value), 3), 0, &result); return result; } inline UINT8 get_r() const { UINT8 result; - vec_ste(vec_splat((VECU8)m_value, 7), 0, &result); + vec_ste(vec_splat(VECU8(m_value), 7), 0, &result); return result; } inline UINT8 get_g() const { UINT8 result; - vec_ste(vec_splat((VECU8)m_value, 11), 0, &result); + vec_ste(vec_splat(VECU8(m_value), 11), 0, &result); return result; } inline UINT8 get_b() const { UINT8 result; - vec_ste(vec_splat((VECU8)m_value, 15), 0, &result); + vec_ste(vec_splat(VECU8(m_value), 15), 0, &result); return result; } @@ -208,30 +208,30 @@ public: inline void mul(const rgbaint_t& color) { const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum((VECU16)m_value, (VECU16)vec_rl(color.m_value, shift), vec_splat_u32(0)); - m_value = vec_add(vec_sl(temp, shift), vec_mulo((VECU16)m_value, (VECU16)color.m_value)); + const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(color.m_value, shift)), vec_splat_u32(0)); + m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(color.m_value)))); } inline void mul_imm(const INT32 imm) { - const VECU32 value = { imm, imm, imm, imm }; + const VECU32 value = { UINT32(imm), UINT32(imm), UINT32(imm), UINT32(imm) }; const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum((VECU16)m_value, (VECU16)vec_rl(value, shift), vec_splat_u32(0)); - m_value = vec_add(vec_sl(temp, shift), vec_mulo((VECU16)m_value, (VECU16)value)); + const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(value, shift)), vec_splat_u32(0)); + m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(value)))); } inline void mul_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) { - const VECU32 value = { a, r, g, b }; + const VECU32 value = { UINT32(a), UINT32(r), UINT32(g), UINT32(b) }; const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum((VECU16)m_value, (VECU16)vec_rl(value, shift), vec_splat_u32(0)); - m_value = vec_add(vec_sl(temp, shift), vec_mulo((VECU16)m_value, (VECU16)value)); + const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(value, shift)), vec_splat_u32(0)); + m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(value)))); } inline void shl(const rgbaint_t& shift) { const VECU32 limit = { 32, 32, 32, 32 }; - m_value = vec_and(vec_sl(m_value, (VECU32)shift.m_value), vec_cmpgt(limit, (VECU32)shift.m_value)); + m_value = vec_and(vec_sl(m_value, VECU32(shift.m_value)), vec_cmpgt(limit, VECU32(shift.m_value))); } inline void shl_imm(const UINT8 shift) @@ -243,7 +243,7 @@ public: inline void shr(const rgbaint_t& shift) { const VECU32 limit = { 32, 32, 32, 32 }; - m_value = vec_and(vec_sr(m_value, (VECU32)shift.m_value), vec_cmpgt(limit, (VECU32)shift.m_value)); + m_value = vec_and(vec_sr(m_value, VECU32(shift.m_value)), vec_cmpgt(limit, VECU32(shift.m_value))); } inline void shr_imm(const UINT8 shift) @@ -255,7 +255,7 @@ public: inline void sra(const rgbaint_t& shift) { const VECU32 limit = { 31, 31, 31, 31 }; - m_value = vec_sra(m_value, vec_min((VECU32)shift.m_value, limit)); + m_value = vec_sra(m_value, vec_min(VECU32(shift.m_value), limit)); } inline void sra_imm(const UINT8 shift) @@ -323,27 +323,27 @@ public: inline void clamp_and_clear(const UINT32 sign) { const VECS32 vzero = { 0, 0, 0, 0 }; - VECS32 vsign = { sign, sign, sign, sign }; + VECS32 vsign = { INT32(sign), INT32(sign), INT32(sign), INT32(sign) }; m_value = vec_and(m_value, vec_cmpeq(vec_and(m_value, vsign), vzero)); vsign = vec_nor(vec_sra(vsign, vec_splat_u32(1)), vzero); - const VECS32 mask = vec_cmpgt(m_value, vsign); + const VECS32 mask = VECS32(vec_cmpgt(m_value, vsign)); m_value = vec_or(vec_and(vsign, mask), vec_and(m_value, vec_nor(mask, vzero))); } inline void clamp_to_uint8() { const VECU32 zero = { 0, 0, 0, 0 }; - m_value = vec_packs(m_value, m_value); - m_value = vec_packsu((VECS16)m_value, (VECS16)m_value); - m_value = vec_mergeh((VECU8)zero, (VECU8)m_value); - m_value = vec_mergeh((VECS16)zero, (VECS16)m_value); + m_value = VECS32(vec_packs(m_value, m_value)); + m_value = VECS32(vec_packsu(VECS16(m_value), VECS16(m_value))); + m_value = VECS32(vec_mergeh(VECU8(zero), VECU8(m_value))); + m_value = VECS32(vec_mergeh(VECS16(zero), VECS16(m_value))); } inline void sign_extend(const UINT32 compare, const UINT32 sign) { - const VECS32 compare_vec = { compare, compare, compare, compare }; - const VECS32 compare_mask = vec_cmpeq(vec_and(m_value, compare_vec), compare_vec); - const VECS32 sign_vec = { sign, sign, sign, sign }; + const VECS32 compare_vec = { INT32(compare), INT32(compare), INT32(compare), INT32(compare) }; + const VECS32 compare_mask = VECS32(vec_cmpeq(vec_and(m_value, compare_vec), compare_vec)); + const VECS32 sign_vec = { INT32(sign), INT32(sign), INT32(sign), INT32(sign) }; m_value = vec_or(m_value, vec_and(sign_vec, compare_mask)); } @@ -393,53 +393,53 @@ public: inline void cmpeq(const rgbaint_t& value) { - m_value = vec_cmpeq(m_value, value.m_value); + m_value = VECS32(vec_cmpeq(m_value, value.m_value)); } inline void cmpeq_imm(const INT32 value) { const VECS32 temp = { value, value, value, value }; - m_value = vec_cmpeq(m_value, temp); + m_value = VECS32(vec_cmpeq(m_value, temp)); } inline void cmpeq_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) { const VECS32 temp = { a, r, g, b }; - m_value = vec_cmpeq(m_value, temp); + m_value = VECS32(vec_cmpeq(m_value, temp)); } inline void cmpgt(const rgbaint_t& value) { - m_value = vec_cmpgt(m_value, value.m_value); + m_value = VECS32(vec_cmpgt(m_value, value.m_value)); } inline void cmpgt_imm(const INT32 value) { const VECS32 temp = { value, value, value, value }; - m_value = vec_cmpgt(m_value, temp); + m_value = VECS32(vec_cmpgt(m_value, temp)); } inline void cmpgt_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) { const VECS32 temp = { a, r, g, b }; - m_value = vec_cmpgt(m_value, temp); + m_value = VECS32(vec_cmpgt(m_value, temp)); } inline void cmplt(const rgbaint_t& value) { - m_value = vec_cmplt(m_value, value.m_value); + m_value = VECS32(vec_cmplt(m_value, value.m_value)); } inline void cmplt_imm(const INT32 value) { const VECS32 temp = { value, value, value, value }; - m_value = vec_cmplt(m_value, temp); + m_value = VECS32(vec_cmplt(m_value, temp)); } inline void cmplt_imm_rgba(const INT32 a, const INT32 r, const INT32 g, const INT32 b) { const VECS32 temp = { a, r, g, b }; - m_value = vec_cmplt(m_value, temp); + m_value = VECS32(vec_cmplt(m_value, temp)); } inline rgbaint_t operator=(const rgbaint_t& other) @@ -470,8 +470,8 @@ public: inline rgbaint_t& operator*=(const rgbaint_t& other) { const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum((VECU16)m_value, (VECU16)vec_rl(other.m_value, shift), vec_splat_u32(0)); - m_value = vec_add(vec_sl(temp, shift), vec_mulo((VECU16)m_value, (VECU16)other.m_value)); + const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(other.m_value, shift)), vec_splat_u32(0)); + m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(other.m_value)))); return *this; } @@ -479,14 +479,14 @@ public: { const VECS32 value = { other, other, other, other }; const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum((VECU16)m_value, (VECU16)vec_rl(value, shift), vec_splat_u32(0)); - m_value = vec_add(vec_sl(temp, shift), vec_mulo((VECU16)m_value, (VECU16)value)); + const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(value, shift)), vec_splat_u32(0)); + m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(value)))); return *this; } inline rgbaint_t& operator>>=(const INT32 shift) { - const VECU32 temp = { shift, shift, shift, shift }; + const VECU32 temp = { UINT32(shift), UINT32(shift), UINT32(shift), UINT32(shift) }; m_value = vec_sra(m_value, temp); return *this; } @@ -500,28 +500,28 @@ public: { const VECS32 zero = vec_splat_s32(0); - VECS32 color00 = vec_perm((VECS32)vec_lde(0, &rgb00), zero, vec_lvsl(0, &rgb00)); - VECS32 color01 = vec_perm((VECS32)vec_lde(0, &rgb01), zero, vec_lvsl(0, &rgb01)); - VECS32 color10 = vec_perm((VECS32)vec_lde(0, &rgb10), zero, vec_lvsl(0, &rgb10)); - VECS32 color11 = vec_perm((VECS32)vec_lde(0, &rgb11), zero, vec_lvsl(0, &rgb11)); + VECS32 color00 = vec_perm(VECS32(vec_lde(0, &rgb00)), zero, vec_lvsl(0, &rgb00)); + VECS32 color01 = vec_perm(VECS32(vec_lde(0, &rgb01)), zero, vec_lvsl(0, &rgb01)); + VECS32 color10 = vec_perm(VECS32(vec_lde(0, &rgb10)), zero, vec_lvsl(0, &rgb10)); + VECS32 color11 = vec_perm(VECS32(vec_lde(0, &rgb11)), zero, vec_lvsl(0, &rgb11)); /* interleave color01 and color00 at the byte level */ - color01 = vec_mergeh((VECU8)color01, (VECU8)color00); - color11 = vec_mergeh((VECU8)color11, (VECU8)color10); - color01 = vec_mergeh((VECU8)zero, (VECU8)color01); - color11 = vec_mergeh((VECU8)zero, (VECU8)color11); - color01 = vec_msum((VECS16)color01, scale_table[u], zero); - color11 = vec_msum((VECS16)color11, scale_table[u], zero); + color01 = VECS32(vec_mergeh(VECU8(color01), VECU8(color00))); + color11 = VECS32(vec_mergeh(VECU8(color11), VECU8(color10))); + color01 = VECS32(vec_mergeh(VECU8(zero), VECU8(color01))); + color11 = VECS32(vec_mergeh(VECU8(zero), VECU8(color11))); + color01 = vec_msum(VECS16(color01), scale_table[u], zero); + color11 = vec_msum(VECS16(color11), scale_table[u], zero); color01 = vec_sl(color01, vec_splat_u32(15)); color11 = vec_sr(color11, vec_splat_u32(1)); - color01 = vec_max((VECS16)color01, (VECS16)color11); - color01 = vec_msum((VECS16)color01, scale_table[v], zero); + color01 = VECS32(vec_max(VECS16(color01), VECS16(color11))); + color01 = vec_msum(VECS16(color01), scale_table[v], zero); color01 = vec_sr(color01, vec_splat_u32(15)); - color01 = vec_packs(color01, color01); - color01 = vec_packsu((VECS16)color01, (VECS16)color01); + color01 = VECS32(vec_packs(color01, color01)); + color01 = VECS32(vec_packsu(VECS16(color01), VECS16(color01))); UINT32 result; - vec_ste((VECU32)color01, 0, &result); + vec_ste(VECU32(color01), 0, &result); return result; } @@ -529,22 +529,22 @@ public: { const VECS32 zero = vec_splat_s32(0); - VECS32 color00 = vec_perm((VECS32)vec_lde(0, &rgb00), zero, vec_lvsl(0, &rgb00)); - VECS32 color01 = vec_perm((VECS32)vec_lde(0, &rgb01), zero, vec_lvsl(0, &rgb01)); - VECS32 color10 = vec_perm((VECS32)vec_lde(0, &rgb10), zero, vec_lvsl(0, &rgb10)); - VECS32 color11 = vec_perm((VECS32)vec_lde(0, &rgb11), zero, vec_lvsl(0, &rgb11)); + VECS32 color00 = vec_perm(VECS32(vec_lde(0, &rgb00)), zero, vec_lvsl(0, &rgb00)); + VECS32 color01 = vec_perm(VECS32(vec_lde(0, &rgb01)), zero, vec_lvsl(0, &rgb01)); + VECS32 color10 = vec_perm(VECS32(vec_lde(0, &rgb10)), zero, vec_lvsl(0, &rgb10)); + VECS32 color11 = vec_perm(VECS32(vec_lde(0, &rgb11)), zero, vec_lvsl(0, &rgb11)); /* interleave color01 and color00 at the byte level */ - color01 = vec_mergeh((VECU8)color01, (VECU8)color00); - color11 = vec_mergeh((VECU8)color11, (VECU8)color10); - color01 = vec_mergeh((VECU8)zero, (VECU8)color01); - color11 = vec_mergeh((VECU8)zero, (VECU8)color11); - color01 = vec_msum((VECS16)color01, scale_table[u], zero); - color11 = vec_msum((VECS16)color11, scale_table[u], zero); + color01 = VECS32(vec_mergeh(VECU8(color01), VECU8(color00))); + color11 = VECS32(vec_mergeh(VECU8(color11), VECU8(color10))); + color01 = VECS32(vec_mergeh(VECU8(zero), VECU8(color01))); + color11 = VECS32(vec_mergeh(VECU8(zero), VECU8(color11))); + color01 = vec_msum(VECS16(color01), scale_table[u], zero); + color11 = vec_msum(VECS16(color11), scale_table[u], zero); color01 = vec_sl(color01, vec_splat_u32(15)); color11 = vec_sr(color11, vec_splat_u32(1)); - color01 = vec_max((VECS16)color01, (VECS16)color11); - color01 = vec_msum((VECS16)color01, scale_table[v], zero); + color01 = VECS32(vec_max(VECS16(color01), VECS16(color11))); + color01 = vec_msum(VECS16(color01), scale_table[v], zero); m_value = vec_sr(color01, vec_splat_u32(15)); } @@ -560,11 +560,15 @@ protected: -// altivec.h somehow redefines "bool" in a bad way on PowerPC Mac OS X. really. -#ifdef OSX_PPC +// altivec.h somehow redefines "bool" in a bad way. really. +#ifdef vector #undef vector -#undef pixel +#endif +#ifdef bool #undef bool #endif +#ifdef pixel +#undef pixel +#endif -#endif /* __RGBVMX__ */ +#endif // MAME_EMU_VIDEO_RGBVMX_H |