| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/gui/painting/qimagescale_sse4.cpp | 
| Switch to Source code | Preprocessed file | 
| Line | Source | Count | ||||||
|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||
| 2 | - | |||||||
| 3 | - | |||||||
| 4 | - | |||||||
| 5 | - | |||||||
| 6 | using namespace QImageScale; | - | ||||||
| 7 | - | |||||||
| 8 | inline static __m128i qt_qimageScaleAARGBA_helper(const unsigned int *pix, int xyap, int Cxy, int step, const __m128i vxyap, const __m128i vCxy) | - | ||||||
| 9 | { | - | ||||||
| 10 | __m128i vpix = _mm_cvtepu8_epi32(_mm_cvtsi32_si128(*pix)); | - | ||||||
| 11 | __m128i vx = _mm_mullo_epi32(vpix, vxyap); | - | ||||||
| 12 | int i; | - | ||||||
| 13 |     for (i = (1 << 14) - xyap; i > Cxy
  | 0 | ||||||
| 14 | pix += step; | - | ||||||
| 15 | vpix = _mm_cvtepu8_epi32(_mm_cvtsi32_si128(*pix)); | - | ||||||
| 16 | vx = _mm_add_epi32(vx, _mm_mullo_epi32(vpix, vCxy)); | - | ||||||
| 17 |     } never executed:  end of block | 0 | ||||||
| 18 | pix += step; | - | ||||||
| 19 | vpix = _mm_cvtepu8_epi32(_mm_cvtsi32_si128(*pix)); | - | ||||||
| 20 | vx = _mm_add_epi32(vx, _mm_mullo_epi32(vpix, _mm_set1_epi32(i))); | - | ||||||
| 21 |     return never executed:   vx;return vx;never executed:  return vx; | 0 | ||||||
| 22 | } | - | ||||||
| 23 | - | |||||||
| 24 | template<bool RGB> | - | ||||||
| 25 | void qt_qimageScaleAARGBA_up_x_down_y_sse4(QImageScaleInfo *isi, unsigned int *dest, | - | ||||||
| 26 | int dw, int dh, int dow, int sow) | - | ||||||
| 27 | { | - | ||||||
| 28 | const unsigned int **ypoints = isi->ypoints; | - | ||||||
| 29 | int *xpoints = isi->xpoints; | - | ||||||
| 30 | int *xapoints = isi->xapoints; | - | ||||||
| 31 | int *yapoints = isi->yapoints; | - | ||||||
| 32 | - | |||||||
| 33 | const __m128i v256 = _mm_set1_epi32(256); | - | ||||||
| 34 | - | |||||||
| 35 | - | |||||||
| 36 |     for (int y = 0; y < dh
  | 0 | ||||||
| 37 | int Cy = yapoints[y] >> 16; | - | ||||||
| 38 | int yap = yapoints[y] & 0xffff; | - | ||||||
| 39 | const __m128i vCy = _mm_set1_epi32(Cy); | - | ||||||
| 40 | const __m128i vyap = _mm_set1_epi32(yap); | - | ||||||
| 41 | - | |||||||
| 42 | unsigned int *dptr = dest + (y * dow); | - | ||||||
| 43 |         for (int x = 0; x < dw
  | 0 | ||||||
| 44 | const unsigned int *sptr = ypoints[y] + xpoints[x]; | - | ||||||
| 45 | __m128i vx = qt_qimageScaleAARGBA_helper(sptr, yap, Cy, sow, vyap, vCy); | - | ||||||
| 46 | - | |||||||
| 47 | int xap = xapoints[x]; | - | ||||||
| 48 |             if (xap > 0
  | 0 | ||||||
| 49 | const __m128i vxap = _mm_set1_epi32(xap); | - | ||||||
| 50 | const __m128i vinvxap = _mm_sub_epi32(v256, vxap); | - | ||||||
| 51 | __m128i vr = qt_qimageScaleAARGBA_helper(sptr + 1, yap, Cy, sow, vyap, vCy); | - | ||||||
| 52 | - | |||||||
| 53 | vx = _mm_mullo_epi32(vx, vinvxap); | - | ||||||
| 54 | vr = _mm_mullo_epi32(vr, vxap); | - | ||||||
| 55 | vx = _mm_add_epi32(vx, vr); | - | ||||||
| 56 | vx = _mm_srli_epi32(vx, 8); | - | ||||||
| 57 |             } never executed:  end of block | 0 | ||||||
| 58 | vx = _mm_srli_epi32(vx, 14); | - | ||||||
| 59 | vx = _mm_packus_epi32(vx, _mm_setzero_si128()); | - | ||||||
| 60 | vx = _mm_packus_epi16(vx, _mm_setzero_si128()); | - | ||||||
| 61 | *dptr = _mm_cvtsi128_si32(vx); | - | ||||||
| 62 |             if (RGB
  | 0 | ||||||
| 63 |                 * never executed:  dptr |= 0xff000000;*dptr |= 0xff000000;never executed:  *dptr |= 0xff000000; | 0 | ||||||
| 64 | dptr++; | - | ||||||
| 65 |         } never executed:  end of block | 0 | ||||||
| 66 |     } never executed:  end of block | 0 | ||||||
| 67 | } never executed:  end of block | 0 | ||||||
| 68 | - | |||||||
| 69 | template<bool RGB> | - | ||||||
| 70 | void qt_qimageScaleAARGBA_down_x_up_y_sse4(QImageScaleInfo *isi, unsigned int *dest, | - | ||||||
| 71 | int dw, int dh, int dow, int sow) | - | ||||||
| 72 | { | - | ||||||
| 73 | const unsigned int **ypoints = isi->ypoints; | - | ||||||
| 74 | int *xpoints = isi->xpoints; | - | ||||||
| 75 | int *xapoints = isi->xapoints; | - | ||||||
| 76 | int *yapoints = isi->yapoints; | - | ||||||
| 77 | - | |||||||
| 78 | const __m128i v256 = _mm_set1_epi32(256); | - | ||||||
| 79 | - | |||||||
| 80 | - | |||||||
| 81 |     for (int y = 0; y < dh
  | 0 | ||||||
| 82 | unsigned int *dptr = dest + (y * dow); | - | ||||||
| 83 |         for (int x = 0; x < dw
  | 0 | ||||||
| 84 | int Cx = xapoints[x] >> 16; | - | ||||||
| 85 | int xap = xapoints[x] & 0xffff; | - | ||||||
| 86 | const __m128i vCx = _mm_set1_epi32(Cx); | - | ||||||
| 87 | const __m128i vxap = _mm_set1_epi32(xap); | - | ||||||
| 88 | - | |||||||
| 89 | const unsigned int *sptr = ypoints[y] + xpoints[x]; | - | ||||||
| 90 | __m128i vx = qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, vxap, vCx); | - | ||||||
| 91 | - | |||||||
| 92 | int yap = yapoints[y]; | - | ||||||
| 93 |             if (yap > 0
  | 0 | ||||||
| 94 | const __m128i vyap = _mm_set1_epi32(yap); | - | ||||||
| 95 | const __m128i vinvyap = _mm_sub_epi32(v256, vyap); | - | ||||||
| 96 | __m128i vr = qt_qimageScaleAARGBA_helper(sptr + sow, xap, Cx, 1, vxap, vCx); | - | ||||||
| 97 | - | |||||||
| 98 | vx = _mm_mullo_epi32(vx, vinvyap); | - | ||||||
| 99 | vr = _mm_mullo_epi32(vr, vyap); | - | ||||||
| 100 | vx = _mm_add_epi32(vx, vr); | - | ||||||
| 101 | vx = _mm_srli_epi32(vx, 8); | - | ||||||
| 102 |             } never executed:  end of block | 0 | ||||||
| 103 | vx = _mm_srli_epi32(vx, 14); | - | ||||||
| 104 | vx = _mm_packus_epi32(vx, _mm_setzero_si128()); | - | ||||||
| 105 | vx = _mm_packus_epi16(vx, _mm_setzero_si128()); | - | ||||||
| 106 | *dptr = _mm_cvtsi128_si32(vx); | - | ||||||
| 107 |             if (RGB
  | 0 | ||||||
| 108 |                 * never executed:  dptr |= 0xff000000;*dptr |= 0xff000000;never executed:  *dptr |= 0xff000000; | 0 | ||||||
| 109 | dptr++; | - | ||||||
| 110 |         } never executed:  end of block | 0 | ||||||
| 111 |     } never executed:  end of block | 0 | ||||||
| 112 | } never executed:  end of block | 0 | ||||||
| 113 | - | |||||||
| 114 | template<bool RGB> | - | ||||||
| 115 | void qt_qimageScaleAARGBA_down_xy_sse4(QImageScaleInfo *isi, unsigned int *dest, | - | ||||||
| 116 | int dw, int dh, int dow, int sow) | - | ||||||
| 117 | { | - | ||||||
| 118 | const unsigned int **ypoints = isi->ypoints; | - | ||||||
| 119 | int *xpoints = isi->xpoints; | - | ||||||
| 120 | int *xapoints = isi->xapoints; | - | ||||||
| 121 | int *yapoints = isi->yapoints; | - | ||||||
| 122 | - | |||||||
| 123 |     for (int y = 0; y < dh
  | 0 | ||||||
| 124 | int Cy = yapoints[y] >> 16; | - | ||||||
| 125 | int yap = yapoints[y] & 0xffff; | - | ||||||
| 126 | const __m128i vCy = _mm_set1_epi32(Cy); | - | ||||||
| 127 | const __m128i vyap = _mm_set1_epi32(yap); | - | ||||||
| 128 | - | |||||||
| 129 | unsigned int *dptr = dest + (y * dow); | - | ||||||
| 130 |         for (int x = 0; x < dw
  | 0 | ||||||
| 131 | const int Cx = xapoints[x] >> 16; | - | ||||||
| 132 | const int xap = xapoints[x] & 0xffff; | - | ||||||
| 133 | const __m128i vCx = _mm_set1_epi32(Cx); | - | ||||||
| 134 | const __m128i vxap = _mm_set1_epi32(xap); | - | ||||||
| 135 | - | |||||||
| 136 | const unsigned int *sptr = ypoints[y] + xpoints[x]; | - | ||||||
| 137 | __m128i vx = qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, vxap, vCx); | - | ||||||
| 138 | __m128i vr = _mm_mullo_epi32(_mm_srli_epi32(vx, 4), vyap); | - | ||||||
| 139 | - | |||||||
| 140 | int j; | - | ||||||
| 141 |             for (j = (1 << 14) - yap; j > Cy
  | 0 | ||||||
| 142 | sptr += sow; | - | ||||||
| 143 | vx = qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, vxap, vCx); | - | ||||||
| 144 | vr = _mm_add_epi32(vr, _mm_mullo_epi32(_mm_srli_epi32(vx, 4), vCy)); | - | ||||||
| 145 |             } never executed:  end of block | 0 | ||||||
| 146 | sptr += sow; | - | ||||||
| 147 | vx = qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, vxap, vCx); | - | ||||||
| 148 | vr = _mm_add_epi32(vr, _mm_mullo_epi32(_mm_srli_epi32(vx, 4), _mm_set1_epi32(j))); | - | ||||||
| 149 | - | |||||||
| 150 | vr = _mm_srli_epi32(vr, 24); | - | ||||||
| 151 | vr = _mm_packus_epi32(vr, _mm_setzero_si128()); | - | ||||||
| 152 | vr = _mm_packus_epi16(vr, _mm_setzero_si128()); | - | ||||||
| 153 | *dptr = _mm_cvtsi128_si32(vr); | - | ||||||
| 154 |             if (RGB
  | 0 | ||||||
| 155 |                 * never executed:  dptr |= 0xff000000;*dptr |= 0xff000000;never executed:  *dptr |= 0xff000000; | 0 | ||||||
| 156 | dptr++; | - | ||||||
| 157 |         } never executed:  end of block | 0 | ||||||
| 158 |     } never executed:  end of block | 0 | ||||||
| 159 | } never executed:  end of block | 0 | ||||||
| 160 | - | |||||||
| 161 | template void qt_qimageScaleAARGBA_up_x_down_y_sse4<false>(QImageScaleInfo *isi, unsigned int *dest, | - | ||||||
| 162 | int dw, int dh, int dow, int sow); | - | ||||||
| 163 | - | |||||||
| 164 | template void qt_qimageScaleAARGBA_up_x_down_y_sse4<true>(QImageScaleInfo *isi, unsigned int *dest, | - | ||||||
| 165 | int dw, int dh, int dow, int sow); | - | ||||||
| 166 | - | |||||||
| 167 | template void qt_qimageScaleAARGBA_down_x_up_y_sse4<false>(QImageScaleInfo *isi, unsigned int *dest, | - | ||||||
| 168 | int dw, int dh, int dow, int sow); | - | ||||||
| 169 | - | |||||||
| 170 | template void qt_qimageScaleAARGBA_down_x_up_y_sse4<true>(QImageScaleInfo *isi, unsigned int *dest, | - | ||||||
| 171 | int dw, int dh, int dow, int sow); | - | ||||||
| 172 | - | |||||||
| 173 | template void qt_qimageScaleAARGBA_down_xy_sse4<false>(QImageScaleInfo *isi, unsigned int *dest, | - | ||||||
| 174 | int dw, int dh, int dow, int sow); | - | ||||||
| 175 | - | |||||||
| 176 | template void qt_qimageScaleAARGBA_down_xy_sse4<true>(QImageScaleInfo *isi, unsigned int *dest, | - | ||||||
| 177 | int dw, int dh, int dow, int sow); | - | ||||||
| 178 | - | |||||||
| 179 | - | |||||||
| Switch to Source code | Preprocessed file |