Skip to content

Commit 8b48063

Browse files
committed
Removed undefined behaviour with two decrements on the same line.
1 parent bcf810d commit 8b48063

File tree

4 files changed

+48
-16
lines changed

4 files changed

+48
-16
lines changed

src/boards/Inkplate10.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,15 +211,23 @@ void IRAM_ATTR Inkplate::display3b()
211211
vscan_start();
212212
for (int i = 0; i < E_INK_HEIGHT; i++)
213213
{
214-
hscan_start((GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]));
215-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
214+
uint32_t t = GLUT2[k * 256 + (*(--dp))];
215+
t |= GLUT[k * 256 + (*(--dp))];
216+
hscan_start(t);
217+
t = GLUT2[k * 256 + (*(--dp))];
218+
t |= GLUT[k * 256 + (*(--dp))];
219+
GPIO.out_w1ts = t | CL;
216220
GPIO.out_w1tc = DATA | CL;
217221

218222
for (int j = 0; j < ((E_INK_WIDTH / 8) - 1); j++)
219223
{
220-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
224+
t = GLUT2[k * 256 + (*(--dp))];
225+
t |= GLUT[k * 256 + (*(--dp))];
226+
GPIO.out_w1ts = t | CL;
221227
GPIO.out_w1tc = DATA | CL;
222-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
228+
t = GLUT2[k * 256 + (*(--dp))];
229+
t |= GLUT[k * 256 + (*(--dp))];
230+
GPIO.out_w1ts = t | CL;
223231
GPIO.out_w1tc = DATA | CL;
224232
}
225233

src/boards/Inkplate5.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,15 +242,23 @@ void IRAM_ATTR Inkplate::display3b()
242242
vscan_start();
243243
for (int i = 0; i < E_INK_HEIGHT; i++)
244244
{
245-
hscan_start((GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]));
246-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
245+
uint32_t t = GLUT2[k * 256 + (*(--dp))];
246+
t |= GLUT[k * 256 + (*(--dp))];
247+
hscan_start(t);
248+
t = GLUT2[k * 256 + (*(--dp))];
249+
t |= GLUT[k * 256 + (*(--dp))];
250+
GPIO.out_w1ts = t | CL;
247251
GPIO.out_w1tc = DATA | CL;
248252

249253
for (int j = 0; j < ((E_INK_WIDTH / 8) - 1); j++)
250254
{
251-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
255+
t = GLUT2[k * 256 + (*(--dp))];
256+
t |= GLUT[k * 256 + (*(--dp))];
257+
GPIO.out_w1ts = t | CL;
252258
GPIO.out_w1tc = DATA | CL;
253-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
259+
t = GLUT2[k * 256 + (*(--dp))];
260+
t |= GLUT[k * 256 + (*(--dp))];
261+
GPIO.out_w1ts = t | CL;
254262
GPIO.out_w1tc = DATA | CL;
255263
}
256264

src/boards/Inkplate6.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -259,15 +259,23 @@ void Inkplate::display3b()
259259
vscan_start();
260260
for (int i = 0; i < E_INK_HEIGHT; ++i)
261261
{
262-
hscan_start((GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]));
263-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
262+
uint32_t t = GLUT2[k * 256 + (*(--dp))];
263+
t |= GLUT[k * 256 + (*(--dp))];
264+
hscan_start(t);
265+
t = GLUT2[k * 256 + (*(--dp))];
266+
t |= GLUT[k * 256 + (*(--dp))];
267+
GPIO.out_w1ts = t | CL;
264268
GPIO.out_w1tc = DATA | CL;
265269

266270
for (int j = 0; j < ((E_INK_WIDTH / 8) - 1); ++j)
267271
{
268-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
272+
t = GLUT2[k * 256 + (*(--dp))];
273+
t |= GLUT[k * 256 + (*(--dp))];
274+
GPIO.out_w1ts = t | CL;
269275
GPIO.out_w1tc = DATA | CL;
270-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
276+
t = GLUT2[k * 256 + (*(--dp))];
277+
t |= GLUT[k * 256 + (*(--dp))];
278+
GPIO.out_w1ts = t | CL;
271279
GPIO.out_w1tc = DATA | CL;
272280
}
273281
GPIO.out_w1ts = CL;

src/boards/Inkplate6plus.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -302,15 +302,23 @@ void Inkplate::display3b()
302302
vscan_start();
303303
for (int i = 0; i < E_INK_HEIGHT; i++)
304304
{
305-
hscan_start((GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]));
306-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
305+
uint32_t t = GLUT2[k * 256 + (*(--dp))];
306+
t |= GLUT[k * 256 + (*(--dp))];
307+
hscan_start(t);
308+
t = GLUT2[k * 256 + (*(--dp))];
309+
t|=GLUT[k * 256 + (*(--dp))]);
310+
GPIO.out_w1ts = t | CL;
307311
GPIO.out_w1tc = DATA | CL;
308312

309313
for (int j = 0; j < ((E_INK_WIDTH / 8) - 1); j++)
310314
{
311-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
315+
t = GLUT2[k * 256 + (*(--dp))];
316+
t |= GLUT[k * 256 + (*(--dp))];
317+
GPIO.out_w1ts = t | CL;
312318
GPIO.out_w1tc = DATA | CL;
313-
GPIO.out_w1ts = (GLUT2[k * 256 + (*(--dp))] | GLUT[k * 256 + (*(--dp))]) | CL;
319+
t = GLUT2[k * 256 + (*(--dp))];
320+
t |= GLUT[k * 256 + (*(--dp))];
321+
GPIO.out_w1ts = t | CL;
314322
GPIO.out_w1tc = DATA | CL;
315323
}
316324
GPIO.out_w1ts = CL;

0 commit comments

Comments
 (0)