sim: sh: fix conversion of PC to an integer
authorMike Frysinger <vapier@gentoo.org>
Sun, 7 Nov 2021 01:09:08 +0000 (21:09 -0400)
committerMike Frysinger <vapier@gentoo.org>
Sun, 7 Nov 2021 01:09:08 +0000 (21:09 -0400)
On LLP64 targets where sizeof(long) != sizeof(void*), this code fails:
sim/sh/interp.c:704:24: error: cast from pointer to integer of different size  -Werror=pointer-to-int-cast]
  704 |   do { memstalls += ((((long) PC & 3) != 0) ? (n) : ((n) - 1)); } while (0)
      |                        ^

Since this code simply needs to check alignment, cast it using uintptr_t
which is the right type for this.

sim/sh/interp.c

index c502b21b49f2a9f5d93a294d72b8b720cbdfa438..93923fa2c56c72858994be320596fd925b56486a 100644 (file)
@@ -701,7 +701,7 @@ do { \
 #else
 
 #define MA(n) \
-  do { memstalls += ((((long) PC & 3) != 0) ? (n) : ((n) - 1)); } while (0)
+  do { memstalls += ((((uintptr_t) PC & 3) != 0) ? (n) : ((n) - 1)); } while (0)
 
 #define L(x)   thislock = x;
 #define TL(x)  if ((x) == prevlock) stalls++;