--- trunk/src/svf/svf.c	2009-03-28 14:50:36.000000000 +0800
+++ backup/svf/svf.c	2009-04-03 20:55:30.000000000 +0800
@@ -641,26 +641,30 @@
 
 static int svf_check_tdo(void)
 {
-	int i, j, byte_len, index;
+	int i, len, index, mask;
 
 	for (i = 0; i < svf_check_tdo_para_index; i++)
 	{
-		if (svf_check_tdo_para[i].enabled)
+		index = svf_check_tdo_para[i].buffer_offset;
+		len = svf_check_tdo_para[i].bit_len;
+		if ((svf_check_tdo_para[i].enabled) && buf_cmp_mask(&svf_tdi_buffer[index], &svf_tdo_buffer[index], &svf_mask_buffer[index], len))
 		{
-			byte_len = (svf_check_tdo_para[i].bit_len + 7) >> 3;
-			index = svf_check_tdo_para[i].buffer_offset;
-			for (j = 0; j < byte_len; j++)
-			{
-				if ((svf_tdi_buffer[index + j] & svf_mask_buffer[index + j]) != svf_tdo_buffer[index + j])
-				{
-					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));
-					return ERROR_FAIL;
-				}
+			if (svf_check_tdo_para[i].bit_len >= 32)
+			{
+				mask = 0xFFFFFFFF;
+			}
+			else
+			{
+				mask = (1 << svf_check_tdo_para[i].bit_len) - 1;
 			}
+
+			LOG_ERROR("tdo check error at line %d", 
+					  svf_check_tdo_para[i].line_num);
+			LOG_ERROR("read = 0x%X, want = 0x%X, mask = 0x%X", 
+					  (*(int*)(svf_tdi_buffer + index)) & mask, 
+					  (*(int*)(svf_tdo_buffer + index)) & mask, 
+					  (*(int*)(svf_mask_buffer + index)) & mask);
+			return ERROR_FAIL;
 		}
 	}
 	svf_check_tdo_para_index = 0;
