| 146 | #if 0 // def WITH_SSE2 |
| 147 | |
| 148 | void RawImageDataFloat::scaleValues(int start_y, int end_y) { |
| 149 | bool WITH_SSE2; |
| 150 | #ifdef _MSC_VER |
| 151 | int info[4]; |
| 152 | __cpuid(info, 1); |
| 153 | WITH_SSE2 = !!(info[3]&(1 << 26)); |
| 154 | #else |
| 155 | WITH_SSE2 = true; |
| 156 | #endif |
| 157 | |
| 158 | float app_scale = 65535.0F / (whitePoint - blackLevelSeparate[0]); |
| 159 | // Check SSE2 |
| 160 | if (WITH_SSE2 && app_scale < 63) { |
| 161 | |
| 162 | __m128i sseround; |
| 163 | __m128i ssesub2; |
| 164 | __m128i ssesign; |
| 165 | auto* sub_mul = alignedMallocArray<uint32_t, 16, __m128i>(4); |
| 166 | if (!sub_mul) |
| 167 | ThrowRDE("Out of memory, failed to allocate 128 bytes"); |
| 168 | |
| 169 | uint32_t gw = pitch / 16; |
| 170 | // 10 bit fraction |
| 171 | uint32_t mul = (int)(1024.0F * 65535.0F / (float)(whitePoint - blackLevelSeparate[mOffset.x&1])); |
| 172 | mul |= ((int)(1024.0F * 65535.0F / (float)(whitePoint - blackLevelSeparate[(mOffset.x+1)&1])))<<16; |
| 173 | uint32_t b = blackLevelSeparate[mOffset.x&1] | (blackLevelSeparate[(mOffset.x+1)&1]<<16); |
| 174 | |
| 175 | for (int i = 0; i< 4; i++) { |
| 176 | sub_mul[i] = b; // Subtract even lines |
| 177 | sub_mul[4+i] = mul; // Multiply even lines |
| 178 | } |
| 179 | |
| 180 | mul = (int)(1024.0F * 65535.0F / (float)(whitePoint - blackLevelSeparate[2+(mOffset.x&1)])); |
| 181 | mul |= ((int)(1024.0F * 65535.0F / (float)(whitePoint - blackLevelSeparate[2+((mOffset.x+1)&1)])))<<16; |
| 182 | b = blackLevelSeparate[2+(mOffset.x&1)] | (blackLevelSeparate[2+((mOffset.x+1)&1)]<<16); |
| 183 | |
| 184 | for (int i = 0; i< 4; i++) { |
| 185 | sub_mul[8+i] = b; // Subtract odd lines |
| 186 | sub_mul[12+i] = mul; // Multiply odd lines |
| 187 | } |
| 188 | |
| 189 | sseround = _mm_set_epi32(512, 512, 512, 512); |
| 190 | ssesub2 = _mm_set_epi32(32768, 32768, 32768, 32768); |
| 191 | ssesign = _mm_set_epi32(0x80008000, 0x80008000, 0x80008000, 0x80008000); |
| 192 | |
| 193 | for (int y = start_y; y < end_y; y++) { |
| 194 | __m128i* pixel = (__m128i*) & data[(mOffset.y+y)*pitch]; |
| 195 | __m128i ssescale, ssesub; |
| 196 | if (((y+mOffset.y)&1) == 0) { |
| 197 | ssesub = _mm_load_si128((__m128i*)&sub_mul[0]); |
| 198 | ssescale = _mm_load_si128((__m128i*)&sub_mul[4]); |
| 199 | } else { |
| 200 | ssesub = _mm_load_si128((__m128i*)&sub_mul[8]); |
| 201 | ssescale = _mm_load_si128((__m128i*)&sub_mul[12]); |
| 202 | } |
| 203 | |
| 204 | for (uint32_t x = 0 ; x < gw; x++) { |
| 205 | __m128i pix_high; |
nothing calls this directly
no test coverage detected