Commit f8f64c30 authored by James Zern's avatar James Zern
Browse files

inv_txfm_vsx: fix loads in high-bitdepth

vec_vsx_ld -> load_tran_low

Change-Id: Id3144cdd528d2d406a515e5812e2ea9e4db64bf1
parent 297c110d
......@@ -12,6 +12,7 @@
#include <stdlib.h>
#include <string.h>
#include "vpx_dsp/ppc/bitdepth_conversion_vsx.h"
#include "vpx_dsp/ppc/types_vsx.h"
#include "./vpx_dsp_rtcd.h"
......@@ -83,8 +84,8 @@ void vpx_idct4x4_16_add_vsx(const tran_low_t *input, uint8_t *dest,
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 };
uint8x16_t mask1 = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 };
int16x8_t v0 = vec_vsx_ld(0, input);
int16x8_t v1 = vec_vsx_ld(16, input);
int16x8_t v0 = load_tran_low(0, input);
int16x8_t v1 = load_tran_low(8 * sizeof(*input), input);
int16x8_t t0 = vec_mergeh(v0, v1);
int16x8_t t1 = vec_mergel(v0, v1);
......@@ -235,14 +236,14 @@ void vpx_idct8x8_64_add_vsx(const tran_low_t *input, uint8_t *dest,
int16x8_t step0, step1, step2, step3, step4, step5, step6, step7;
int16x8_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp16_0, tmp16_1,
tmp16_2, tmp16_3;
int16x8_t src0 = vec_vsx_ld(0, input);
int16x8_t src1 = vec_vsx_ld(16, input);
int16x8_t src2 = vec_vsx_ld(2 * 16, input);
int16x8_t src3 = vec_vsx_ld(3 * 16, input);
int16x8_t src4 = vec_vsx_ld(4 * 16, input);
int16x8_t src5 = vec_vsx_ld(5 * 16, input);
int16x8_t src6 = vec_vsx_ld(6 * 16, input);
int16x8_t src7 = vec_vsx_ld(7 * 16, input);
int16x8_t src0 = load_tran_low(0, input);
int16x8_t src1 = load_tran_low(8 * sizeof(*input), input);
int16x8_t src2 = load_tran_low(16 * sizeof(*input), input);
int16x8_t src3 = load_tran_low(24 * sizeof(*input), input);
int16x8_t src4 = load_tran_low(32 * sizeof(*input), input);
int16x8_t src5 = load_tran_low(40 * sizeof(*input), input);
int16x8_t src6 = load_tran_low(48 * sizeof(*input), input);
int16x8_t src7 = load_tran_low(56 * sizeof(*input), input);
uint8x16_t dest0 = vec_vsx_ld(0, dest);
uint8x16_t dest1 = vec_vsx_ld(stride, dest);
uint8x16_t dest2 = vec_vsx_ld(2 * stride, dest);
......@@ -295,24 +296,24 @@ void vpx_idct8x8_64_add_vsx(const tran_low_t *input, uint8_t *dest,
vec_vsx_st(xxpermdi(output3, dest7, 3), 7 * stride, dest);
}
#define LOAD_INPUT16(source, offset, step, in0, in1, in2, in3, in4, in5, in6, \
in7, in8, in9, inA, inB, inC, inD, inE, inF) \
in0 = vec_vsx_ld(offset, source); \
in1 = vec_vsx_ld(step + offset, source); \
in2 = vec_vsx_ld(2 * step + offset, source); \
in3 = vec_vsx_ld(3 * step + offset, source); \
in4 = vec_vsx_ld(4 * step + offset, source); \
in5 = vec_vsx_ld(5 * step + offset, source); \
in6 = vec_vsx_ld(6 * step + offset, source); \
in7 = vec_vsx_ld(7 * step + offset, source); \
in8 = vec_vsx_ld(8 * step + offset, source); \
in9 = vec_vsx_ld(9 * step + offset, source); \
inA = vec_vsx_ld(10 * step + offset, source); \
inB = vec_vsx_ld(11 * step + offset, source); \
inC = vec_vsx_ld(12 * step + offset, source); \
inD = vec_vsx_ld(13 * step + offset, source); \
inE = vec_vsx_ld(14 * step + offset, source); \
inF = vec_vsx_ld(15 * step + offset, source);
#define LOAD_INPUT16(load, source, offset, step, in0, in1, in2, in3, in4, in5, \
in6, in7, in8, in9, inA, inB, inC, inD, inE, inF) \
in0 = load(offset, source); \
in1 = load((step) + (offset), source); \
in2 = load(2 * (step) + (offset), source); \
in3 = load(3 * (step) + (offset), source); \
in4 = load(4 * (step) + (offset), source); \
in5 = load(5 * (step) + (offset), source); \
in6 = load(6 * (step) + (offset), source); \
in7 = load(7 * (step) + (offset), source); \
in8 = load(8 * (step) + (offset), source); \
in9 = load(9 * (step) + (offset), source); \
inA = load(10 * (step) + (offset), source); \
inB = load(11 * (step) + (offset), source); \
inC = load(12 * (step) + (offset), source); \
inD = load(13 * (step) + (offset), source); \
inE = load(14 * (step) + (offset), source); \
inF = load(15 * (step) + (offset), source);
#define STEP16_1(inpt0, inpt1, outpt0, outpt1, cospi) \
tmp16_0 = vec_mergeh(inpt0, inpt1); \
......@@ -507,8 +508,9 @@ void vpx_idct16x16_256_add_vsx(const tran_low_t *input, uint8_t *dest,
// transform rows
// load and transform the upper half of 16x16 matrix
LOAD_INPUT16(input, 0, 16, src00, src10, src01, src11, src02, src12, src03,
src13, src04, src14, src05, src15, src06, src16, src07, src17);
LOAD_INPUT16(load_tran_low, input, 0, 8 * sizeof(*input), src00, src10, src01,
src11, src02, src12, src03, src13, src04, src14, src05, src15,
src06, src16, src07, src17);
TRANSPOSE8x8(src00, src01, src02, src03, src04, src05, src06, src07, tmp00,
tmp01, tmp02, tmp03, tmp04, tmp05, tmp06, tmp07);
TRANSPOSE8x8(src10, src11, src12, src13, src14, src15, src16, src17, tmp10,
......@@ -523,7 +525,8 @@ void vpx_idct16x16_256_add_vsx(const tran_low_t *input, uint8_t *dest,
tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17);
// load and transform the lower half of 16x16 matrix
LOAD_INPUT16(input, 16 * 16, 16, src20, src30, src21, src31, src22, src32,
LOAD_INPUT16(load_tran_low, input, 8 * 8 * 2 * sizeof(*input),
8 * sizeof(*input), src20, src30, src21, src31, src22, src32,
src23, src33, src24, src34, src25, src35, src26, src36, src27,
src37);
TRANSPOSE8x8(src20, src21, src22, src23, src24, src25, src26, src27, tmp20,
......@@ -552,8 +555,9 @@ void vpx_idct16x16_256_add_vsx(const tran_low_t *input, uint8_t *dest,
src36, src37);
// load dest
LOAD_INPUT16(dest, 0, stride, dest0, dest1, dest2, dest3, dest4, dest5, dest6,
dest7, dest8, dest9, destA, destB, destC, destD, destE, destF);
LOAD_INPUT16(vec_vsx_ld, dest, 0, stride, dest0, dest1, dest2, dest3, dest4,
dest5, dest6, dest7, dest8, dest9, destA, destB, destC, destD,
destE, destF);
PIXEL_ADD_STORE16(src00, src10, dest0, 0);
PIXEL_ADD_STORE16(src01, src11, dest1, stride);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment