Fix Altivec RGB primitives on newer GCCs. [budge, Vas Crabb]

This commit is contained in:
R. Belmont 2008-12-12 04:20:19 +00:00
parent cd7f972c5e
commit 2c7aed307a

View File

@ -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);
}