# HG changeset patch # User Rob Landley # Date 1394579472 18000 # Node ID fba5d8d3905c810a8ada21cecf69c41717674d92 # Parent c6c5565cc859b9c7f7e9dc13de60d2ebe5ef9995 Add "volatile" annotation to peek/poke to stop potential optimizer overreach. diff -r c6c5565cc859 -r fba5d8d3905c lib/lib.c --- a/lib/lib.c Tue Mar 11 17:50:17 2014 -0500 +++ b/lib/lib.c Tue Mar 11 18:11:12 2014 -0500 @@ -314,16 +314,16 @@ int64_t peek(void *ptr, int size) { if (size & 8) { - int64_t *p = (int64_t *)ptr; + volatile int64_t *p = (int64_t *)ptr; return *p; } else if (size & 4) { - int *p = (int *)ptr; + volatile int *p = (int *)ptr; return *p; } else if (size & 2) { - short *p = (short *)ptr; + volatile short *p = (short *)ptr; return *p; } else { - char *p = (char *)ptr; + volatile char *p = (char *)ptr; return *p; } } @@ -331,16 +331,16 @@ void poke(void *ptr, uint64_t val, int size) { if (size & 8) { - uint64_t *p = (uint64_t *)ptr; + volatile uint64_t *p = (uint64_t *)ptr; *p = val; } else if (size & 4) { - int *p = (int *)ptr; + volatile int *p = (int *)ptr; *p = val; } else if (size & 2) { - short *p = (short *)ptr; + volatile short *p = (short *)ptr; *p = val; } else { - char *p = (char *)ptr; + volatile char *p = (char *)ptr; *p = val; } }