Mercurial > hg > toybox
comparison lib/lib.c @ 1218:fba5d8d3905c draft
Add "volatile" annotation to peek/poke to stop potential optimizer overreach.
author | Rob Landley <rob@landley.net> |
---|---|
date | Tue, 11 Mar 2014 18:11:12 -0500 |
parents | 86745958cea9 |
children | 468444e5c7c5 |
comparison
equal
deleted
inserted
replaced
1217:c6c5565cc859 | 1218:fba5d8d3905c |
---|---|
312 } | 312 } |
313 | 313 |
314 int64_t peek(void *ptr, int size) | 314 int64_t peek(void *ptr, int size) |
315 { | 315 { |
316 if (size & 8) { | 316 if (size & 8) { |
317 int64_t *p = (int64_t *)ptr; | 317 volatile int64_t *p = (int64_t *)ptr; |
318 return *p; | 318 return *p; |
319 } else if (size & 4) { | 319 } else if (size & 4) { |
320 int *p = (int *)ptr; | 320 volatile int *p = (int *)ptr; |
321 return *p; | 321 return *p; |
322 } else if (size & 2) { | 322 } else if (size & 2) { |
323 short *p = (short *)ptr; | 323 volatile short *p = (short *)ptr; |
324 return *p; | 324 return *p; |
325 } else { | 325 } else { |
326 char *p = (char *)ptr; | 326 volatile char *p = (char *)ptr; |
327 return *p; | 327 return *p; |
328 } | 328 } |
329 } | 329 } |
330 | 330 |
331 void poke(void *ptr, uint64_t val, int size) | 331 void poke(void *ptr, uint64_t val, int size) |
332 { | 332 { |
333 if (size & 8) { | 333 if (size & 8) { |
334 uint64_t *p = (uint64_t *)ptr; | 334 volatile uint64_t *p = (uint64_t *)ptr; |
335 *p = val; | 335 *p = val; |
336 } else if (size & 4) { | 336 } else if (size & 4) { |
337 int *p = (int *)ptr; | 337 volatile int *p = (int *)ptr; |
338 *p = val; | 338 *p = val; |
339 } else if (size & 2) { | 339 } else if (size & 2) { |
340 short *p = (short *)ptr; | 340 volatile short *p = (short *)ptr; |
341 *p = val; | 341 *p = val; |
342 } else { | 342 } else { |
343 char *p = (char *)ptr; | 343 volatile char *p = (char *)ptr; |
344 *p = val; | 344 *p = val; |
345 } | 345 } |
346 } | 346 } |
347 | 347 |
348 // Iterate through an array of files, opening each one and calling a function | 348 // Iterate through an array of files, opening each one and calling a function |