diff --git a/smi/CMakeLists.txt.64_gnu90 b/smi/CMakeLists.txt.64_gnu90
index ff1eee913d4a4ff22658bf3e5ee5fa17c69cd01b..5122d588c9a21487f0fab24a78aa9c6eee1c4a70 100644
--- a/smi/CMakeLists.txt.64_gnu90
+++ b/smi/CMakeLists.txt.64_gnu90
@@ -9,13 +9,14 @@ endif()
 
 # RTAI
 if($ENV{RTAI})
-SET(RTCFLAGS    "$(shell rtai-config --lxrt-cflags) -D_RTAI -Wall -std=gnu90")
+SET(RTCFLAGS    "$(shell rtai-config --lxrt-cflags) -D_RTAI -Wall -std=gnu90
+-D_64")
 else()
 # PREEMPT_RT
-SET(RTCFLAGS    "-O2 -Wall -fno-stack-protector -std=gnu90")
+SET(RTCFLAGS    "-O2 -Wall -fno-stack-protector -std=gnu90 -D_64")
 endif()
 
-SET(NRTCFLAGS    "-D_NRT -O2 -Wall -std=gnu90")
+SET(NRTCFLAGS    "-D_NRT -D_64 -O2 -Wall -std=gnu90")
 
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
 
diff --git a/smi/src/nrt_system.c b/smi/src/nrt_system.c
index 940f11871df2e5aec6a2ff3fe4e1f4727aa2f3d5..1d11dc46da2a0fa607a2aff14f6937814b9bc7c0 100644
--- a/smi/src/nrt_system.c
+++ b/smi/src/nrt_system.c
@@ -388,10 +388,15 @@ int nrtSmi(char *esmFile, char *tssFile, char *tdeFile, char *cfgFile) {
 	/* check size of data types */
 	if (sizeof(char)!=CHAR_S || sizeof(short)!=SHORT_S || 
 	 sizeof(int)!=INT_S || sizeof(long)!=LONG_S || 
-	 sizeof(RTIME)!=RTIME_S)
+	 sizeof(RTIME)!=RTIME_S || sizeof(float)!=FLOAT_S || 
+	 sizeof(double)!=DOUBLE_S)
 	{
 		error=4;
 		printf("[nrtSmi] data type mismatch\n");
+//printf("CHAR_BIT=%d\n",CHAR_BIT);		
+//printf("%d %d %d %d %d\n",CHAR_S,SHORT_S,INT_S,LONG_S,RTIME_S);		
+//printf("%ld %ld %ld %ld %ld\n",sizeof(char),sizeof(short),sizeof(int),
+//sizeof(long),sizeof(RTIME));
 		goto exit;
 	}
 	
diff --git a/smi/src/rt_def.h b/smi/src/rt_def.h
index 2b39eaf1ca62328cc93275767ccc704d1a46ead8..10bf73706e9638e56833c0d9a2c2a7f838412fa4 100644
--- a/smi/src/rt_def.h
+++ b/smi/src/rt_def.h
@@ -20,7 +20,11 @@
 #define CHAR_S 1
 #define SHORT_S 2
 #define INT_S 4
+#ifdef _64
+#define LONG_S 8
+#elif
 #define LONG_S 4
+#endif
 #define RTIME_S 8
 #define DOUBLE_S 8
 #define FLOAT_S 4