zy1000: fix bug when running on non-arm CPU
authorØyvind Harboe <oyvind.harboe@zylin.com>
Thu, 12 Nov 2009 09:10:11 +0000 (10:10 +0100)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Tue, 17 Nov 2009 14:04:17 +0000 (15:04 +0100)
Shifting by more than 32 is undefined for 32 bit integers according
to the C standard. Robust solution is conditional code.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
src/jtag/zy1000/zy1000.c

index 9a5d2e784a4b59dc1a239884463d709ced2a61fb..f2a5aa942c08620da0b86e56e7f3f5bde655cba1 100644 (file)
@@ -509,7 +509,14 @@ static __inline void scanFields(int num_fields, const struct scan_field *fields,
                                }
                        }
                        /* mask away unused bits for easier debugging */
-                       value&=~(((uint32_t)0xffffffff) << k);
+                       if (k < 32)
+                       {
+                               value&=~(((uint32_t)0xffffffff) << k);
+                       } else
+                       {
+                               /* Shifting by >= 32 is not defined by the C standard
+                                * and will in fact shift by &0x1f bits on nios */
+                       }
 
                        shiftValueInner(shiftState, pause_state, k, value);