From 2c7aed307aa9b98db08a87e40d8bed5ed578a8ea Mon Sep 17 00:00:00 2001 From: "R. Belmont" Date: Fri, 12 Dec 2008 04:20:19 +0000 Subject: Fix Altivec RGB primitives on newer GCCs. [budge, Vas Crabb] --- src/emu/video/rgbvmx.h | 64 +++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) (limited to 'src/emu/video/rgbvmx.h') diff --git a/src/emu/video/rgbvmx.h b/src/emu/video/rgbvmx.h index fc83baadbe8..8c70f0597ef 100644 --- a/src/emu/video/rgbvmx.h +++ b/src/emu/video/rgbvmx.h @@ -65,7 +65,7 @@ INLINE void rgba_comp_to_rgbaint(rgbaint *rgb, INT16 a, INT16 r, INT16 g, INT16 INLINE void rgb_to_rgbint(rgbint *rgb, rgb_t color) { vector signed char temp = (vector signed char)vec_perm((vector signed int)vec_lde(0, &color), vec_splat_s32(0), vec_lvsl(0, &color)); - *rgb = vec_mergeh((vector signed char)vec_splat_s32(0), temp); + *rgb = (rgbint)vec_mergeh((vector signed char)vec_splat_s32(0), temp); } @@ -77,7 +77,7 @@ INLINE void rgb_to_rgbint(rgbint *rgb, rgb_t color) INLINE void rgba_to_rgbaint(rgbaint *rgb, rgb_t color) { vector signed char temp = (vector signed char)vec_perm((vector signed int)vec_lde(0, &color), vec_splat_s32(0), vec_lvsl(0, &color)); - *rgb = vec_mergeh((vector signed char)vec_splat_s32(0), temp); + *rgb = (rgbaint)vec_mergeh((vector signed char)vec_splat_s32(0), temp); } @@ -438,19 +438,19 @@ INLINE rgb_t rgb_bilinear_filter(rgb_t rgb00, rgb_t rgb01, rgb_t rgb10, rgb_t rg rgbint color11 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb11), vec_splat_s32(0), vec_lvsl(0, &rgb11)); /* interleave color01 and color00 at the byte level */ - color01 = vec_mergeh((vector signed char)color01, (vector signed char)color00); - color11 = vec_mergeh((vector signed char)color11, (vector signed char)color10); - color01 = vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color01); - color11 = vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color11); - color01 = vec_msum(color01, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); - color11 = vec_msum(color11, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); + color01 = (rgbint)vec_mergeh((vector signed char)color01, (vector signed char)color00); + color11 = (rgbint)vec_mergeh((vector signed char)color11, (vector signed char)color10); + color01 = (rgbint)vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color01); + color11 = (rgbint)vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color11); + color01 = (rgbint)vec_msum(color01, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); + color11 = (rgbint)vec_msum(color11, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); color01 = (rgbint)vec_sr((vector signed int)color01, vec_splat_u32(1)); color11 = (rgbint)vec_sl((vector signed int)color11, vec_splat_u32(15)); color01 = vec_max(color01, color11); - color01 = vec_msum(color01, rgbvmx_statics.scale_table[v], vec_splat_s32(0)); + color01 = (rgbint)vec_msum(color01, rgbvmx_statics.scale_table[v], vec_splat_s32(0)); color01 = (rgbint)vec_sr((vector signed int)color01, vec_splat_u32(15)); color01 = vec_packs((vector signed int)color01, (vector signed int)color01); - color01 = vec_packsu(color01, color01); + color01 = (rgbint)vec_packsu(color01, color01); vec_ste((vector unsigned int)color01, 0, &result); return result; } @@ -470,19 +470,19 @@ INLINE rgb_t rgba_bilinear_filter(rgb_t rgb00, rgb_t rgb01, rgb_t rgb10, rgb_t r rgbaint color11 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb11), vec_splat_s32(0), vec_lvsl(0, &rgb11)); /* interleave color01 and color00 at the byte level */ - color01 = vec_mergeh((vector signed char)color01, (vector signed char)color00); - color11 = vec_mergeh((vector signed char)color11, (vector signed char)color10); - color01 = vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color01); - color11 = vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color11); - color01 = vec_msum(color01, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); - color11 = vec_msum(color11, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); + color01 = (rgbaint)vec_mergeh((vector signed char)color01, (vector signed char)color00); + color11 = (rgbaint)vec_mergeh((vector signed char)color11, (vector signed char)color10); + color01 = (rgbaint)vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color01); + color11 = (rgbaint)vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color11); + color01 = (rgbaint)vec_msum(color01, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); + color11 = (rgbaint)vec_msum(color11, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); color01 = (rgbaint)vec_sr((vector signed int)color01, vec_splat_u32(1)); color11 = (rgbaint)vec_sl((vector signed int)color11, vec_splat_u32(15)); color01 = vec_max(color01, color11); - color01 = vec_msum(color01, rgbvmx_statics.scale_table[v], vec_splat_s32(0)); + color01 = (rgbaint)vec_msum(color01, rgbvmx_statics.scale_table[v], vec_splat_s32(0)); color01 = (rgbaint)vec_sr((vector signed int)color01, vec_splat_u32(15)); color01 = vec_packs((vector signed int)color01, (vector signed int)color01); - color01 = vec_packsu(color01, color01); + color01 = (rgbaint)vec_packsu(color01, color01); vec_ste((vector unsigned int)color01, 0, &result); return result; } @@ -501,16 +501,16 @@ INLINE void rgbint_bilinear_filter(rgbint *color, rgb_t rgb00, rgb_t rgb01, rgb_ rgbint color11 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb11), vec_splat_s32(0), vec_lvsl(0, &rgb11)); /* interleave color01 and color00 at the byte level */ - color01 = vec_mergeh((vector signed char)color01, (vector signed char)color00); - color11 = vec_mergeh((vector signed char)color11, (vector signed char)color10); - color01 = vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color01); - color11 = vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color11); - color01 = vec_msum(color01, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); - color11 = vec_msum(color11, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); + color01 = (rgbint)vec_mergeh((vector signed char)color01, (vector signed char)color00); + color11 = (rgbint)vec_mergeh((vector signed char)color11, (vector signed char)color10); + color01 = (rgbint)vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color01); + color11 = (rgbint)vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color11); + color01 = (rgbint)vec_msum(color01, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); + color11 = (rgbint)vec_msum(color11, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); color01 = (rgbint)vec_sr((vector signed int)color01, vec_splat_u32(1)); color11 = (rgbint)vec_sl((vector signed int)color11, vec_splat_u32(15)); color01 = vec_max(color01, color11); - color01 = vec_msum(color01, rgbvmx_statics.scale_table[v], vec_splat_s32(0)); + color01 = (rgbint)vec_msum(color01, rgbvmx_statics.scale_table[v], vec_splat_s32(0)); color01 = (rgbint)vec_sr((vector signed int)color01, vec_splat_u32(15)); *color = vec_packs((vector signed int)color01, (vector signed int)color01); } @@ -529,16 +529,16 @@ INLINE void rgbaint_bilinear_filter(rgbaint *color, rgb_t rgb00, rgb_t rgb01, rg rgbaint color11 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb11), vec_splat_s32(0), vec_lvsl(0, &rgb11)); /* interleave color01 and color00 at the byte level */ - color01 = vec_mergeh((vector signed char)color01, (vector signed char)color00); - color11 = vec_mergeh((vector signed char)color11, (vector signed char)color10); - color01 = vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color01); - color11 = vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color11); - color01 = vec_msum(color01, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); - color11 = vec_msum(color11, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); + color01 = (rgbaint)vec_mergeh((vector signed char)color01, (vector signed char)color00); + color11 = (rgbaint)vec_mergeh((vector signed char)color11, (vector signed char)color10); + color01 = (rgbaint)vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color01); + color11 = (rgbaint)vec_mergeh((vector signed char)vec_splat_s32(0), (vector signed char)color11); + color01 = (rgbaint)vec_msum(color01, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); + color11 = (rgbaint)vec_msum(color11, rgbvmx_statics.scale_table[u], vec_splat_s32(0)); color01 = (rgbaint)vec_sr((vector signed int)color01, vec_splat_u32(1)); color11 = (rgbaint)vec_sl((vector signed int)color11, vec_splat_u32(15)); color01 = vec_max(color01, color11); - color01 = vec_msum(color01, rgbvmx_statics.scale_table[v], vec_splat_s32(0)); + color01 = (rgbaint)vec_msum(color01, rgbvmx_statics.scale_table[v], vec_splat_s32(0)); color01 = (rgbaint)vec_sr((vector signed int)color01, vec_splat_u32(15)); *color = vec_packs((vector signed int)color01, (vector signed int)color01); } -- cgit v1.2.3-70-g09d2