diff --git a/src/target/arm7tdmi.c b/src/target/arm7tdmi.c
index 136a8a05b0a7155e0a6f927f88f413d5bca0dab1..dec3e28dece0b2f9de6dc786c9ae008bc20838e9 100644
--- a/src/target/arm7tdmi.c
+++ b/src/target/arm7tdmi.c
@@ -265,28 +265,29 @@ int arm7tdmi_clock_data_in_endianness(arm_jtag_t *jtag_info, void *in, int size,
 
 	jtag_add_dr_scan_now(2, fields, TAP_INVALID);
 
+	u32 readback=flip_u32(le_to_h_u32(tmp), 32);
 	switch (size)
 	{
 		case 4:
 			if (be)
 			{
-				h_u32_to_be(((u8*)in), flip_u32(le_to_h_u32(tmp), 32));
+				h_u32_to_be(((u8*)in), readback);
 			} else
 			{
-				 h_u32_to_le(((u8*)in), flip_u32(le_to_h_u32(tmp), 32));
+				 h_u32_to_le(((u8*)in), readback);
 			}
 			break;
 		case 2:
 			if (be)
 			{
-				h_u16_to_be(((u8*)in), flip_u32(le_to_h_u32(tmp), 32) & 0xffff);
+				h_u16_to_be(((u8*)in), readback & 0xffff);
 			} else
 			{
-				h_u16_to_le(((u8*)in), flip_u32(le_to_h_u32(tmp), 32) & 0xffff);
+				h_u16_to_le(((u8*)in), readback & 0xffff);
 			}
 			break;
 		case 1:
-			*((u8 *)in)= flip_u32(le_to_h_u32(tmp), 32) & 0xff;
+			*((u8 *)in)= readback & 0xff;
 			break;
 	}