mirror of
https://github.com/holub/mame
synced 2025-05-23 14:19:01 +03:00
Fix Altivec RGB primitives on newer GCCs. [budge, Vas Crabb]
This commit is contained in:
parent
cd7f972c5e
commit
2c7aed307a
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user