libtiff: tif_predict.c: make horAcc8() work with icc (ICC) 2021.6.0 20220226 -O2

From 2e78780ea5ac49adee6d9a274655c21188f4ff53 Mon Sep 17 00:00:00 2001
From: Even Rouault <[EMAIL REDACTED]>
Date: Wed, 22 Jun 2022 03:08:14 +0200
Subject: [PATCH] tif_predict.c: make horAcc8() work with icc (ICC) 2021.6.0
 20220226 -O2

For a reason I don't understand, recent ICC generates wrong code in -O2
mode for the stride = 3 and 4 cases. The modified code is more
straightfoward, so go for it.
---
 libtiff/tif_predict.c | 28 +++++++++++-----------------
 1 file changed, 11 insertions(+), 17 deletions(-)

diff --git a/libtiff/tif_predict.c b/libtiff/tif_predict.c
index ffe7133c..cad428cb 100644
--- a/libtiff/tif_predict.c
+++ b/libtiff/tif_predict.c
@@ -310,29 +310,23 @@ horAcc8(TIFF* tif, uint8_t* cp0, tmsize_t cc)
 			unsigned int cr = cp[0];
 			unsigned int cg = cp[1];
 			unsigned int cb = cp[2];
-			cc -= 3;
-			cp += 3;
-			while (cc>0) {
-				cp[0] = (unsigned char) ((cr += cp[0]) & 0xff);
-				cp[1] = (unsigned char) ((cg += cp[1]) & 0xff);
-				cp[2] = (unsigned char) ((cb += cp[2]) & 0xff);
-				cc -= 3;
-				cp += 3;
+			tmsize_t i = stride;
+			for ( ; i < cc; i += stride) {
+				cp[i+0] = (unsigned char) ((cr += cp[i+0]) & 0xff);
+				cp[i+1] = (unsigned char) ((cg += cp[i+1]) & 0xff);
+				cp[i+2] = (unsigned char) ((cb += cp[i+2]) & 0xff);
 			}
 		} else if (stride == 4)  {
 			unsigned int cr = cp[0];
 			unsigned int cg = cp[1];
 			unsigned int cb = cp[2];
 			unsigned int ca = cp[3];
-			cc -= 4;
-			cp += 4;
-			while (cc>0) {
-				cp[0] = (unsigned char) ((cr += cp[0]) & 0xff);
-				cp[1] = (unsigned char) ((cg += cp[1]) & 0xff);
-				cp[2] = (unsigned char) ((cb += cp[2]) & 0xff);
-				cp[3] = (unsigned char) ((ca += cp[3]) & 0xff);
-				cc -= 4;
-				cp += 4;
+			tmsize_t i = stride;
+			for ( ; i < cc; i += stride) {
+				cp[i+0] = (unsigned char) ((cr += cp[i+0]) & 0xff);
+				cp[i+1] = (unsigned char) ((cg += cp[i+1]) & 0xff);
+				cp[i+2] = (unsigned char) ((cb += cp[i+2]) & 0xff);
+				cp[i+3] = (unsigned char) ((ca += cp[i+3]) & 0xff);
 			}
 		} else  {
 			cc -= stride;