Hi, making the change to the union, I also realized that
/* Copy from memory into linebuf and print hex values */ for (i = 0; i < linelen; i++) { uint32_t x; if (width == 4) x = lb.u32[i] = *(volatile uint32_t *)data; else if (width == 2) x = lb.u16[i] = *(volatile uint16_t *)data; else x = lb.u8[i] = *(volatile uint8_t *)data; printf(" %0*x", width * 2, x); data += width; } is still a bit "ugly". What about: union data { u_int32_t *u32; u_int16_t *u16; u_int8_t *u8; void *v; } dp; dp.v = data; then: /* Copy from memory into linebuf and print hex values */ for (i = 0; i < linelen; i++) { if (width == 4) x = lb.u32[i] = *(dp.u32)++; else if (width == 2) x = lb.u16[i] = *(dp.u16)++; else x = lb.u8[i] = *(dp.u8)++; printf(" %0*x", width * 2, x); } optionally calling printf inside the if: /* Copy from memory into linebuf and print hex values */ for (i = 0; i < linelen; i++) { if (width == 4) printf(" %08x", lb.u32[i] = *(dp.u32)++); else if (width == 2) printf(" %04x", lb.u16[i] = *(dp.u16)++); else printf(" %02x", lb.u8[i] = *(dp.u8)++); } maybe it would even be more effective to swap for and if: /* Copy from memory into linebuf and print hex values */ if (width == 4) { for (i = 0; i < linelen; i++) printf(" %08x", lb.u32[i] = *(dp.u32)++); } else if (width == 2) { for (i = 0; i < linelen; i++) printf(" %04x", lb.u16[i] = *(dp.u16)++); } else { for (i = 0; i < linelen; i++) printf(" %02x", lb.u8[i] = *(dp.u8)++); } Of course, all is purely cosmetic ;) Reinhard _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot