--- trunk/src/svf/svf.c	Tue Mar 24 11:09:46 2009
+++ 1435/src/svf/svf.c	Thu Apr  2 02:39:52 2009
@@ -641,7 +641,7 @@
 
 static int svf_check_tdo(void)
 {
-	int i, j, byte_len, index;
+	int i, j, byte_len, index, bit_mask;
 
 	for (i = 0; i < svf_check_tdo_para_index; i++)
 	{
@@ -653,11 +653,19 @@
 			{
 				if ((svf_tdi_buffer[index + j] & svf_mask_buffer[index + j]) != svf_tdo_buffer[index + j])
 				{
+					if (svf_check_tdo_para[i].bit_len >= 32)
+					{
+						bit_mask = 0xFFFFFFFF;
+					}
+					else
+					{
+						bit_mask = (1 << svf_check_tdo_para[i].bit_len) - 1;
+					}
 					LOG_ERROR("tdo check error at line %d, read = 0x%X, want = 0x%X, mask = 0x%X",
 								svf_check_tdo_para[i].line_num,
-								(*(int*)(svf_tdi_buffer + index)) & ((1 << svf_check_tdo_para[i].bit_len) - 1),
-								(*(int*)(svf_tdo_buffer + index)) & ((1 << svf_check_tdo_para[i].bit_len) - 1),
-								(*(int*)(svf_mask_buffer + index)) & ((1 << svf_check_tdo_para[i].bit_len) - 1));
+								(*(int*)(svf_tdi_buffer + index)) & bit_mask,
+								(*(int*)(svf_tdo_buffer + index)) & bit_mask,
+								(*(int*)(svf_mask_buffer + index)) & bit_mask);
 					return ERROR_FAIL;
 				}
 			}
