@@ -166,11 +166,8 @@ ImagingGetExtrema(Imaging im, void *extrema) {
166166 for (y = 0 ; y < im -> ysize ; y ++ ) {
167167 UINT8 * in = im -> image8 [y ];
168168 for (x = 0 ; x < im -> xsize ; x ++ ) {
169- if (imin > in [x ]) {
170- imin = in [x ];
171- } else if (imax < in [x ]) {
172- imax = in [x ];
173- }
169+ imin = imin < in [x ] ? imin : in [x ];
170+ imax = imax > in [x ] ? imax : in [x ];
174171 }
175172 if (imin == 0 && imax == 255 ) {
176173 break ;
@@ -184,11 +181,8 @@ ImagingGetExtrema(Imaging im, void *extrema) {
184181 for (y = 0 ; y < im -> ysize ; y ++ ) {
185182 INT32 * in = im -> image32 [y ];
186183 for (x = 0 ; x < im -> xsize ; x ++ ) {
187- if (imin > in [x ]) {
188- imin = in [x ];
189- } else if (imax < in [x ]) {
190- imax = in [x ];
191- }
184+ imin = imin < in [x ] ? imin : in [x ];
185+ imax = imax > in [x ] ? imax : in [x ];
192186 }
193187 }
194188 memcpy (extrema , & imin , sizeof (imin ));
@@ -199,6 +193,8 @@ ImagingGetExtrema(Imaging im, void *extrema) {
199193 for (y = 0 ; y < im -> ysize ; y ++ ) {
200194 FLOAT32 * in = (FLOAT32 * )im -> image32 [y ];
201195 for (x = 0 ; x < im -> xsize ; x ++ ) {
196+ // Kept as if/else (unlike the integer branches above),
197+ // since float min/max isn't vectorisable due to NaN semantics.
202198 if (fmin > in [x ]) {
203199 fmin = in [x ];
204200 } else if (fmax < in [x ]) {
0 commit comments