Unified · Split
| @@ -101,70 +101,69 @@ static void FUNC(hScale_real)(SwsContext *c, int16_t *dst, int dstW, · 100 unmodified lines | |||
| 101 | const uint8_t *src, const int16_t *filter, | 101 | const uint8_t *src, const int16_t *filter, |
| 102 | const int32_t *filterPos, int filterSize) | 102 | const int32_t *filterPos, int filterSize) |
| 103 | { | 103 | { |
| 104 | register int i; | ||
| 105 | LOCAL_ALIGNED(16, int, tempo, [4]); | 104 | LOCAL_ALIGNED(16, int, tempo, [4]); |
| 106 | 105 | ||
| 107 | switch (filterSize) { | 106 | switch (filterSize) { |
| 108 | case 4: | 107 | case 4: |
| 109 | for (i = 0; i < dstW; i++) { | 108 | for (register int i = 0; i < dstW; i++) { |
| 110 | register int srcPos = filterPos[i]; | 109 | register int srcPos = filterPos[i]; |
| 111 | 110 | ||
| 112 | vector unsigned char src_vF = unaligned_load(srcPos, src); | 111 | vector unsigned char src_vF = unaligned_load(srcPos, src); |
| 113 | vector signed short src_v, filter_v; | 112 | vector signed short src_v, filter_v; |
| 114 | vector signed int val_vEven, val_s; | 113 | vector signed int val_vEven, val_s; |
| 115 | src_v = // vec_unpackh sign-extends... | 114 | src_v = // vec_unpackh sign-extends... |
| 116 | (vector signed short)(VEC_MERGEH((vector unsigned char)vzero, src_vF)); | 115 | (vector signed short)(VEC_MERGEH((vector unsigned char)vzero, src_vF)); |
| 117 | // now put our elements in the even slots | 116 | // now put our elements in the even slots |
| 118 | src_v = vec_mergeh(src_v, (vector signed short)vzero); | 117 | src_v = vec_mergeh(src_v, (vector signed short)vzero); |
| 119 | GET_VF4(i, filter_v, filter); | 118 | GET_VF4(i, filter_v, filter); |
| 120 | val_vEven = vec_mule(src_v, filter_v); | 119 | val_vEven = vec_mule(src_v, filter_v); |
| 121 | val_s = vec_sums(val_vEven, vzero); | 120 | val_s = vec_sums(val_vEven, vzero); |
| 122 | vec_st(val_s, 0, tempo); | 121 | vec_st(val_s, 0, tempo); |
| 123 | dst[i] = FFMIN(tempo[3] >> 7, (1 << 15) - 1); | 122 | dst[i] = FFMIN(tempo[3] >> 7, (1 << 15) - 1); |
| 124 | } | 123 | } |
| 125 | break; | 124 | break; |
| 126 | case 8: | 125 | case 8: |
| 127 | for (i = 0; i < dstW; i++) { | 126 | for (register int i = 0; i < dstW; i++) { |
| 128 | register int srcPos = filterPos[i]; | 127 | register int srcPos = filterPos[i]; |
| 129 | vector unsigned char src_vF, av_unused src_v0, av_unused src_v1; | 128 | vector unsigned char src_vF, av_unused src_v0, av_unused src_v1; |
| 130 | vector unsigned char av_unused permS; | 129 | vector unsigned char av_unused permS; |
| 131 | vector signed short src_v, filter_v; | 130 | vector signed short src_v, filter_v; |
| 132 | vector signed int val_v, val_s; | 131 | vector signed int val_v, val_s; |
| 133 | FIRST_LOAD(src_v0, srcPos, src, permS); | 132 | FIRST_LOAD(src_v0, srcPos, src, permS); |
| 134 | LOAD_SRCV8(srcPos, 0, src, permS, src_v0, src_v1, src_vF); | 133 | LOAD_SRCV8(srcPos, 0, src, permS, src_v0, src_v1, src_vF); |
| 135 | src_v = // vec_unpackh sign-extends... | 134 | src_v = // vec_unpackh sign-extends... |
| 136 | (vector signed short)(VEC_MERGEH((vector unsigned char)vzero, src_vF)); | 135 | (vector signed short)(VEC_MERGEH((vector unsigned char)vzero, src_vF)); |
| 137 | filter_v = vec_ld(i << 4, filter); | 136 | filter_v = vec_ld(i << 4, filter); |
| 138 | val_v = vec_msums(src_v, filter_v, (vector signed int)vzero); | 137 | val_v = vec_msums(src_v, filter_v, (vector signed int)vzero); |
| 139 | val_s = vec_sums(val_v, vzero); | 138 | val_s = vec_sums(val_v, vzero); |
| 140 | vec_st(val_s, 0, tempo); | 139 | vec_st(val_s, 0, tempo); |
| 141 | dst[i] = FFMIN(tempo[3] >> 7, (1 << 15) - 1); | 140 | dst[i] = FFMIN(tempo[3] >> 7, (1 << 15) - 1); |
| 142 | } | 141 | } |
| 143 | break; | 142 | break; |
| 144 | 143 | ||
| 145 | case 16: | 144 | case 16: |
| 146 | for (i = 0; i < dstW; i++) { | 145 | for (register int i = 0; i < dstW; i++) { |
| 147 | register int srcPos = filterPos[i]; | 146 | register int srcPos = filterPos[i]; |
| 148 | 147 | ||
| 149 | vector unsigned char src_vF = unaligned_load(srcPos, src); | 148 | vector unsigned char src_vF = unaligned_load(srcPos, src); |
| 150 | vector signed short src_vA = // vec_unpackh sign-extends... | 149 | vector signed short src_vA = // vec_unpackh sign-extends... |
| 151 | (vector signed short)(VEC_MERGEH((vector unsigned char)vzero, src_vF)); | 150 | (vector signed short)(VEC_MERGEH((vector unsigned char)vzero, src_vF)); |
| 152 | vector signed short src_vB = // vec_unpackh sign-extends... | 151 | vector signed short src_vB = // vec_unpackh sign-extends... |
| 153 | (vector signed short)(VEC_MERGEL((vector unsigned char)vzero, src_vF)); | 152 | (vector signed short)(VEC_MERGEL((vector unsigned char)vzero, src_vF)); |
| 154 | vector signed short filter_v0 = vec_ld(i << 5, filter); | 153 | vector signed short filter_v0 = vec_ld(i << 5, filter); |
| 155 | vector signed short filter_v1 = vec_ld((i << 5) + 16, filter); | 154 | vector signed short filter_v1 = vec_ld((i << 5) + 16, filter); |
| 156 | 155 | ||
| 157 | vector signed int val_acc = vec_msums(src_vA, filter_v0, (vector signed int)vzero); | 156 | vector signed int val_acc = vec_msums(src_vA, filter_v0, (vector signed int)vzero); |
| 158 | vector signed int val_v = vec_msums(src_vB, filter_v1, val_acc); | 157 | vector signed int val_v = vec_msums(src_vB, filter_v1, val_acc); |
| 159 | 158 | ||
| 160 | vector signed int val_s = vec_sums(val_v, vzero); | 159 | vector signed int val_s = vec_sums(val_v, vzero); |
| 161 | 160 | ||
| 162 | VEC_ST(val_s, 0, tempo); | 161 | VEC_ST(val_s, 0, tempo); |
| 163 | dst[i] = FFMIN(tempo[3] >> 7, (1 << 15) - 1); | 162 | dst[i] = FFMIN(tempo[3] >> 7, (1 << 15) - 1); |
| 164 | } | 163 | } |
| 165 | break; | 164 | break; |
| 166 | 165 | ||
| 167 | default: | 166 | default: |
| 168 | for (register int i = 0; i < dstW; i++) { | 167 | for (register int i = 0; i < dstW; i++) { |
| 169 | register int j; | 168 | register int j; |
| 170 | register int srcPos = filterPos[i]; | 169 | register int srcPos = filterPos[i]; |
| @@ -174,5 +173,5 @@ static void FUNC(hScale_real)(SwsContext *c, int16_t *dst, int dstW, · 3 unmodified lines | |||
| 174 | dst[i] = FFMIN(val >> 7, (1 << 15) - 1); | 173 | dst[i] = FFMIN(val >> 7, (1 << 15) - 1); |
| 175 | } | 174 | } |
| 176 | break; | 175 | break; |
| 177 | } | 176 | } |
| 178 | } | 177 | } |