summaryrefslogtreecommitdiff
path: root/powerpc/filter_vsx_intrinsics.c
diff options
context:
space:
mode:
authorVadim Barkov <neverscaired@gmail.com>2017-02-02 22:37:36 +0000
committerVadim Barkov <neverscaired@gmail.com>2017-02-02 22:37:36 +0000
commit58e9d5d59d5defad892a8dc21c3401c075720989 (patch)
tree83992e7f88f023bbf5d7b543b592bcd41907c94c /powerpc/filter_vsx_intrinsics.c
parentae15e839d9aafd26d0db305fe6ba7fa0bd55c973 (diff)
downloadlibpng-58e9d5d59d5defad892a8dc21c3401c075720989.tar.gz
Refactoring
Diffstat (limited to 'powerpc/filter_vsx_intrinsics.c')
-rw-r--r--powerpc/filter_vsx_intrinsics.c80
1 files changed, 31 insertions, 49 deletions
diff --git a/powerpc/filter_vsx_intrinsics.c b/powerpc/filter_vsx_intrinsics.c
index c6426e8d9..8e649a192 100644
--- a/powerpc/filter_vsx_intrinsics.c
+++ b/powerpc/filter_vsx_intrinsics.c
@@ -39,18 +39,25 @@
* ( this is taken from ../intel/filter_sse2_intrinsics.c )
*/
+#define declare_common_vars(row_info,row,prev_row) \
+ png_size_t i;\
+ png_bytep rp = row;\
+ png_const_bytep pp = prev_row;\
+ png_size_t unaligned_top = 16 - (((png_size_t)row % 16));\
+ png_size_t istop;\
+ if(unaligned_top == 16)\
+ unaligned_top = 0;\
+ istop = row_info->rowbytes - unaligned_top;
+
+
void png_read_filter_row_up_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t i;
- png_size_t unaligned_top = 16 - ((png_size_t)row % 16);
- png_size_t istop = row_info->rowbytes - unaligned_top;
- png_bytep rp = row;
- png_const_bytep pp = prev_row;
-
vector unsigned char rp_vec;
vector unsigned char pp_vec;
+ declare_common_vars(row_info,row,prev_row)
+
/* Altivec operations require 16-byte aligned data
* but input can be unaligned. So we calculate
* unaligned part as usual.
@@ -120,18 +127,16 @@ void png_read_filter_row_up_vsx(png_row_infop row_info, png_bytep row,
void png_read_filter_row_sub4_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t i;
- png_size_t unaligned_top = 16 - ((png_size_t)row % 16);
- png_size_t istop = row_info->rowbytes - unaligned_top;
-
const unsigned int bpp = 4;
- png_bytep rp = row + bpp;
vector unsigned char rp_vec;
vector unsigned char part_vec;
vector unsigned char zero_vec = {0};
- PNG_UNUSED(prev_row)
+ declare_common_vars(row_info,row,prev_row)
+ rp += bpp;
+
+ PNG_UNUSED(pp)
/* Altivec operations require 16-byte aligned data
* but input can be unaligned. So we calculate
@@ -177,18 +182,15 @@ void png_read_filter_row_sub4_vsx(png_row_infop row_info, png_bytep row,
void png_read_filter_row_sub3_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
- png_size_t i;
- png_size_t unaligned_top = 16 - ((png_size_t)row % 16);
- png_size_t istop = row_info->rowbytes - unaligned_top;
-
const unsigned int bpp = 3;
- png_bytep rp = row + bpp;
vector unsigned char rp_vec;
vector unsigned char part_vec;
vector unsigned char zero_vec = {0};
-
- PNG_UNUSED(prev_row)
+
+ declare_common_vars(row_info,row,prev_row)
+ rp += bpp;
+ PNG_UNUSED(pp)
/* Altivec operations require 16-byte aligned data
* but input can be unaligned. So we calculate
@@ -242,14 +244,7 @@ void png_read_filter_row_avg4_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
const unsigned int bpp = 4;
- png_size_t i;
-
- png_size_t unaligned_top = 16 - ((png_size_t)row % 16);
- png_size_t istop = row_info->rowbytes - unaligned_top;
-
- png_bytep rp = row;
- png_const_bytep pp = prev_row;
-
+
vector unsigned char rp_vec;
vector unsigned char pp_vec;
vector unsigned char pp_part_vec;
@@ -257,6 +252,8 @@ void png_read_filter_row_avg4_vsx(png_row_infop row_info, png_bytep row,
vector unsigned char avg_vec;
vector unsigned char zero_vec = {0};
+ declare_common_vars(row_info,row,prev_row)
+
for (i = 0; i < bpp; i++)
{
*rp = (png_byte)(((int)(*rp) +
@@ -332,14 +329,7 @@ void png_read_filter_row_avg3_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
const unsigned int bpp = 3;
- png_size_t i;
-
- png_size_t unaligned_top = 16 - ((png_size_t)row % 16);
- png_size_t istop = row_info->rowbytes - unaligned_top;
-
- png_bytep rp = row;
- png_const_bytep pp = prev_row;
-
+
vector unsigned char rp_vec;
vector unsigned char pp_vec;
vector unsigned char pp_part_vec;
@@ -347,6 +337,8 @@ void png_read_filter_row_avg3_vsx(png_row_infop row_info, png_bytep row,
vector unsigned char avg_vec;
vector unsigned char zero_vec = {0};
+ declare_common_vars(row_info,row,prev_row)
+
for (i = 0; i < bpp; i++)
{
*rp = (png_byte)(((int)(*rp) +
@@ -446,13 +438,6 @@ void png_read_filter_row_paeth4_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
const unsigned int bpp = 4;
- png_size_t i;
-
- png_size_t unaligned_top = 16 - ((png_size_t)row % 16);
- png_size_t istop = row_info->rowbytes - unaligned_top;
-
- png_bytep rp = row;
- png_const_bytep pp = prev_row;
int a, b, c, pa, pb, pc, p;
vector unsigned char rp_vec;
@@ -461,6 +446,8 @@ void png_read_filter_row_paeth4_vsx(png_row_infop row_info, png_bytep row,
vector signed char pa_vec,pb_vec,pc_vec,smallest_vec;
vector unsigned char zero_vec = {0};
+ declare_common_vars(row_info,row,prev_row)
+
/* Process the first pixel in the row completely (this is the same as 'up'
* because there is only one candidate predictor for the first row).
*/
@@ -559,13 +546,6 @@ void png_read_filter_row_paeth3_vsx(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
const unsigned int bpp = 3;
- png_size_t i;
-
- png_size_t unaligned_top = 16 - ((png_size_t)row % 16);
- png_size_t istop = row_info->rowbytes - unaligned_top;
-
- png_bytep rp = row;
- png_const_bytep pp = prev_row;
int a, b, c, pa, pb, pc, p;
vector unsigned char rp_vec;
@@ -574,6 +554,8 @@ void png_read_filter_row_paeth3_vsx(png_row_infop row_info, png_bytep row,
vector signed char pa_vec,pb_vec,pc_vec,smallest_vec;
vector unsigned char zero_vec = {0};
+ declare_common_vars(row_info,row,prev_row)
+
/* Process the first pixel in the row completely (this is the same as 'up'
* because there is only one candidate predictor for the first row).
*/