OSDN Git Service

libintel64asm init
authorkoinec <>
Sat, 25 Apr 2009 05:22:59 +0000 (05:22 +0000)
committerkoinec <>
Sat, 25 Apr 2009 05:22:59 +0000 (05:22 +0000)
29 files changed:
include/drd64_types.h [new file with mode: 0644]
include/libintel64asm.h [new file with mode: 0644]
libintel64asm/COPYRIGHT [new file with mode: 0644]
libintel64asm/Makefile [new file with mode: 0644]
libintel64asm/drd64_intel64.h [new file with mode: 0644]
libintel64asm/drd64_intel64_asm.c [new file with mode: 0644]
libintel64asm/drd64_intel64_asm.h [new file with mode: 0644]
libintel64asm/drd64_intel64_asm_system.c [new file with mode: 0644]
libintel64asm/drd64_intel64_asm_system.h [new file with mode: 0644]
libintel64asm/drd64_intel64_common.c [new file with mode: 0644]
libintel64asm/drd64_intel64_common.h [new file with mode: 0644]
libintel64asm/drd64_intel64_csvcompiler [new file with mode: 0755]
libintel64asm/drd64_intel64_csvcompiler.c [new file with mode: 0644]
libintel64asm/drd64_intel64_db.c [new file with mode: 0644]
libintel64asm/drd64_intel64_db.h [new file with mode: 0644]
libintel64asm/drd64_intel64_dbcommon.c [new file with mode: 0644]
libintel64asm/drd64_intel64_dbcommon.h [new file with mode: 0644]
libintel64asm/drd64_intel64_dbfile.h [new file with mode: 0644]
libintel64asm/drd64_intel64_dbtype.h [new file with mode: 0644]
libintel64asm/drd64_intel64_debug.c [new file with mode: 0644]
libintel64asm/drd64_intel64_disasm.c [new file with mode: 0644]
libintel64asm/drd64_intel64_disasm.h [new file with mode: 0644]
libintel64asm/drd64_intel64_error.c [new file with mode: 0644]
libintel64asm/drd64_intel64_error.h [new file with mode: 0644]
libintel64asm/drd64_intel64_function.c [new file with mode: 0644]
libintel64asm/drd64_intel64db.bin [new file with mode: 0644]
libintel64asm/intel64asm.c [new file with mode: 0644]
libintel64asm/test.asm [new file with mode: 0644]
libintel64asm/x8664db.csv [new file with mode: 0644]

diff --git a/include/drd64_types.h b/include/drd64_types.h
new file mode 100644 (file)
index 0000000..ea46755
--- /dev/null
@@ -0,0 +1,39 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+            Copyright(C) Koinec 2007-2008. All Rights Reserved.  
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.h
+Function: DrDeamon Main Header 
+Comment: 
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_TYPES
+#define DRD64_HEADER_TYPES
+
+
+typedef unsigned char  Byte;
+typedef unsigned short Word;
+typedef short                  Short;
+typedef unsigned int   DWord;
+typedef        int                             INT;
+typedef        unsigned long   QWord;
+
+typedef struct  {
+    int         i_bytes;
+    union   {
+        Byte    val8;
+        Word    val16;
+        DWord   val32;
+        QWord   val64;
+    } val;
+} Value;
+
+
+#endif /* DRD64_HEADER_types */
+
+/* EOF of drd64.h ----------------------------------- */
diff --git a/include/libintel64asm.h b/include/libintel64asm.h
new file mode 100644 (file)
index 0000000..0252c1d
--- /dev/null
@@ -0,0 +1,66 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.h
+Function: Header 
+Comment: 
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_LIBINTEL64ASM
+#define DRD64_HEADER_LIBINTEL64ASM
+
+#ifdef DRD64_SRC_LIBINTEL64ASM_FUNC
+       #define LIBINTEL64ASM_FUNC
+#else
+       #define LIBINTEL64ASM_FUNC extern
+#endif
+
+
+#define DRD64_LIBINTEL64ASM_DEBUGLEVEL_0    0
+#define DRD64_LIBINTEL64ASM_DEBUGLEVEL_1    1
+#define DRD64_LIBINTEL64ASM_DEBUGLEVEL_2    2
+#define DRD64_LIBINTEL64ASM_DEBUGLEVEL_3    3
+#define DRD64_LIBINTEL64ASM_DEBUGLEVEL_4    4
+#define DRD64_LIBINTEL64ASM_DEBUGLEVEL_NOMSG    DRD64_LIBINTEL64ASM_DEBUGLEVEL_0
+#define DRD64_LIBINTEL64ASM_DEBUGLEVEL_ANSWER   DRD64_LIBINTEL64ASM_DEBUGLEVEL_1
+#define DRD64_LIBINTEL64ASM_DEBUGLEVEL_FULL     DRD64_LIBINTEL64ASM_DEBUGLEVEL_4
+
+LIBINTEL64ASM_FUNC     int
+    Drd64_LibIntel64asm_Initialize(
+        void );
+LIBINTEL64ASM_FUNC     int
+    Drd64_LibIntel64asm_Terminate(
+        void );
+
+
+#endif /* DRD64_HEADER_XXX */
+
+/* EOF of drd64_.h ----------------------------------- */
diff --git a/libintel64asm/COPYRIGHT b/libintel64asm/COPYRIGHT
new file mode 100644 (file)
index 0000000..de2c986
--- /dev/null
@@ -0,0 +1,23 @@
+Copyright 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/libintel64asm/Makefile b/libintel64asm/Makefile
new file mode 100644 (file)
index 0000000..3bd4edb
--- /dev/null
@@ -0,0 +1,85 @@
+
+FLAGS_DEBUG = -g
+LIBINTEL64ASM_LIB =    libintel64asm.a
+LIBINTEL64ASM_OBJS =   drd64_intel64_db.o \
+                                               drd64_intel64_disasm.o \
+                                               drd64_intel64_asm.o \
+                                               drd64_intel64_debug.o \
+                                               drd64_intel64_asm_system.o \
+                                               drd64_intel64_common.o \
+                                               drd64_intel64_dbcommon.o \
+                                               drd64_intel64_function.o \
+                                               drd64_intel64_error.o
+
+LIBINTEL64ASM_HEADERS =        drd64_intel64_dbtype.h \
+                                               drd64_intel64_asm.h \
+                                               drd64_intel64_disasm.h \
+                                               drd64_intel64_asm_system.h \
+                                               drd64_intel64_error.h \
+                                               drd64_intel64_common.h \
+                                               drd64_intel64_db.h \
+                                               drd64_intel64_dbcommon.h \
+                                               drd64_intel64_dbfile.h \
+                                               ../include/drd64_types.h \
+                                               ../include/libintel64asm.h
+INTEL64ASM_TARGET = intel64asm
+INTEL64ASM_OBJS = intel64asm.o
+
+all:   $(LIBINTEL64ASM_LIB) $(INTEL64ASM_TARGET)
+
+$(INTEL64ASM_TARGET): $(INTEL64ASM_OBJS) $(LIBINTEL64ASM_LIB)
+       gcc -o $(INTEL64ASM_TARGET) $(INTEL64ASM_OBJS) $(LIBINTEL64ASM_LIB)
+
+$(INTEL64ASM_OBJS): intel64asm.c ../include/libintel64asm.h
+       gcc -c -o $(INTEL64ASM_OBJS) $(FLAGS_DEBUG) intel64asm.c
+
+drd64: drd64.o $(LIBINTEL64ASM_OBJS)
+       gcc -o drd64 $(FLAGS_DEBUG) drd64.o $(OBJS_INTEL64ASM)
+
+drd64.o: drd64.c 
+       gcc -c -o drd64.o $(FLAGS_DEBUG) drd64.c
+
+$(LIBINTEL64ASM_LIB): $(LIBINTEL64ASM_OBJS)
+       ar rv $(LIBINTEL64ASM_LIB) $(LIBINTEL64ASM_OBJS)
+       ranlib $(LIBINTEL64ASM_LIB)
+
+drd64_intel64_function.o: drd64_intel64_function.c $(LIBINTEL64ASM_HEADERS)
+       gcc -c -o drd64_intel64_function.o $(FLAGS_DEBUG) drd64_intel64_function.c
+
+drd64_intel64_db.o: drd64_intel64_db.c  $(LIBINTEL64ASM_HEADERS)
+       gcc -c -o drd64_intel64_db.o $(FLAGS_DEBUG) drd64_intel64_db.c
+
+drd64_intel64_disasm.o: drd64_intel64_disasm.c $(LIBINTEL64ASM_HEADERS)
+       gcc -c -o drd64_intel64_disasm.o $(FLAGS_DEBUG) drd64_intel64_disasm.c
+
+drd64_intel64_asm.o: drd64_intel64_asm.c $(LIBINTEL64ASM_HEADERS)
+       gcc -c -o drd64_intel64_asm.o $(FLAGS_DEBUG) drd64_intel64_asm.c
+
+drd64_intel64_debug.o: drd64_intel64_debug.c $(LIBINTEL64ASM_HEADERS)
+       gcc -c -o drd64_intel64_debug.o $(FLAGS_DEBUG) drd64_intel64_debug.c
+
+drd64_intel64_asm_system.o: drd64_intel64_asm_system.c $(LIBINTEL64ASM_HEADERS)
+       gcc -c -o drd64_intel64_asm_system.o $(FLAGS_DEBUG) drd64_intel64_asm_system.c
+
+drd64_intel64_common.o: drd64_intel64_common.c $(LIBINTEL64ASM_HEADERS)
+       gcc -c -o drd64_intel64_common.o $(FLAGS_DEBUG) drd64_intel64_common.c
+
+drd64_intel64_dbcommon.o: drd64_intel64_dbcommon.c $(LIBINTEL64ASM_HEADERS)
+       gcc -c -o drd64_intel64_dbcommon.o $(FLAGS_DEBUG) drd64_intel64_dbcommon.c
+
+drd64_intel64_error.o: drd64_intel64_error.c $(LIBINTEL64ASM_HEADERS)
+       gcc -c -o drd64_intel64_error.o $(FLAGS_DEBUG) drd64_intel64_error.c
+
+drd64_intel64_csvcompiler.o: drd64_intel64_csvcompiler.c drd64_intel64_db.h drd64_intel64_dbfile.h
+       gcc -c -o drd64_intel64_csvcompiler.o $(FLAGS_DEBUG) drd64_intel64_csvcompiler.c
+
+compile: drd64_intel64_csvcompiler.o drd64_intel64_dbcommon.o
+       gcc -o drd64_intel64_csvcompiler drd64_intel64_csvcompiler.o drd64_intel64_dbcommon.o
+       rm drd64_intel64db.bin
+       ./drd64_intel64_csvcompiler x8664db.csv
+
+clean:
+       rm *.o
+       rm *.core
+       rm drd64
+
diff --git a/libintel64asm/drd64_intel64.h b/libintel64asm/drd64_intel64.h
new file mode 100644 (file)
index 0000000..bd50456
--- /dev/null
@@ -0,0 +1,47 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+    
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+#ifndef DRD64_INTEL64_HEADER_MAIN
+#define DRD64_INTEL64_HEADER_MAIN
+
+#include<stdio.h>
+#include<string.h>
+#include<stdlib.h>
+#include<ctype.h>
+#include<assert.h>
+
+#include"../include/drd64_types.h"
+
+#define isBitFlag(m,n)  (((unsigned int)(((unsigned int)(m))&((unsigned int)(n))))==(n))
+
+
+#endif /* DRD64_INTEL64_HEADER_MAIN */
+
+/* EOF of drd64.h ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_asm.c b/libintel64asm/drd64_intel64_asm.c
new file mode 100644 (file)
index 0000000..d79421c
--- /dev/null
@@ -0,0 +1,1982 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+    
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_asm.c
+Function: Intel64 Line Assembler Main Module
+Comment:  none
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#include"drd64_intel64_dbtype.h"
+#include"drd64_intel64_db.h"
+#include"drd64_intel64_asm.h"
+#include"drd64_intel64_disasm.h"
+#include"drd64_intel64_asm_system.h"
+#define DRD64_SRC_LIBINTEL64ASM_FUNC
+#include"../include/libintel64asm.h"
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+       Drd64_Intel64_CarveStringBlock(
+               Drd64_Intel64_AssemblePacket *p_assemble,
+               char    *p_src)
+{
+       char    *p_now;
+       char    *p_temp;
+       char    *p_end;
+
+       p_now   = p_src;
+       do      {
+               if(( '\r' == *p_now ) || ( '\n' == *p_now ))    
+                       { *p_now        = '\0'; }
+       }while( '\0' != *(p_now++ + 1) );
+               
+       
+       p_now   = p_src;
+
+       /* Carve Instruction String --- */
+       do      {
+               if(( '\t' != *p_now ) && ( ' ' != *p_now))      { break; }
+       }while( '\0' != *(p_now++ + 1) );
+       p_temp  = p_now;
+
+       do      {
+               if(( '\t' == *p_now ) || ( ' ' == *p_now))      { break; }
+               *p_now  = tolower( *p_now );
+       }while( '\0' != *(p_now++ + 1) );
+       
+       strncpy( p_assemble->str_instruction, p_temp, (p_now - p_temp));
+
+       /* Carve Destination String --- */
+       do      {
+               if(( '\t' != *p_now ) && ( ' ' != *p_now))      { break; }
+       }while( '\0' != *(p_now++ + 1) );
+
+       if( '\0' != *p_now )    {
+               p_temp  = p_now;
+               do      {
+                       if( ',' == *p_now )     { break; }
+                       *p_now  = tolower( *p_now );
+               }while( '\0' != *(p_now++ + 1) );
+
+               if( p_temp == p_now )   { return 0xff; }
+
+               p_end   = p_now;
+               do      {
+                       if(( '\t' != *(p_end - 1)) && ( ' ' != *(p_end - 1)))   { break; }
+               }while( p_temp <= --p_end );
+               strncpy( p_assemble->str_destination, p_temp, (p_end - p_temp));
+               if( ',' == *p_now )             { p_now++; }
+       }
+
+       /* Carve Source String --- */
+       do      {
+               if(( '\t' != *p_now ) && ( ' ' != *p_now))      { break; }
+       }while( '\0' != *(p_now++ + 1) );
+
+       if( '\0' != *p_now )    {
+               p_temp  = p_now;
+               do      {
+                       if( ',' == *p_now )     { break; }
+                       *p_now  = tolower( *p_now );
+               }while( '\0' != *(p_now++ + 1) );
+
+               if( p_temp == p_now )   { return 0xff; }
+
+               p_end   = p_now;
+               do      {
+                       if(( '\t' != *(p_end - 1)) && ( ' ' != *(p_end - 1)))   { break; }
+               }while( p_temp <= --p_end );
+               strncpy( p_assemble->str_source, p_temp, (p_end - p_temp));
+               if( ',' == *p_now )             { p_now++; }
+       }
+
+       /* Carve Option String --- */
+       do      {
+               if(( '\t' != *p_now ) && ( ' ' != *p_now))      { break; }
+       }while( '\0' != *(p_now++ + 1) );
+
+       if( '\0' != *p_now )    {
+               p_temp  = p_now;
+               do      {
+                       *p_now  = tolower( *p_now );
+               }while( '\0' != *(p_now++ + 1) );
+
+               p_end   = p_now;
+               do      {
+                       if(( '\t' != *(p_end - 1)) && ( ' ' != *(p_end - 1)))   { break; }
+               }while( p_temp <= --p_end );
+               strncpy( p_assemble->str_option, p_temp, (p_now - p_temp));
+       }
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+Drd64_Intel64_OperandNode      *
+       Drd64_Intel64_ConstructOperand_RPNChain(
+               char    *pstr_operand)
+{
+       char    *pstr_now;
+       char    str_buffer[MAX_OPERAND];
+       char    *pstr_bufpos;
+       /* i_mode : 0=> Ignore  1=> Calc Mode.  2=>Data Stock. */
+       int             i_mode;
+       int             i_datas;
+
+       Drd64_Intel64_OperandNode       *p_stack;
+       Drd64_Intel64_OperandNode       *p_chain;
+       Drd64_Intel64_OperandNode       *p_cnow;
+
+       Drd64_Intel64_OperandNode       *p_data;
+       Drd64_Intel64_OperandNode       *p_operator;
+       Drd64_Intel64_OperandNode       *p_temp;
+       
+       pstr_now        = pstr_operand - 1;
+       i_mode          = 0x00;
+       i_datas         = 0;
+
+       p_chain         = NULL;
+       p_cnow          = NULL;
+       p_stack         = NULL;
+       p_data          = NULL;
+       p_operator      = NULL;
+       p_temp          = NULL;
+       pstr_bufpos     = str_buffer;
+       memset( str_buffer, 0x00, MAX_OPERAND );
+
+       while( '\0' != *(++pstr_now) )  {
+               /* Pattern 1 - Ignore Chr. --- */
+               if(( ' ' == *pstr_now ) || ( '\t' == *pstr_now ))
+                       { continue; }
+               /* Pattern 2 - Calc. Chr. --- */
+               else if(( '[' == *pstr_now ) || ( ']' == *pstr_now ) ||
+                               ( '+' == *pstr_now ) || ( '*' == *pstr_now ) ||
+                               ( '-' == *pstr_now ) || ( ':' == *pstr_now ))   {
+
+                       /* if Data Stock Mode => Proc. Data Ending ---*/
+                       if( 0x02 == i_mode )    {
+                               p_data  = Drd64_Intel64_AllocOperandNode();
+                               if( NULL == p_data )    { return NULL;  }
+                               strncpy( p_data->str_data, str_buffer, MAX_OPERAND );
+                               pstr_bufpos     = str_buffer;
+                               memset( str_buffer, 0x00, MAX_OPERAND );
+
+                               /* Chain Data ---*/
+                               if( NULL == p_chain )   {
+                                       p_chain = p_data;
+                                       p_cnow  = p_chain;
+                               }
+                               p_cnow->p_next          = p_data;
+                               p_data->p_before        = p_cnow;
+                               p_cnow                          = (void *)p_data;
+                       }
+
+                       i_mode  = 0x01;
+                       p_operator      = Drd64_Intel64_AllocOperandNode();
+                       if( NULL == p_operator )        { return NULL;  }
+                       p_operator->str_data[0] = *pstr_now;    
+
+                       /* Check Stack in Primery Operator ---*/
+                       if( NULL != p_stack )   {
+                               p_temp  = p_stack;
+                               do      {
+                                       if((( '+' == p_operator->str_data[0] ) ||
+                                                       ( '-' == p_operator->str_data[0] ) ||
+                                                       ( '*' == p_operator->str_data[0] )) &&
+                                                       ( ':' == p_temp->str_data[0]))  {
+                                               p_cnow->p_next          = p_temp;
+                                               p_temp->p_before        = p_cnow;
+                                               p_cnow                          = p_temp;
+                                               p_stack                         = p_temp->p_next;
+                                       }
+                                       else if((( '+' == p_operator->str_data[0] ) ||
+                                                       ( '-' == p_operator->str_data[0] )) &&
+                                                       ( '*' == p_temp->str_data[0]))  {
+                                               p_cnow->p_next          = p_temp;
+                                               p_temp->p_before        = p_cnow;
+                                               p_cnow                          = p_temp;
+                                               p_stack                         = p_temp->p_next;
+                                       }
+                                       else if(( '+' == p_operator->str_data[0] ) &&
+                                                       ( '-' == p_temp->str_data[0]))  {
+                                               p_cnow->p_next          = p_temp;
+                                               p_temp->p_before        = p_cnow;
+                                               p_cnow                          = p_temp;
+                                               p_stack                         = p_temp->p_next;
+                                       }
+                                       else if((( '[' == p_operator->str_data[0] ) ||
+                                                        ( ']' == p_operator->str_data[0] )) &&
+                                                       (( '+' == p_temp->str_data[0]) ||
+                                                        ( '-' == p_temp->str_data[0]) ||
+                                                        ( '*' == p_temp->str_data[0]) ||
+                                                        ( ':' == p_temp->str_data[0])))        {
+                                               p_cnow->p_next          = p_temp;
+                                               p_temp->p_before        = p_cnow;
+                                               p_cnow                          = p_temp;
+                                               p_stack                         = p_temp->p_next;
+                                       }
+                                       else
+                                               { break; }
+                                       p_temp  = p_temp->p_next;
+                               }while( NULL != p_temp ); 
+                       }
+
+                       /* Push Stack Operator --- */
+                       if( NULL != p_stack )   { p_stack->p_before     = p_operator; }
+                       p_operator->p_next      = p_stack;
+                       p_stack                         = (void *)p_operator;
+               }
+               /* Pattern 3 - Data Chr. --- */
+               else    {
+                       *pstr_bufpos++  = *pstr_now;
+                       i_mode                  = 0x02;
+               }       
+       }
+
+       if( 0x02 == i_mode )    {
+               p_data  = Drd64_Intel64_AllocOperandNode();
+               if( NULL == p_data )    { return NULL;  }
+               strncpy( p_data->str_data, str_buffer, MAX_OPERAND );
+               pstr_bufpos     = str_buffer;
+               memset( str_buffer, 0x00, MAX_OPERAND );
+
+               /* Chain Data ---*/
+               if( NULL == p_chain )   {
+                       p_chain = p_data;
+                       p_cnow  = p_chain;
+               }
+               else    {
+                       p_cnow->p_next          = p_data;
+               }
+               p_data->p_before        = p_cnow;
+               p_cnow                          = (void *)p_data;
+       }
+
+       /* Flash Stack Operaters --- */
+       if( NULL != p_stack )   {
+               p_temp  = p_stack;
+               do      {
+                       p_cnow->p_next          = p_temp;
+                       p_temp->p_before        = p_cnow;
+                       p_cnow                          = p_temp;
+                       p_stack                         = p_temp->p_next;
+                       p_temp  = p_temp->p_next;
+               }while( NULL != p_temp ); 
+       }
+
+       Drd64_Intel64_Debug_Asm_PrintOperandChain( p_chain );
+
+       return p_chain;
+}
+
+
+Drd64_Intel64_OperandNode *
+       Drd64_Intel64_CarveOperandSizePrefix(
+               Drd64_Intel64_OperandNode *p_chain)
+{
+       Drd64_Intel64_OperandNode       *p_ret;
+
+       p_ret   = p_chain;
+       if( !strncmp( p_chain->str_data, "byte", MAX_OPERAND ))
+               { p_chain->i_operandsize        = 1; }
+       else if( !strncmp( p_chain->str_data, "word", MAX_OPERAND ))
+               { p_chain->i_operandsize        = 2; }
+       else if( !strncmp( p_chain->str_data, "dword", MAX_OPERAND ))
+               { p_chain->i_operandsize        = 4; }
+       else if( !strncmp( p_chain->str_data, "qword", MAX_OPERAND ))
+               { p_chain->i_operandsize        = 8; }
+       else if( !strncmp( p_chain->str_data, "dqword", MAX_OPERAND ))
+               { p_chain->i_operandsize        = 16; }
+
+       p_chain->w_typeid       = OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE;
+
+       if( 0 < p_chain->i_operandsize )        {
+               p_ret   = p_chain->p_next;
+       }       
+
+       return p_ret;
+}
+
+
+int
+       Drd64_Intel64_CheckMemoryOperandFormat(
+               Drd64_Intel64_OperandNode *p_chain)
+{
+       Drd64_Intel64_OperandNode       *p_now;
+       Drd64_Intel64_OperandNode       *p_temp[2];
+       int             i_ret;
+
+       i_ret   = 0x00;
+
+       p_now   =       p_chain;
+       do      {
+               p_temp[0]       = p_now->p_next;
+
+               if( NULL != p_temp[0] ) {
+                       if( ']' == p_temp[0]->str_data[0] )     {
+                               p_temp[1]       = p_temp[0]->p_next;
+                               if( NULL == p_temp[1] )
+                                       { return -1; }
+                               if( '[' != p_temp[1]->str_data[0] ) 
+                                       { return -2; }
+                               if( NULL != p_temp[1]->p_next )
+                                       { return -3; }  
+       
+                               i_ret   = 1;
+                               p_now->p_next   = NULL; 
+                       }
+               }
+
+               p_now   = p_now->p_next;
+       }while( NULL != p_now );
+
+       if( 0 < i_ret )         {
+               p_now   = p_chain;
+               do      {
+                       p_now->b_flag_addr      = 0x01;
+                       p_now   = p_now->p_next;
+               }while( NULL != p_now );
+       }
+
+       return i_ret;
+}
+
+
+
+Drd64_Intel64_OperandNode      *
+       Drd64_Intel64_ConstructOperandTree(
+               Drd64_Intel64_OperandNode *p_chain)
+{
+       Drd64_Intel64_OperandNode       *p_root;
+       Drd64_Intel64_OperandNode       *p_temp;
+       Drd64_Intel64_OperandNode       *p_value[3];
+       char    *pstr_temp;
+       
+       p_temp  = p_chain;
+       do{
+               if(( '+' == p_temp->str_data[0] ) ||
+                               ( '*' == p_temp->str_data[0] ) ||
+                               ( ':' == p_temp->str_data[0] ) ||
+                               ( '-' == p_temp->str_data[0] )) {       
+                       p_value[1]      = p_temp->p_before;
+                       assert( NULL != p_value[1] );
+                       p_value[0]      = p_value[1]->p_before;
+                       assert( NULL != p_value[0] );
+
+                       p_value[0]->p_parent    = p_temp;
+                       p_value[1]->p_parent    = p_temp;
+                       p_temp->p_left                  = p_value[0];
+                       p_temp->p_right                 = p_value[1];
+
+                       p_temp->p_before                = p_value[0]->p_before;
+                       p_value[2]                              = p_value[0]->p_before;
+                       if( NULL != p_value[2] )
+                               { p_value[2]->p_next    = p_temp; }
+                       
+                       p_value[0]->p_before    = NULL;
+                       p_value[0]->p_next              = NULL;
+                       p_value[1]->p_before    = NULL;
+                       p_value[1]->p_next              = NULL;
+                       
+                       /* Proc Minus */
+                       if( '-' == p_temp->str_data[0] )        {
+                               if( '*' == p_value[1]->str_data[0] )    {
+                                       p_root  = NULL;
+                                       break;
+                               }
+
+                               pstr_temp       = p_value[1]->str_data + MAX_OPERAND;
+                               do      {
+                                       *pstr_temp      = *(pstr_temp - 1);
+                               }while( p_value[1]->str_data != --pstr_temp );
+                               *pstr_temp      = '-';
+                               p_temp->str_data[0]     = '+';
+                       }
+
+               }
+
+               if( NULL == p_temp->p_next )    { p_root        = p_temp; }
+               p_temp  = p_temp->p_next;
+       }while( NULL != p_temp );
+
+       return p_root;
+}
+
+
+
+int
+       Drd64_Intel64_ConvAsciiToValue(
+               QWord   *pqw_value,
+               int             *i_size,
+               char *pstr_value )
+{
+       char    *pstr_src;
+       int             i_flag_minus;
+       int             i_base;
+       int             i_flag_zero;
+       int             i_len;
+       int             i_pos;
+       int             i_num;
+       int             i_err;
+       QWord   qw_temp;
+
+       i_flag_minus    = 0x00;
+       i_flag_zero             = 0x00;
+       i_err                   = 0x00;
+       i_base                  = 10;
+       i_pos                   = 0;
+       qw_temp                 = 0;
+       pstr_src                = pstr_value;
+
+       /* Check 1 : Check String Length */
+       i_len   = strlen( pstr_value );
+       if( 0 == i_len )        { return 0x01; }
+
+       /* Check 2 : Check Hexical Value? */
+       if( 'h' == *(pstr_value + i_len - 1) )          {
+               i_base                  = 16;
+               i_len--;
+       }
+
+       /* Check 3 : Check Minus Value? */
+       if( '-' == *(pstr_value + 0) )  {
+               i_flag_minus    = 0x01;
+               pstr_src++;
+               i_len--;
+       }
+
+       do      {
+               if( isdigit( *pstr_src ) )      {
+                       if(( '0' == *pstr_src ) && ( 0x00 == i_flag_zero ))             {
+                               i_pos++;
+                               continue;
+                       }
+                       else    {
+                               i_flag_zero     = 0x01;
+                               /* XXX : Ascii Code Only! */
+                               qw_temp         = (qw_temp * i_base) + (*pstr_src - 0x30);              
+                               i_pos++;
+                       }
+               }
+               else if( 16 == i_base )         {
+                       if( 'a' == *pstr_src )                  { i_num = 10; }
+                       else if( 'b' == *pstr_src )             { i_num = 11; }
+                       else if( 'c' == *pstr_src )             { i_num = 12; }
+                       else if( 'd' == *pstr_src )             { i_num = 13; }
+                       else if( 'e' == *pstr_src )             { i_num = 14; }
+                       else if( 'f' == *pstr_src )             { i_num = 15; }
+                       else    { 
+                               i_err   = 0x02;
+                               break;
+                       }
+
+                       qw_temp         = (qw_temp * i_base) + i_num;           
+                       i_flag_zero     = 0x01;
+                       i_pos++;
+
+               }
+               else    {
+                       i_err   = 0x03;
+                       break;
+               }
+       }while(( '\0' != *pstr_src++ ) && ( --i_len > 0 ));
+
+       if( 0x00 != i_err )
+               { goto goto_Drd64_Intel64_ConvAsciiToValue_err; }
+
+       if(  2 >= i_pos )               { *i_size       = 1; }
+       else if(  4 >= i_pos )  { *i_size       = 2; }
+       else if(  8 >= i_pos )  { *i_size       = 4; }
+       else if( 16 >= i_pos )  { *i_size       = 8; }
+       else if( 16 <  i_pos )  { i_err = 0x03; }
+       
+       if( 0x00 != i_err )
+               { goto goto_Drd64_Intel64_ConvAsciiToValue_err; }
+
+       if( 0x01 == i_flag_minus )      {
+               if(( *i_size == 1 ) && ( 0x7f < qw_temp ))
+                       { i_err = 0x04; }
+               else if(( *i_size == 2 ) && ( 0x7fff < qw_temp ))
+                       { i_err = 0x04; }
+               else if(( *i_size == 4 ) && ( 0x7fffffff < qw_temp ))
+                       { i_err = 0x04; }
+               else if(( *i_size == 8 ) && ( 0x7fffffffffffffff < qw_temp ))
+                       { i_err = 0x04; }
+
+               if( 0x00 == i_err )     {
+                       qw_temp = (~qw_temp) + 1;
+               }
+       }
+
+       if( 0x00 != i_err )
+               { goto goto_Drd64_Intel64_ConvAsciiToValue_err; }
+
+       *pqw_value      = qw_temp;
+goto_Drd64_Intel64_ConvAsciiToValue_err:
+       return i_err;
+}
+
+
+int
+       Drd64_Intel64_SetOperandNodeInfo(
+               Drd64_Intel64_OperandNode *p_now)
+{
+       int     i_err;
+
+       i_err   = 0x00;
+       
+       if( 0x00 < i_err )       { return i_err; }
+
+       if( NULL != p_now->p_left )             {
+               i_err   = Drd64_Intel64_SetOperandNodeInfo( p_now->p_left );
+               if( 0x00 < i_err )       { return i_err; }
+       }
+        
+       if( NULL != p_now->p_right )    {
+               i_err = Drd64_Intel64_SetOperandNodeInfo( p_now->p_right );
+               if( 0x00 < i_err )       { return i_err; }
+       }
+
+       /* Set Info. My Node ---*/
+       if(( '*' != p_now->str_data[0] ) && 
+                       ( ':' != p_now->str_data[0] ) &&
+                       ( '+' != p_now->str_data[0] ))          {
+
+               /* Check 1 : String Is Register ? --- */
+               p_now->w_typeid
+                       =       Drd64_Intel64db_GetRegisterCode( p_now->str_data );
+               if( OPTYPE_REG_INVAILD != p_now->w_typeid )     {
+                       if( isBitFlag(p_now->w_typeid, OPTYPE_BASE_REG_64BIT))
+                               { p_now->i_operandsize  = 8; }
+                       else if( isBitFlag(p_now->w_typeid, OPTYPE_BASE_REG_32BIT))
+                               { p_now->i_operandsize  = 4; }
+                       else if( isBitFlag(p_now->w_typeid, OPTYPE_BASE_REG_16BIT))
+                               { p_now->i_operandsize  = 2; }
+                       else if( isBitFlag(p_now->w_typeid, OPTYPE_BASE_REG_8BIT))
+                               { p_now->i_operandsize  = 1; }
+                       else if( isBitFlag(p_now->w_typeid, OPTYPE_BASE_REG_8BIT))
+                               { p_now->i_operandsize  = 1; }
+                       else if( isRegType(p_now->w_typeid, OPTYPE_BASE_REG_MMX))
+                               { p_now->i_operandsize  = 8; }
+                       else if( isRegType(p_now->w_typeid, OPTYPE_BASE_REG_SSE))
+                               { p_now->i_operandsize  = 16; }
+                       else if( isRegType(p_now->w_typeid, OPTYPE_BASE_REG_CONTROL))
+                               { p_now->i_operandsize  = 8; }
+                       else if( isRegType(p_now->w_typeid, OPTYPE_BASE_REG_DEBUG))
+                               { p_now->i_operandsize  = 8; }
+                       else if( isRegType(p_now->w_typeid, OPTYPE_BASE_REG_SEGMENT))
+                               { p_now->i_operandsize  = 2; }
+                       else
+                               { p_now->i_operandsize  = -1; }
+               }
+               /* Check 2 : String Is Value ? --- */
+               else    {
+                       i_err   = Drd64_Intel64_ConvAsciiToValue(
+                                               &(p_now->v_val.val.val64),
+                                               &(p_now->v_val.i_bytes),
+                                               p_now->str_data );
+                       if( 0x00 == i_err )             {
+                               p_now->w_typeid = OPTYPE_BASE_DATA_IMMEDIATE_IMM;
+                               p_now->i_operandsize    = p_now->v_val.i_bytes;
+                       }
+               }
+       }
+       else    {
+               p_now->w_typeid = OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR;
+       }
+
+       return i_err;
+}
+
+
+Drd64_Intel64_OperandNode *
+       Drd64_Intel64_CarveSegmentPrefix_Sub(
+               Drd64_Intel64_OperandNode *p_now)
+{
+       Drd64_Intel64_OperandNode *p_ret;
+
+       p_ret   = NULL;
+
+       if( NULL == p_now )             { return NULL; }
+
+       p_ret   = Drd64_Intel64_CarveSegmentPrefix_Sub( p_now->p_left );
+       if( NULL != p_ret )             { return p_ret; }
+       
+       p_ret   = Drd64_Intel64_CarveSegmentPrefix_Sub( p_now->p_right );
+       if( NULL != p_ret )             { return p_ret; }
+
+
+       if( ':' == p_now->str_data[0] ) {
+               assert( NULL != p_now->p_left );
+               assert( NULL != p_now->p_right );
+
+               if( isRegType( 
+                               ((Drd64_Intel64_OperandNode *)(p_now->p_left))->w_typeid,
+                               OPTYPE_BASE_REG_SEGMENT))       {
+
+                       p_ret   = p_now->p_left;
+
+                       memcpy( p_now, p_now->p_right, sizeof(Drd64_Intel64_OperandNode));
+               }
+               else    {
+                       p_ret   = p_now;
+               }
+       }
+
+       return p_ret;
+}
+
+
+int
+       Drd64_Intel64_CarveSegmentPrefix(
+               Drd64_Intel64_AssemblePacket *p_assemble,
+               Drd64_Intel64_OperandNode *p_now)
+{
+       Drd64_Intel64_OperandNode *p_ret;
+
+       p_ret   = Drd64_Intel64_CarveSegmentPrefix_Sub( p_now );
+
+       if( NULL != p_ret )     {
+               if( ':' == p_ret->str_data[0] )
+                       { return 0x01; }
+               else
+                       { p_assemble->p_segment = p_ret; }
+       }
+
+       return 0x00;
+}
+
+int
+       Drd64_Intel64_CheckOperandNode_Operator(
+               Drd64_Intel64_OperandNode *p_now,
+               int *pi_plus,
+               int     *pi_accum,
+               int     *pi_imm)
+{
+       int     i_err;
+
+       if( NULL == p_now)
+               { return 0x00;  }
+
+       i_err   = Drd64_Intel64_CheckOperandNode_Operator(
+                               p_now->p_left, pi_plus, pi_accum, pi_imm );
+       if( 0x00 != i_err )             { return i_err; }
+
+       i_err   = Drd64_Intel64_CheckOperandNode_Operator(
+                               p_now->p_right, pi_plus, pi_accum, pi_imm );
+       if( 0x00 != i_err )             { return i_err; }
+
+       if( '+' == p_now->str_data[0] )
+               { (*pi_plus)++; }
+       else if( '*' == p_now->str_data[0] ) {
+
+               (*pi_accum)++;
+               
+               assert( NULL != p_now->p_left );
+               assert( NULL != p_now->p_right );
+
+               if( isBitFlag( 
+                               ((Drd64_Intel64_OperandNode *)(p_now->p_left))->w_typeid,
+                               OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR))   {
+                       return 0xfd;
+               }
+
+               if( isBitFlag( 
+                               ((Drd64_Intel64_OperandNode *)(p_now->p_right))->w_typeid,
+                               OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR))   {
+                       return 0xfc;
+               }
+       }
+       else if( isBitFlag( p_now->w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_IMM ))  {
+               (*pi_imm)++;
+       }
+       
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_ExchangeChildOperandNode(
+               Drd64_Intel64_OperandNode *p_root )
+{
+       Drd64_Intel64_OperandNode       *p_temp[2];
+       Drd64_Intel64_OperandNode       *p_bak;
+       Word    w_type[2];
+
+       if(( NULL == p_root->p_left ) && ( NULL == p_root->p_right ))   {
+               return 0x00;
+       }
+       else if(( NULL == p_root->p_left ) || ( NULL == p_root->p_right ))      {
+               return 0x01;
+       }
+
+       p_temp[0]       = p_root->p_left;
+       w_type[0]       = p_temp[0]->w_typeid;
+
+       p_temp[1]       = p_root->p_right;
+       w_type[1]       = p_temp[1]->w_typeid;
+       
+       if((( !isBitFlag(w_type[0],OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR)) &&
+                ( isBitFlag(w_type[1],OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR))) ||
+               (( '*' == p_temp[0]->str_data[0] ) &&
+                ( '+' == p_temp[1]->str_data[0] )) ||
+               (( isBitFlag(w_type[0],OPTYPE_BASE_DATA_IMMEDIATE_IMM) ) &&
+                ( !isBitFlag(w_type[1],OPTYPE_BASE_DATA))))    {
+               p_bak   = p_root->p_left;
+               p_root->p_left  = p_root->p_right;
+               p_root->p_right = p_bak;
+       }
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_SortOperandNode(
+               Drd64_Intel64_OperandNode *p_root )
+{
+       Drd64_Intel64_OperandNode       *p_temp;
+       Drd64_Intel64_OperandNode       *p_bak;
+       Word    w_type;
+       int             i_err;
+       
+       i_err   = Drd64_Intel64_ExchangeChildOperandNode( p_root );
+       if( 0x00 != i_err )             { return 0x01;  }
+
+       /* Level 1 - Right */
+       p_temp  = p_root->p_right;
+       if( NULL != p_temp )    {
+               w_type  = p_temp->w_typeid;
+               if( OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR == w_type )             {
+                       i_err   = Drd64_Intel64_ExchangeChildOperandNode( p_temp );
+                       if( 0x00 != i_err )             { return 0x01;  }
+               }
+       }
+
+       /* Level 1 - Left */
+       p_temp  = p_root->p_left;
+       if( NULL != p_temp )    { 
+               w_type  = p_temp->w_typeid;
+               if( OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR == w_type )             {
+                       i_err   = Drd64_Intel64_ExchangeChildOperandNode( p_temp );
+                       if( 0x00 != i_err )             { return 0x01;  }
+               }
+
+               /* Level 2 - Left */
+               p_temp  = p_temp->p_left;
+               if( NULL != p_temp )    {
+                       w_type  = p_temp->w_typeid;
+                       if( OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR == w_type)      {
+                               i_err   = Drd64_Intel64_ExchangeChildOperandNode( p_temp );
+                               if( 0x00 != i_err )             { return 0x01;  }
+                       }
+               }
+       }
+
+       return 0x00;
+}
+
+
+void
+       Drd64_Intel64_CalcOperandSize_AddressMode(
+               Drd64_Intel64_OperandNode *p_now )
+{
+       if( NULL == p_now)       { return;      }
+
+       Drd64_Intel64_CalcOperandSize_AddressMode( p_now->p_left );
+
+       Drd64_Intel64_CalcOperandSize_AddressMode( p_now->p_right );
+
+       if( isBitFlag( p_now->w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR ))  {
+               assert( NULL != p_now->p_left );
+               assert( NULL != p_now->p_right );
+
+               if( ((Drd64_Intel64_OperandNode *)p_now->p_left)->i_operandsize <
+                               ((Drd64_Intel64_OperandNode *)p_now->p_right)->i_operandsize ) {
+                       p_now->i_operandsize    = 
+                               ((Drd64_Intel64_OperandNode *)p_now->p_right)->i_operandsize;
+               }
+               else    {
+                       p_now->i_operandsize    = 
+                               ((Drd64_Intel64_OperandNode *)p_now->p_left)->i_operandsize;
+               }
+       }
+
+       return;
+}
+
+
+void
+       Drd64_Intel64_CalcAddressSize_AddressMode(
+               Drd64_Intel64_OperandNode *p_now )
+{
+       if( NULL == p_now)       { return;      }
+
+       if( NULL != p_now->p_parent )   {
+               p_now->i_addressize     =
+                       ((Drd64_Intel64_OperandNode *)p_now->p_parent)->i_addressize;
+       }
+
+       Drd64_Intel64_CalcAddressSize_AddressMode( p_now->p_left );
+       Drd64_Intel64_CalcAddressSize_AddressMode( p_now->p_right );
+       
+       return;
+}
+
+
+int
+       Drd64_Intel64_CheckRegister_AddressMode(
+               Drd64_Intel64_OperandNode *p_now )
+{
+       int             i_err;
+
+       if( NULL == p_now)       { return 0x00; }
+
+       i_err   = Drd64_Intel64_CheckRegister_AddressMode( p_now->p_left );
+       if( 0x00 != i_err )             { return i_err; }
+
+       i_err   = Drd64_Intel64_CheckRegister_AddressMode( p_now->p_right );
+       if( 0x00 != i_err )             { return i_err; }
+
+       if( !isBitFlag( p_now->w_typeid, OPTYPE_BASE_DATA ))    {
+               if( (p_now->w_typeid & OPTYPE_BASE_REG_TYPEMASK)
+                               != OPTYPE_BASE_REG_GENERIC )    {
+                       /* Rip */
+                       if( ((Word)p_now->w_typeid) != OPTYPE_REG_RIP ) {
+                               return 0x01;
+                       }
+               }
+               if(( !isBitFlag( p_now->w_typeid, OPTYPE_BASE_REG_64BIT )) &&
+                               ( !isBitFlag( p_now->w_typeid, OPTYPE_BASE_REG_32BIT )))        {
+                       return 0x02;
+               }
+       }
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_CheckOperandNode(
+               Drd64_Intel64_OperandNode *p_now)
+{
+       int     i_plus_num;
+       int     i_accum_num;
+       int     i_imm_num;
+       int     i_err;
+       Drd64_Intel64_OperandNode       *p_leaf[3];
+       Drd64_Intel64_OperandNode       *p_left;
+
+       i_plus_num      = 0;
+       i_accum_num     = 0;
+       i_imm_num       = 0;
+
+       i_err   = Drd64_Intel64_CheckOperandNode_Operator(
+                                       p_now, &i_plus_num, &i_accum_num, &i_imm_num );
+       if( 0x00 != i_err )             { return i_err; }
+
+       /* Value Mode --- */
+       if( 0x00 == p_now->b_flag_addr )        {
+               if( 0 < i_plus_num )    { return 0x04; }
+               if( 0 < i_accum_num )   { return 0x05; }
+
+               assert( NULL == p_now->p_left );
+               assert( NULL == p_now->p_right );
+               
+       }
+       /* Address Mode ---*/
+       else    {
+               if( 2 < i_plus_num )    { return 0x02; }
+               if( 1 < i_accum_num )   { return 0x03; }
+
+               i_err   = Drd64_Intel64_SortOperandNode( p_now );
+               if( 0x00 != i_err )             { return i_err; }
+
+               if( 2 == i_plus_num )   {
+                       p_left          = p_now->p_left;
+                       p_leaf[0]       = p_left->p_left;
+                       p_leaf[1]       = p_left->p_right;
+                       p_leaf[2]       = p_now->p_right;
+       
+                       assert( NULL != p_leaf[0] );
+                       assert( NULL != p_leaf[1] );
+                       assert( NULL != p_leaf[2] );
+       
+                       /* XXX */
+                       if( (1 + i_accum_num) < i_imm_num )     { return 0x04; }
+                       
+                       if( 0 == i_imm_num )    { return 0x05; }
+                       
+                       if( isBitFlag( p_leaf[1]->w_typeid,
+                                               OPTYPE_BASE_DATA_IMMEDIATE_IMM ))       {
+                               p_left->p_right = p_leaf[2];
+                               p_now->p_right  = p_leaf[1];
+               
+                               i_err   = Drd64_Intel64_SortOperandNode( p_now );
+                               if( 0x00 != i_err )             { return i_err; }
+                       }
+               }
+
+
+               /* Check Register is Generic? */
+               i_err   = Drd64_Intel64_CheckRegister_AddressMode( p_now );
+               if( 0x00 != i_err )             { return i_err; }
+
+               /* Check Accumlate Operator */
+               if( 0 < i_accum_num )   {
+                       if( 0 == i_plus_num )   {
+                               p_left  = p_now;
+                       }
+                       else if( 1 == i_plus_num )      {
+                               p_left  = p_now->p_left;
+                               assert( NULL != p_left );
+                       }
+                       else if( 2 == i_plus_num )      {
+                               p_left  = p_now->p_left;
+                               assert( NULL != p_left );
+                               p_left  = p_left->p_left;
+                               assert( NULL != p_left );
+                       }
+
+                       assert( '*' == p_left->str_data[0] );
+
+                       p_left  = p_left->p_right;
+                       assert( NULL != p_left );
+                       if( !isBitFlag( p_left->w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_IMM ))
+                               { return 0x06; }
+                       if(( '2' != p_left->str_data[0] ) && 
+                                       ( '4' != p_left->str_data[0] ) && 
+                                       ( '8' != p_left->str_data[0] ))         {
+                               return 0x07;
+                       }
+                       /* XXX : '1' is Break Node */
+               }
+       }
+
+       return i_err;
+}
+
+
+Drd64_Intel64_OperandNode *
+       Drd64_Intel64_CheckOperand(
+               char    *pstr_operand,
+               Drd64_Intel64_AssemblePacket *p_assemble )
+{
+       int             i_err;
+       int             i_operand_pattern;
+       Drd64_Intel64_OperandNode       *p_chain;
+       Drd64_Intel64_OperandNode       *p_root;
+       Drd64_Intel64_OperandNode       *p_temp;
+       Drd64_Intel64_OperandNode       *p_opesize_prefix;
+       
+       /* Phase 1 : Construct Reverse Poland Chain ---*/
+       p_chain = Drd64_Intel64_ConstructOperand_RPNChain( pstr_operand );
+       if( NULL == p_chain )   { return NULL; } 
+
+       /* Phase 2 : Carve Operand Size Prefix --- */
+       p_opesize_prefix        = NULL;
+       p_temp  = Drd64_Intel64_CarveOperandSizePrefix(p_chain);
+       if( p_temp != p_chain )         {
+               p_opesize_prefix        = p_chain;
+               p_chain                         = p_temp;
+       }
+
+       /* Phase 3 : Check Memory Format ---*/
+       i_operand_pattern       = Drd64_Intel64_CheckMemoryOperandFormat( p_chain );
+       if( 0 > i_operand_pattern )             {
+               return NULL;
+       }
+
+       /* Phase 4 : Construct Operand Tree from RPN Chain --- */
+       p_root  = Drd64_Intel64_ConstructOperandTree( p_chain );
+       if( NULL == p_root )    { return NULL; } 
+
+       i_err   = Drd64_Intel64_SetOperandNodeInfo( p_root );
+       if( 0x00 != i_err )             { return NULL; }
+
+       i_err   = Drd64_Intel64_CarveSegmentPrefix( p_assemble, p_root );
+       if( 0x00 != i_err )             { return NULL; }
+
+       i_err   = Drd64_Intel64_CheckOperandNode( p_root );
+       if( 0x00 != i_err )             { return NULL; }
+
+       /* Calc Operand Size */
+       Drd64_Intel64_CalcOperandSize_AddressMode( p_root );
+       p_root->i_addressize    = p_root->i_operandsize;
+
+       /* Calc Address Size */
+       Drd64_Intel64_CalcAddressSize_AddressMode( p_root );
+
+       /* */
+       if( 0x00 != p_root->b_flag_addr )       {
+               if( NULL == p_opesize_prefix )          {
+                       p_opesize_prefix        = Drd64_Intel64_AllocOperandNode();
+                       if( NULL == p_opesize_prefix )  { return NULL; }
+                       p_opesize_prefix->w_typeid      = OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE;
+                       p_opesize_prefix->i_operandsize = 8;
+               }
+
+               p_opesize_prefix->i_addressize  = p_root->i_addressize;
+               p_opesize_prefix->p_left                = p_root;
+               p_root                                                  = p_opesize_prefix;
+       }
+
+       return p_root;
+}
+
+
+int
+       Drd64_Intel64_SetAnalyzePacket_OperandMemory(
+               Drd64_Intel64_AnalyzePacket             *p_analyze,
+               Drd64_Intel64_OperandNode               *p_head,
+               Word    w_typeid,
+               Word    w_sizeid)
+{
+       Drd64_Intel64_OperandNode       *p_root;
+       Drd64_Intel64_OperandNode       *p_base;
+       Drd64_Intel64_OperandNode       *p_index;
+       Drd64_Intel64_OperandNode       *p_scale;
+       Drd64_Intel64_OperandNode       *p_disp;
+       Drd64_Intel64_OperandNode       *p_temp[4];
+       Word    w_temp;
+
+       p_root  = p_head->p_left;
+       assert( NULL != p_root );
+
+       p_base  = NULL;
+       p_index = NULL;
+       p_scale = NULL;
+       p_disp  = NULL;
+
+       /* Pattern 3 : IndexReg + Scale */
+       if( '*' == p_root->str_data[0] )        {
+               p_index = p_root->p_left;
+               p_scale = p_root->p_right;
+
+               p_analyze->i_sib_bytes  = 1;
+       }
+       else if( '+' == p_root->str_data[0] )   {
+               p_temp[0]       = p_root->p_left;
+               p_temp[1]       = p_root->p_right;
+
+               /* Level 1 right */
+               if( isRegType( p_temp[1]->w_typeid, OPTYPE_BASE_REG_GENERIC ) ) {
+                       p_base  = p_temp[1];
+               }
+               else if( OPTYPE_BASE_DATA_IMMEDIATE_IMM
+                                               == p_temp[1]->w_typeid )        {
+                       p_disp  = p_temp[1];
+               }
+
+               /* Level 1 left */
+               /* Pattern 6 : Index * Scale + Disp */
+               if( '*' == p_temp[0]->str_data[0] )     {
+                       p_index = p_temp[0]->p_left;
+                       p_scale = p_temp[0]->p_right;
+
+                       p_analyze->i_sib_bytes  = 1;
+               }
+               else if( '+' == p_temp[0]->str_data[0] )        {
+                       p_temp[2]       = p_temp[0]->p_left;
+                       p_temp[3]       = p_temp[0]->p_right;
+
+                       assert( NULL == p_base );
+                       p_base = p_temp[3];
+                       assert( NULL != p_disp );
+                       
+                       /* Pattern 5 : Index * Scale + Base + Disp */
+                       if( '*' == p_temp[2]->str_data[0] )     {
+                               p_index = p_temp[2]->p_left;
+                               p_scale = p_temp[2]->p_right;
+
+                               p_analyze->i_sib_bytes  = 1;
+                       }
+                       /* Pattern 4 : Index + Base + Disp */
+                       else if( isRegType( p_temp[2]->w_typeid,
+                                               OPTYPE_BASE_REG_GENERIC ))      {
+                               p_index = p_temp[2];
+       
+                               /* p_scale      = *1 */
+                               p_scale = Drd64_Intel64_AllocOperandNode();
+                               if( NULL == p_scale )   { return 0x01; }
+                               p_scale->str_data[0]    = '1';
+                               p_scale->v_val.val.val64        = 1;
+                               p_scale->v_val.i_bytes          = 1;
+                               p_scale->w_typeid       = OPTYPE_BASE_DATA_IMMEDIATE_IMM;
+                               p_scale->b_flag_addr    = 0xff;
+                               p_scale->i_operandsize  = 1;
+                               p_scale->i_addressize   = 1;
+
+                               p_analyze->i_sib_bytes  = 1;
+                       }
+               }
+               else if( isRegType( p_temp[0]->w_typeid,
+                                               OPTYPE_BASE_REG_GENERIC ))      {
+                       /* Pattern 2-1 : Base + Disp */
+                       if( NULL == p_base )    {
+                               p_base  = p_temp[0];
+                       }
+                       /* Pattern 2-2 : Index * 1 + Base */
+                       else    {
+                               p_index = p_temp[0];
+
+                               /* p_scale      = *1 */
+                               p_scale = Drd64_Intel64_AllocOperandNode();
+                               if( NULL == p_scale )   { return 0x01; }
+                               p_scale->str_data[0]    = '1';
+                               p_scale->v_val.val.val64        = 1;
+                               p_scale->v_val.i_bytes          = 1;
+                               p_scale->w_typeid       = OPTYPE_BASE_DATA_IMMEDIATE_IMM;
+                               p_scale->b_flag_addr    = 0xff;
+                               p_scale->i_operandsize  = 1;
+                               p_scale->i_addressize   = 1;
+
+                               p_analyze->i_sib_bytes  = 1;
+                       }
+               }
+               else if( ((Word)p_temp[0]->w_typeid) == OPTYPE_REG_RIP )        {
+                       if( NULL != p_base )    { return 0x02; }
+                       p_base  = p_temp[0];
+               }
+       }
+       /* Pattern 1-2 : Disp. Only */
+       /* XXX
+               else if( (unsigned int)OPTYPE_BASE_DATA_IMMEDIATE_IMM
+                       == p_root->w_typeid )   { */
+       else if( isBitFlag(p_root->w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_IMM))   {
+               p_disp  = p_root;
+
+               p_analyze->i_sib_bytes  = 1;
+       }
+       /* Pattern 1-1 : Reg. Only */
+       else if( !isBitFlag( p_root->w_typeid, OPTYPE_BASE_DATA) )      {
+               p_base  = p_root;
+
+               /* Support [?BP] => p_disp      = 0 */
+               /* XXX
+                       if( (((Word)p_base->w_typeid) & OPTYPE_BASE_REG_GENERIC_IDMASK )
+                               == OPTYPE_BASE_REG_GENERIC_BP ) { */
+               if( isRegType( p_base->w_typeid, OPTYPE_BASE_REG_GENERIC ))     {
+                       if((isRegGenericID(p_base->w_typeid,
+                                               OPTYPE_BASE_REG_GENERIC_BP)) ||
+                                       (isRegGenericID(p_base->w_typeid,
+                                               OPTYPE_BASE_REG_GENERIC_R13)))  {
+
+                               p_disp = Drd64_Intel64_AllocOperandNode();
+                               if( NULL == p_disp )    { return 0x01; }
+
+                               p_disp->str_data[0]     = '0';
+                               p_disp->v_val.val.val64 = 0;
+                               p_disp->v_val.i_bytes           = 1;
+                               p_disp->w_typeid        = OPTYPE_BASE_DATA_IMMEDIATE_IMM;
+                               p_disp->b_flag_addr     = 0xff;
+                               p_disp->i_operandsize   = 1;
+                               p_disp->i_addressize    = 1;
+       
+                               p_analyze->i_sib_bytes  = 1;
+                       }
+               }
+       }
+       /* Illegal Pattern */
+       else    {
+               return 0x02;
+       }
+
+       /* Set Displacement */
+       if( NULL != p_disp )    {
+               assert( 0 == p_analyze->v_disp.i_bytes );
+
+               p_analyze->v_disp.i_bytes       = p_disp->v_val.i_bytes;
+               p_analyze->v_disp.val.val64     = p_disp->v_val.val.val64;
+       }
+
+       /* [RIP + disp] Support Code */
+       if( ((Word)p_temp[0]->w_typeid) == OPTYPE_REG_RIP )     {
+               p_analyze->modrm.modrm.mod      = 0x00;
+               p_analyze->modrm.modrm.rm       = 0x05;
+
+               p_analyze->v_disp.i_bytes       = 4;
+       }
+       else    {
+               /* Support [?SP + disp?] => SiB = 1Bytes */
+               if( NULL != p_base )    {
+                       if( isRegType( p_base->w_typeid, OPTYPE_BASE_REG_GENERIC ))     {
+                               if((isRegGenericID( p_base->w_typeid,
+                                                       OPTYPE_BASE_REG_GENERIC_SP )) ||
+                                               (isRegGenericID( p_base->w_typeid,
+                                                       OPTYPE_BASE_REG_GENERIC_R12 ))) 
+                                       { p_analyze->i_sib_bytes        = 1; }
+                       }
+               }
+
+               /* Mod */
+               if( NULL == p_disp )
+                       { p_analyze->modrm.modrm.mod    = 0x00; }
+               else if( 1 == p_disp->i_operandsize )
+                       { p_analyze->modrm.modrm.mod    = 0x01; }
+               else
+                       { p_analyze->modrm.modrm.mod    = 0x02; }
+
+
+               /* R/M */
+               /* SiB */
+               if( 0 < p_analyze->i_sib_bytes )        {
+                       /* index */
+                       if( NULL != p_index )   {
+                               w_temp = ( p_index->w_typeid & OPTYPE_BASE_REG_IDMASK ) >> 8;
+                               p_analyze->sib.sib.index        = w_temp & 0x0007;
+                               p_analyze->rex.rex.x            = (w_temp & 0x0008) >> 3;
+                       }
+                       else    {
+                               p_analyze->sib.sib.index        = 0x0004;
+                       }
+
+                       /* Scale */
+                       if( NULL != p_scale )   {
+                               if(( 0x00 != p_analyze->rex.rex.x )
+                                               || ( 0x0004 != p_analyze->sib.sib.index ))      {
+                                       if( 1 == p_scale->v_val.val.val64 )
+                                               { p_analyze->sib.sib.scale      = 0x00; }
+                                       else if( 2 == p_scale->v_val.val.val64 )
+                                               { p_analyze->sib.sib.scale      = 0x01; }
+                                       else if( 4 == p_scale->v_val.val.val64 )
+                                               { p_analyze->sib.sib.scale      = 0x02; }
+                                       else if( 8 == p_scale->v_val.val.val64 )
+                                               { p_analyze->sib.sib.scale      = 0x03; }
+                               }
+                       }
+
+                       /* Base */
+                       if( NULL != p_base )    {
+                               w_temp  = ( p_base->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+                               p_analyze->sib.sib.base         = w_temp & 0x0007;
+                               p_analyze->rex.rex.b            = (w_temp & 0x0008) >> 3;
+       
+                       }
+                       else    {
+                               p_analyze->sib.sib.base = 0x05;
+       
+                               if(( NULL == p_scale ) && ( NULL != p_disp ))
+                                       { p_analyze->modrm.modrm.mod    = 0x00; }
+                       }
+       
+                       p_analyze->modrm.modrm.rm       = 0x04;
+               }
+               else    {
+                       if( NULL != p_base )    {
+                               w_temp  = ( p_base->w_typeid & OPTYPE_BASE_REG_IDMASK ) >> 8;
+                               p_analyze->modrm.modrm.rm       = w_temp & 0x0007;
+                               p_analyze->rex.rex.b            = (w_temp & 0x0008) >> 3;
+                       }
+               }
+       }
+
+       /* Debug Print */
+       Drd64_Intel64_Debug_Asm_PrintMemoryOperand(
+                                               p_index, p_scale, p_base, p_disp);
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_SetAnalyzePacket_Operand(
+               Drd64_Intel64_AnalyzePacket             *p_analyze,
+               Drd64_Intel64_OperandNode               *p_root,
+               Word    w_typeid,
+               Word    w_sizeid)
+{
+       Word    w_temp;
+       Byte    b_temp;
+
+       /* T : [ModR/M:reg] Test Reg. ( Reserved ) */
+       /* C : [ModR/M:reg] Control Reg.  */
+       if( OPTYPE_DATA_METHOD_C == w_typeid )  {
+               w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+               p_analyze->modrm.modrm.reg      = (w_temp & 0x0007);
+               p_analyze->rex.rex.r            = (w_temp & 0x0008) >> 3;
+       }
+       /* D : [ModR/M:reg] Debug Reg. */
+       else if( OPTYPE_DATA_METHOD_D == w_typeid )     {
+               w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+               p_analyze->modrm.modrm.reg      = (w_temp & 0x0007);
+               p_analyze->rex.rex.r            = (w_temp & 0x0008) >> 3;
+       }
+       /* G : [ModR/M:reg] General Reg. */
+       else if( OPTYPE_DATA_METHOD_G == w_typeid )     {
+               w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+               p_analyze->modrm.modrm.reg      = (w_temp & 0x0007);
+               p_analyze->rex.rex.r            = (w_temp & 0x0008) >> 3;
+       }
+       /* R : [ModR/M:R/M] refer to General Reg by R/M Field */
+       else if( OPTYPE_DATA_METHOD_R == w_typeid )     {
+               w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+               p_analyze->modrm.modrm.rm       = (w_temp & 0x0007);
+               p_analyze->rex.rex.b            = (w_temp & 0x0008) >> 3;
+               p_analyze->modrm.modrm.mod      = 0x03;
+       }
+       /* P : [ModR/M:reg] Packed-QuadWord MMX Reg. */
+       else if( OPTYPE_DATA_METHOD_P == w_typeid )     {
+               w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+               p_analyze->modrm.modrm.reg      = (w_temp & 0x0007);
+               p_analyze->rex.rex.r            = (w_temp & 0x0008) >> 3;
+       }
+       /* N : [ModR/M:R/M] Packed-QuadWord MMX Reg. */
+       else if( OPTYPE_DATA_METHOD_N == w_typeid )     {
+               w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+               p_analyze->modrm.modrm.rm       = (w_temp & 0x0007);
+               p_analyze->rex.rex.b            = (w_temp & 0x0008) >> 3;
+               p_analyze->modrm.modrm.mod      = 0x03;
+       }
+       /* V : [ModR/M:reg] 128bit XMM Reg. */
+       else if( OPTYPE_DATA_METHOD_V == w_typeid )     {
+               w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+               p_analyze->modrm.modrm.reg      = (w_temp & 0x0007);
+               p_analyze->rex.rex.r            = (w_temp & 0x0008) >> 3;
+       }
+       /* U : [ModR/M:R/M] 128bit XMM Reg. */
+       else if( OPTYPE_DATA_METHOD_U == w_typeid )     {
+               w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+               p_analyze->modrm.modrm.rm       = (w_temp & 0x0007);
+               p_analyze->rex.rex.b            = (w_temp & 0x0008) >> 3;
+               p_analyze->modrm.modrm.mod      = 0x03;
+       }
+       /* S : [ModR/M:reg] Segment Reg. */
+       else if( OPTYPE_DATA_METHOD_S == w_typeid )     {
+               w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+               p_analyze->modrm.modrm.reg      = (w_temp & 0x0007);
+               p_analyze->rex.rex.r            = (w_temp & 0x0008) >> 3;
+       }
+       /* E : [ModR/M] Memory & Reg. */
+       else if( OPTYPE_DATA_METHOD_E == w_typeid )     {
+               /* General Reg. */
+               if( isRegType( p_root->w_typeid, OPTYPE_BASE_REG_GENERIC ) )    {
+                       w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+                       p_analyze->modrm.modrm.rm       = (w_temp & 0x0007);
+                       p_analyze->rex.rex.b            = (w_temp & 0x0008) >> 3;
+                       p_analyze->modrm.modrm.mod      = 0x03; 
+               }
+               /* Memory Address */
+               else    {
+                       Drd64_Intel64_SetAnalyzePacket_OperandMemory(
+                                       p_analyze, p_root, w_typeid, w_sizeid);
+               }
+       }
+       /* W : [ModR/M] 128bit XMM Reg. or Memory Address 
+        ( Memory Address calculated by Seg.Reg. BaseReg. IndexReg. 
+            ScalingFactor, Displacement */
+       else if( OPTYPE_DATA_METHOD_W == w_typeid )     {
+               /* XMM Reg. */
+               if( isRegType( p_root->w_typeid, OPTYPE_BASE_REG_SSE ) )        {
+                       w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+                       p_analyze->modrm.modrm.rm       = (w_temp & 0x0007);
+                       p_analyze->rex.rex.b            = (w_temp & 0x0008) >> 3;
+                       p_analyze->modrm.modrm.mod      = 0x03; 
+               }
+               /* Memory Address */
+               else    {
+                       Drd64_Intel64_SetAnalyzePacket_OperandMemory(
+                                       p_analyze, p_root, w_typeid, w_sizeid);
+               }
+       }
+       /* Q : [ModR/M] MMX reg. or Memory Address 
+        ( Memory Address calced by Seg.Reg, BaseReg. IndexReg. 
+            ScalingFactor, Displacement */
+       else if( OPTYPE_DATA_METHOD_Q == w_typeid )     {
+               /* MMX Reg. */
+               if( isRegType( p_root->w_typeid, OPTYPE_BASE_REG_MMX ) )        {
+                       w_temp  = (p_root->w_typeid & OPTYPE_BASE_REG_IDMASK) >> 8;
+                       p_analyze->modrm.modrm.rm       = (w_temp & 0x0007);
+                       p_analyze->rex.rex.b            = (w_temp & 0x0008) >> 3;
+                       p_analyze->modrm.modrm.mod      = 0x03; 
+               }
+               /* Memory Address */
+               else    {
+                       Drd64_Intel64_SetAnalyzePacket_OperandMemory(
+                                       p_analyze, p_root, w_typeid, w_sizeid);
+               }
+       }
+       /* M : Memory Access (by ModR/M) (NO!!: Reg. Indicate by ModR/M) */
+       else if( OPTYPE_DATA_METHOD_M == w_typeid )     {
+               Drd64_Intel64_SetAnalyzePacket_OperandMemory(
+                               p_analyze, p_root, w_typeid, w_sizeid);
+       }
+       /* A : Direct Address (NO!!: ModR/M, BaseReg, IndexReg, ScalingFactor) */
+       /* else if( OPTYPE_DATA_METHOD_A == w_typeid )  { } */
+       /* I : Immediate Data (NO!!: ModR/M) */
+       else if( OPTYPE_DATA_METHOD_I == w_typeid )     {
+               p_analyze->v_imm.val.val64      = p_root->v_val.val.val64;
+               p_analyze->v_imm.i_bytes        = p_root->i_operandsize;
+
+               /* Size */
+               if(( OPSIZE_W == w_sizeid ) && ( 1 == p_root->i_operandsize ))  {
+                       p_root->i_operandsize   = 2;
+               }
+               else if(( OPSIZE_D == w_sizeid ) && ( 2 >= p_root->i_operandsize ))     {
+                       p_root->i_operandsize   = 4;
+               }
+               else if(( OPSIZE_Q == w_sizeid ) && ( 4 >= p_root->i_operandsize ))     {
+                       p_root->i_operandsize   = 8;
+               }
+               else if( OPSIZE_V == w_sizeid ) {
+                       p_root->i_operandsize   = p_analyze->i_operandsize;
+               }
+               else if( OPSIZE_Z == w_sizeid ) {
+                       if(( 2 == p_analyze->i_operandsize)
+                                       && ( 1 == p_root->i_operandsize ))      {
+                               p_root->i_operandsize   = 2;
+                       }
+                       else    {
+                               if( 2 >= p_root->i_operandsize )        {
+                                       p_root->i_operandsize   = 4;
+                               }
+                       }
+               }
+
+               if( p_root->i_operandsize > p_analyze->v_imm.i_bytes )  {
+                       Drd64_Intel64_Common_ExtendValueBit(
+                                       &(p_analyze->v_imm), p_root->i_operandsize,
+                                       p_root->b_flag_addr);
+               }
+       }
+       /* J : IP relative Address (NO!!: ModR/M) */
+       else if( OPTYPE_DATA_METHOD_J == w_typeid )     {
+               p_analyze->v_imm.val.val64      = p_root->v_val.val.val64;
+               p_analyze->v_imm.i_bytes        = p_root->i_operandsize;
+       }
+       /* O : Word of DWord Data
+               (NO!!: ModR/M, BaseReg. IndexReg, ScalingFactor */
+       else if( OPTYPE_DATA_METHOD_O == w_typeid )     {
+               p_analyze->v_imm.val.val64      = p_root->v_val.val.val64;
+               p_analyze->v_imm.i_bytes        = p_root->i_operandsize;
+       }
+       /* F : EFLAGS / RFLAGS Reg. (NO!!: ModR/M)  */
+       /* else if( OPTYPE_DATA_METHOD_F == w_typeid )  { } */
+       /* X : DS:rSI (Memory Address) */
+       /* else if( OPTYPE_DATA_METHOD_X == w_typeid )  { } */
+       /* Y : ES:rDI (Memory Address) */
+       /* else if( OPTYPE_DATA_METHOD_Y == w_typeid )  { } */
+       /* 1 : 0x01 Data (Immediate Data) */
+       /* else if( OPTYPE_DATA_METHOD_1 == w_typeid )  { } */
+       /* - : Illegal Instruction by DrDeamon64 Assembler System */
+       else if( OPTYPE_DATA_METHOD_ILLEGAL == w_typeid )       {
+               return 0x01;
+       }
+
+       return 0x00;
+}
+
+int
+       Drd64_Intel64_SetAnalyzePacket(
+               Drd64_Intel64_AnalyzePacket     *p_analyze,
+               Drd64_Intel64_AssemblePacket    *p_assemble )
+{
+       /* Proc. ModR/M Extension */
+       /* Operand */
+       Drd64_Intel64_SetAnalyzePacket_Operand(
+               p_analyze, p_assemble->p_desttree,
+               p_analyze->w_desttype, p_analyze->w_destsize);
+
+       Drd64_Intel64_SetAnalyzePacket_Operand(
+               p_analyze, p_assemble->p_srctree,
+               p_analyze->w_srctype, p_analyze->w_srcsize);
+
+       Drd64_Intel64_SetAnalyzePacket_Operand(
+               p_analyze, p_assemble->p_optiontree,
+               p_analyze->w_optiontype, p_analyze->w_optionsize);
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_CalcDefaultAddressSize(
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Drd64_Intel64_AssemblePacket *p_assemble )
+{
+       Drd64_Intel64_OperandNode       *p_node;
+
+       /* Address Size */
+       p_node  = p_assemble->p_desttree;
+       if( NULL != p_node )    {
+               if( isBitFlag(p_node->w_typeid,
+                                               OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE))    {
+                       if( 0 == p_analyze->i_addresssize )     {
+                               p_analyze->i_addresssize        = p_node->i_addressize;
+                       }
+               }
+       }
+
+       p_node  = p_assemble->p_srctree;
+       if( NULL != p_node )    {
+               if( isBitFlag(p_node->w_typeid,
+                                               OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE))    {
+                       if( 0 == p_analyze->i_addresssize )     {
+                               p_analyze->i_addresssize        = p_node->i_addressize;
+                       } 
+                       else if( p_node->i_addressize != p_analyze->i_addresssize )     {
+                               return 0x01;
+                       }
+               }
+       }
+
+       p_node  = p_assemble->p_optiontree;
+       if( NULL != p_node )    {
+               if( isBitFlag(p_node->w_typeid,
+                                               OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE))    {
+                       if( 0 == p_analyze->i_addresssize )     {
+                               p_analyze->i_addresssize        = p_node->i_addressize;
+                       } 
+                       else if( p_node->i_addressize != p_analyze->i_addresssize )     {
+                               return 0x01;
+                       }
+               }
+       }
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_ConstructModRM(
+               Drd64_Intel64_AnalyzePacket *p_analyze )
+{
+       /* reg Field */
+       if( 0x08 > p_analyze->b_regtype )       {
+               p_analyze->modrm.modrm.reg      = (p_analyze->b_regtype & 0x07);
+       }
+
+       /* r/m Field */
+       if( 0x08 > p_analyze->b_rmtype )        {
+               p_analyze->modrm.modrm.rm       = (p_analyze->b_rmtype & 0x07);
+       }
+
+       /* Mod Field */
+       if( 0x04 > p_analyze->b_modtype )       {
+               p_analyze->modrm.modrm.mod      = (p_analyze->b_modtype & 0x03);
+       }
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_CalcDefaultOperandSize(
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Drd64_Intel64_AssemblePacket *p_assemble )
+{
+       int             i_destsize;
+       int             i_srcsize;
+       int             i_optionsize;
+       int             i_defaultsize;
+       Drd64_Intel64_OperandNode       *p_node;
+
+       i_defaultsize   = 0;
+       i_destsize      = 0;
+       p_node  = p_assemble->p_desttree;
+       if( NULL != p_node )    {
+               if( OPSIZE_V == p_analyze->w_destsize ) {
+                       /* XXX : MMX/SSE/Debug/Ctrl Reg. */
+                       i_destsize      = p_node->i_operandsize;
+               }
+               /* else if( OPSIZE_Z == p_analyze->w_destsize ) { } */
+               /* else if( OPSIZE_P == p_analyze->w_destsize ) { } */
+               else if( OPSIZE_ILLEGAL == p_analyze->w_destsize )      {
+                       if( isRegType( p_node->w_typeid,
+                                                               OPTYPE_BASE_REG_GENERIC ))      {
+                               i_destsize      = p_node->i_operandsize;
+                       }
+               }
+       }
+
+       i_srcsize       = 0;
+       p_node  = p_assemble->p_srctree;
+       if( NULL != p_node )    {
+               if( OPSIZE_V == p_analyze->w_srcsize )  {
+                       /* XXX : MMX/SSE/Debug/Ctrl Reg. */
+                       i_srcsize       = p_node->i_operandsize;
+               }
+               /* else if( OPSIZE_Z == p_analyze->w_srcsize )  { } */
+               /* else if( OPSIZE_P == p_analyze->w_srcsize )  { } */
+               else if( OPSIZE_ILLEGAL == p_analyze->w_srcsize )       {
+                       if( isRegType( p_node->w_typeid,
+                                                               OPTYPE_BASE_REG_GENERIC ))      {
+                               i_srcsize       = p_node->i_operandsize;
+                       }
+               }
+       }
+
+       i_optionsize    = 0;
+       p_node  = p_assemble->p_optiontree;
+       if( NULL != p_node )    {
+               if( OPSIZE_V == p_analyze->w_optionsize )       {
+                       /* XXX : MMX/SSE/Debug/Ctrl Reg. */
+                       i_optionsize    = p_node->i_operandsize;
+               }
+               /* else if( OPSIZE_Z == p_analyze->w_optionsize )       { } */
+               /* else if( OPSIZE_P == p_analyze->w_optionsize )       { } */
+               else if( OPSIZE_ILLEGAL == p_analyze->w_optionsize )    {
+                       if( isRegType( p_node->w_typeid,
+                                                               OPTYPE_BASE_REG_GENERIC ))      {
+                               i_optionsize    = p_node->i_operandsize;
+                       }
+               }
+       }
+
+       if( 0 != i_destsize )   {
+               i_defaultsize   = i_destsize;
+       }
+
+       if( 0 != i_srcsize )    {
+               if( 0 != i_defaultsize )        {
+                       p_node  = p_assemble->p_srctree;
+                       if( isBitFlag( p_node->w_typeid,
+                                               OPTYPE_BASE_DATA_IMMEDIATE_IMM ))       {
+                               if( i_defaultsize < i_srcsize )
+                                       { return 0x01; }
+                       }
+                       else    {
+                               if( i_defaultsize != i_srcsize )
+                                       { return 0x02; }
+                       }
+               }
+               else    {
+                       i_defaultsize   = i_srcsize;
+               }
+       }
+
+       if( 0 != i_optionsize ) {
+               if( 0 != i_defaultsize )        {
+                       p_node  = p_assemble->p_optiontree;
+                       if( isBitFlag( p_node->w_typeid,
+                                               OPTYPE_BASE_DATA_IMMEDIATE_IMM ))       {
+                               if( i_defaultsize < i_optionsize )
+                                       { return 0x01; }
+                       }
+                       else    {
+                               if( i_defaultsize != i_optionsize )
+                                       { return 0x02; }
+                       }
+               }
+               else    {
+                       i_defaultsize   = i_optionsize;
+               }
+       }
+       
+       if( 0 == i_defaultsize )
+               { i_defaultsize = 4; }
+
+       p_analyze->i_operandsize        = i_defaultsize;
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_SetPrefixByte(
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Drd64_Intel64_AssemblePacket *p_assemble )
+{
+       /* Address Size Prefix */
+       if( 4 == p_analyze->i_addresssize )     {
+               p_analyze->b_prefix[p_analyze->i_prefixes++]    = 0x67;
+       }
+
+       /* Operand Size Prefix */
+       if( 8 == p_analyze->i_operandsize )     {
+               p_analyze->rex.rex.w    = 0x01;
+       }
+       else if( 2 == p_analyze->i_operandsize )        {
+               p_analyze->b_prefix[p_analyze->i_prefixes++]    = 0x66;
+       }
+               
+       /* Rex Byte */
+       if( 0x00 != p_analyze->rex.b_rex )      {
+               p_analyze->rex.rex.head = 0x04;
+       }
+
+       /* Segment Prefix Byte */
+       if( NULL != p_assemble->p_segment )     {
+               if( (unsigned int)p_assemble->p_segment->w_typeid
+                               == OPTYPE_REG_FS )
+                       { p_analyze->b_prefix[p_analyze->i_prefixes++]  = 0x64; }
+               else if( (unsigned int)p_assemble->p_segment->w_typeid
+                               == OPTYPE_REG_GS )
+                       { p_analyze->b_prefix[p_analyze->i_prefixes++]  = 0x65; }
+               else if( (unsigned int)p_assemble->p_segment->w_typeid
+                               == OPTYPE_REG_ES )
+                       { p_analyze->b_prefix[p_analyze->i_prefixes++]  = 0x26; }
+               else if( (unsigned int)p_assemble->p_segment->w_typeid
+                               == OPTYPE_REG_CS )
+                       { p_analyze->b_prefix[p_analyze->i_prefixes++]  = 0x2e; }
+               else if( (unsigned int)p_assemble->p_segment->w_typeid
+                               == OPTYPE_REG_SS )
+                       { p_analyze->b_prefix[p_analyze->i_prefixes++]  = 0x36; }
+               else if( (unsigned int)p_assemble->p_segment->w_typeid
+                               == OPTYPE_REG_DS )
+                       { p_analyze->b_prefix[p_analyze->i_prefixes++]  = 0x3e; }
+       }
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_ConstructBinary(
+               Byte    *pb_dest,
+               Drd64_Intel64_AnalyzePacket     *p_analyze,
+               int             i_maxdest )
+{
+       Byte    *pb_now;
+       Drd64_Intel64_OperandNode       *p_disp;
+       int             i_bytes;
+       int             i_cnt;
+
+       i_bytes = 0;
+       pb_now  = pb_dest;
+
+       /* Prefix */
+       for( i_cnt = p_analyze->i_prefixes; i_cnt > 0; i_cnt-- )        {
+               *pb_now++       = p_analyze->b_prefix[i_cnt - 1];
+               i_bytes++;
+       }
+
+       /* Rex */
+       if( 0x00 != p_analyze->rex.b_rex )      {
+               *pb_now++       = p_analyze->rex.b_rex;
+               i_bytes++;
+       }
+
+       /* OpeCode */
+       for( i_cnt = 0; i_cnt < p_analyze->i_opcodes; i_cnt++ ) {
+               *pb_now++       = p_analyze->b_opcode[i_cnt];
+               i_bytes++;
+       } 
+
+       /* ModR/M */
+       if( 0x00 != p_analyze->modrm.b_modrm )  {
+               *pb_now++       = p_analyze->modrm.b_modrm;
+               i_bytes++;
+       }
+
+       /* SiB */
+       if( 0x00 != p_analyze->sib.b_sib )      {
+               *pb_now++       = p_analyze->sib.b_sib;
+               i_bytes++;
+       }
+       
+       /* Displacement */
+       if( 0 != p_analyze->v_disp.i_bytes )    {
+
+               if( 1 == p_analyze->v_disp.i_bytes )    {
+                       *pb_now++       = p_analyze->v_disp.val.val8;
+                       i_bytes++;
+               }
+               else    {
+                       if( 2 == p_analyze->v_disp.i_bytes )    {
+                               Drd64_Intel64_Common_ExtendValueBit(
+                                       &(p_analyze->v_disp), 4 , 1);
+                       }
+                       *(pb_now + 0)
+                               = (((DWord)(p_analyze->v_disp.val.val32)) & 0x000000ff);
+                       *(pb_now + 1)
+                               = (((DWord)(p_analyze->v_disp.val.val32)) & 0x0000ff00) >>  8;
+                       *(pb_now + 2)
+                               = (((DWord)(p_analyze->v_disp.val.val32)) & 0x00ff0000) >> 16;
+                       *(pb_now + 3)
+                               = (((DWord)(p_analyze->v_disp.val.val32)) & 0xff000000) >> 24;
+                       pb_now  += 4;
+                       i_bytes += 4;
+               }
+       }
+
+       /* Immediate */
+       if( 0 != p_analyze->v_imm.i_bytes )     {
+
+               if( 1 == p_analyze->v_imm.i_bytes )     {
+                       *pb_now++       = p_analyze->v_imm.val.val8;
+                       i_bytes++;
+               }
+               else if( 2 == p_analyze->v_imm.i_bytes )        {
+                       *(pb_now + 0)
+                               = (((DWord)(p_analyze->v_imm.val.val16)) & 0x00ff);
+                       *(pb_now + 1)
+                               = (((DWord)(p_analyze->v_imm.val.val16)) & 0xff00) >>  8;
+                       pb_now  += 2;
+                       i_bytes += 2;
+               }
+               else if( 4 == p_analyze->v_imm.i_bytes )        {
+                       *(pb_now + 0)
+                               = (((DWord)(p_analyze->v_imm.val.val32)) & 0x000000ff);
+                       *(pb_now + 1)
+                               = (((DWord)(p_analyze->v_imm.val.val32)) & 0x0000ff00) >>  8;
+                       *(pb_now + 2)
+                               = (((DWord)(p_analyze->v_imm.val.val32)) & 0x00ff0000) >> 16;
+                       *(pb_now + 3)
+                               = (((DWord)(p_analyze->v_imm.val.val32)) & 0xff000000) >> 24;
+                       pb_now  += 4;
+                       i_bytes += 4;
+               }
+               else if( 8 == p_analyze->v_imm.i_bytes )        {
+                       *(pb_now + 0)
+                               = (((QWord)(p_analyze->v_imm.val.val64))
+                                               & 0x00000000000000ff);
+                       *(pb_now + 1)
+                               = (((QWord)(p_analyze->v_imm.val.val64))
+                                               & 0x000000000000ff00) >>  8;
+                       *(pb_now + 2)
+                               = (((QWord)(p_analyze->v_imm.val.val64))
+                                               & 0x0000000000ff0000) >> 16;
+                       *(pb_now + 3)
+                               = (((QWord)(p_analyze->v_imm.val.val64))
+                                               & 0x00000000ff000000) >> 24;
+                       *(pb_now + 4)
+                               = (((QWord)(p_analyze->v_imm.val.val64))
+                                               & 0x000000ff00000000) >> 32;
+                       *(pb_now + 5)
+                               = (((QWord)(p_analyze->v_imm.val.val64))
+                                               & 0x0000ff0000000000) >> 40;
+                       *(pb_now + 6)
+                               = (((QWord)(p_analyze->v_imm.val.val64))
+                                               & 0x00ff000000000000) >> 48;
+                       *(pb_now + 7)
+                               = (((QWord)(p_analyze->v_imm.val.val64))
+                                               & 0xff00000000000000) >> 56;
+                       pb_now  += 8;
+                       i_bytes += 8;
+               }
+       }
+
+       return i_bytes;
+}
+
+
+LIBINTEL64ASM_FUNC     int
+       Drd64_LibIntel64asm_AsmLine(
+               Byte    *pb_dest,
+               char    *p_src,
+               int             i_maxdest)
+{
+       Drd64_Intel64_AssemblePacket    drd64_assemble;
+       Drd64_Intel64_AnalyzePacket             drd64_analyze;
+       int             i_bytes;        
+       int             i_err;
+       char    *p_now;
+       char    *p_temp;
+
+       p_now   = p_src;
+       i_bytes = 0;
+       
+       memset( &drd64_assemble, 0x00, sizeof(Drd64_Intel64_AssemblePacket) );
+       memset( &drd64_analyze, 0x00, sizeof(Drd64_Intel64_AnalyzePacket) );
+
+       /* Phase 1 : Carve String to String Block */
+       i_err   = Drd64_Intel64_CarveStringBlock( &drd64_assemble, p_src );
+       if( 0x00 != i_err )             { return 0xff; }
+
+       Drd64_Intel64_Debug_Asm_PrintCarveString( &drd64_assemble, p_src );
+
+       /* Phase 2 : Check Operand & Construct Operand Tree */
+       if( '\0' != drd64_assemble.str_destination[0] ) {
+               drd64_assemble.p_desttree       = 
+                       Drd64_Intel64_CheckOperand(
+                               drd64_assemble.str_destination, &drd64_assemble );
+               if( NULL == drd64_assemble.p_desttree ) { return 0xff; }
+       }
+       Drd64_Intel64_Debug_PrintOperandTree(
+                               drd64_assemble.p_desttree, "Destination" );
+
+       if( '\0' != drd64_assemble.str_source[0] )      {
+               drd64_assemble.p_srctree        = 
+                       Drd64_Intel64_CheckOperand(
+                               drd64_assemble.str_source, &drd64_assemble );
+               if( NULL == drd64_assemble.p_srctree )  { return 0xff; }
+       }
+       Drd64_Intel64_Debug_PrintOperandTree(
+                       drd64_assemble.p_srctree, "Source" );
+
+       if( '\0' != drd64_assemble.str_option[0] )      {
+               drd64_assemble.p_optiontree     = 
+                       Drd64_Intel64_CheckOperand(
+                               drd64_assemble.str_option, &drd64_assemble );
+               if( NULL == drd64_assemble.p_optiontree )       { return 0xff; }
+       }
+       Drd64_Intel64_Debug_PrintOperandTree(
+                       drd64_assemble.p_optiontree, "Option" );
+
+       /* Phase 3 : Search Intel64 Database */
+       i_err   = Drd64_Intel64db_SearchInstruction(
+                                       &drd64_analyze, &drd64_assemble );
+       Drd64_Intel64_Debug_PrintAnalyzePacket( &drd64_analyze, "Search DB", 3 );
+       if( 0x00 != i_err )             { return 0x00; }
+
+       /* Phase 4 : Calc Default Operand Size */
+       i_err   = Drd64_Intel64_CalcDefaultAddressSize(
+                               &drd64_analyze, &drd64_assemble );
+       if( 0x00 != i_err )             { return 0x01; }
+
+       i_err   = Drd64_Intel64_CalcDefaultOperandSize(
+                               &drd64_analyze, &drd64_assemble );
+       if( 0x00 != i_err )             { return 0x01; }
+
+       /* Phase 4 : Construct */
+       /* Phase 4-1 : construct ModR/M Encoding */
+       Drd64_Intel64_ConstructModRM( &drd64_analyze );
+
+       /* Phase 4-2 : Construct ModR/M + SiB */
+       Drd64_Intel64_SetAnalyzePacket( &drd64_analyze, &drd64_assemble );
+       Drd64_Intel64_Debug_PrintAnalyzePacket( &drd64_analyze, "Set Analyze", 3 );
+
+       /* Phase 4-3 : Construct Prefix & Rex Byte */   
+       Drd64_Intel64_SetPrefixByte(&drd64_analyze, &drd64_assemble );
+
+       Drd64_Intel64_Debug_PrintAnalyzePacket( &drd64_analyze, "Final", 2);
+       Drd64_Intel64_Debug_Asm_PrintCarveString( &drd64_assemble, p_src );
+
+       /* Phase 5 : Construct Binary */
+       i_bytes = Drd64_Intel64_ConstructBinary(
+                                               pb_dest, &drd64_analyze, i_maxdest );
+
+       Drd64_Intel64_Debug_Asm_PrintAnswer( pb_dest, p_src, i_bytes );
+
+       Drd64_Intel64_ResetOperandNode_Memory();
+       return 0x00;
+}
+
+
+
+/* EOF of drd64_intel64_asm.c ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_asm.h b/libintel64asm/drd64_intel64_asm.h
new file mode 100644 (file)
index 0000000..28dcc52
--- /dev/null
@@ -0,0 +1,79 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_asm.h
+Function: Intel64 Line Assembler Main Header 
+Comment:  none
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_INTEL64_ASM
+#define DRD64_HEADER_INTEL64_ASM
+
+#define MAX_OPERAND_NODES   100
+
+typedef struct  {
+    void    *p_left;
+    void    *p_right;
+    void    *p_parent;
+
+    void    *p_next;
+    void    *p_before;
+
+    Byte    b_flag_addr;
+    int     i_operandsize;
+    int     i_addressize;
+    char    str_data[MAX_OPERAND];
+    Word    w_typeid;
+    Value   v_val;
+} Drd64_Intel64_OperandNode;
+
+
+typedef struct  {
+
+    char    str_instruction[MAX_INSTRUCTION];
+
+    char    str_destination[MAX_OPERAND];
+    Drd64_Intel64_OperandNode   *p_desttree;
+
+    char    str_source[MAX_OPERAND];
+    Drd64_Intel64_OperandNode   *p_srctree;
+
+    char    str_option[MAX_OPERAND];
+    Drd64_Intel64_OperandNode   *p_optiontree;
+
+    Drd64_Intel64_OperandNode   *p_segment;
+
+} Drd64_Intel64_AssemblePacket;
+
+
+#endif /* DRD64_HEADER_INTEL64_ASM */
+
+/* EOF of drd64_intel64_asm.h --------------------------------------- */
diff --git a/libintel64asm/drd64_intel64_asm_system.c b/libintel64asm/drd64_intel64_asm_system.c
new file mode 100644 (file)
index 0000000..a0deb7d
--- /dev/null
@@ -0,0 +1,118 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_asm_system.c
+Function: Intel64 Line Assembler System Functions (Init./Term./etc)
+Comment:  none
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#include"drd64_intel64_dbtype.h"
+#include"drd64_intel64_asm.h"
+#include"drd64_intel64_disasm.h"
+#define DRD64_SRC_INTEL64_ASM_SYSTEM
+#include"drd64_intel64_asm_system.h"
+
+static Drd64_Intel64_OperandNode       *pp_operandnode_base;
+static int                                                     i_operandnode_nums;
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+EXTERN int
+       Drd64_Intel64_InitAssembleSystem(
+               void)
+{
+       Drd64_Intel64_OperandNode       *pp_temp;
+
+       pp_operandnode_base     = NULL;
+       pp_temp = NULL;
+       pp_temp = (Drd64_Intel64_OperandNode *)malloc(
+                                       sizeof(Drd64_Intel64_OperandNode) * MAX_OPERAND_NODES);
+       if( NULL == pp_temp )   { return 0x01;  }
+
+       pp_operandnode_base     = pp_temp;
+       i_operandnode_nums      = 0;
+       
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+EXTERN int
+       Drd64_Intel64_TermAssembleSystem(
+               void)
+{
+       if( NULL != pp_operandnode_base )       {
+               free( pp_operandnode_base );
+               pp_operandnode_base     = NULL;
+       }       
+       
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+EXTERN Drd64_Intel64_OperandNode       *
+       Drd64_Intel64_AllocOperandNode(
+               void )
+{
+       Drd64_Intel64_OperandNode       *p_node;
+       
+       p_node  = NULL;
+       if( MAX_OPERAND_NODES - 1 > i_operandnode_nums )        {
+               p_node  = (pp_operandnode_base + i_operandnode_nums);
+               i_operandnode_nums++;
+       }
+
+       if( NULL != p_node )    {
+               memset( p_node, 0x00, sizeof( Drd64_Intel64_OperandNode ));
+       }
+
+       return p_node;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+EXTERN int
+       Drd64_Intel64_ResetOperandNode_Memory(
+               void )
+{
+       i_operandnode_nums      = 0;
+       
+       return;
+}
+
+
+/* EOF of drd64_intel64_asm_system.c ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_asm_system.h b/libintel64asm/drd64_intel64_asm_system.h
new file mode 100644 (file)
index 0000000..00c3a28
--- /dev/null
@@ -0,0 +1,63 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_asm_system.h
+Function: Intel64 Line Assembler System Functions Header 
+Comment: none
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_INTEL64_ASM_SYSTEM
+
+#ifndef DRD64_SRC_INTEL64_ASM_SYSTEM
+       #define EXTERN  extern
+#else
+       #define EXTERN
+#endif
+
+EXTERN int
+       Drd64_Intel64_InitAssembleSystem(
+               void);
+
+EXTERN int
+       Drd64_Intel64_TermAssembleSystem(
+               void);
+
+EXTERN Drd64_Intel64_OperandNode   *
+    Drd64_Intel64_AllocOperandNode(
+        void);
+
+EXTERN int
+    Drd64_Intel64_ResetOperandNode_Memory(
+        void);
+
+#endif /* DRD64_HEADER_XXX */
+
+/* EOF of drd64_intel64_asm_system.h -------------------------------- */
diff --git a/libintel64asm/drd64_intel64_common.c b/libintel64asm/drd64_intel64_common.c
new file mode 100644 (file)
index 0000000..8a0ef04
--- /dev/null
@@ -0,0 +1,74 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_common.c
+Function: Intel64 DisAsm/Asm Common Functions 
+Comment: none
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#define        DRD64_SRC_INTEL64_COMMON
+#include"drd64_intel64_common.h"
+
+/*----------------------------------------------------------------------
+static int
+    Drd64_DisAsmIntel64_ExtendValueBit(
+        : Extend Value to Bits
+
+        Value *p_val,       : [dest][src] Value
+        int i_bit,          : [opt] bits
+        int i_flag_sign)    : [opt] Flag Sign
+----------------------------------------------------------------------*/
+EXTERN int
+    Drd64_Intel64_Common_ExtendValueBit(
+        Value *p_val,
+        int i_bit,
+        int i_flag_sign)
+{
+    QWord   q_temp  = 0x0000000000000000;
+
+    if( i_bit <= p_val->i_bytes)    { return 0x01; }
+
+    q_temp  = 0xffffffffffffffff<<  (p_val->i_bytes * 8);
+    p_val->val.val64    = (~q_temp) & p_val->val.val64;
+
+    if( 0x00 != i_flag_sign )   {
+        if( 0x01 == (0x01 & (p_val->val.val64 >> ((p_val->i_bytes*8)-1))))
+            { p_val->val.val64  = q_temp | p_val->val.val64; }
+    }
+
+    p_val->i_bytes      = i_bit;
+
+    return 0x00;
+}
+
+
+/* EOF of drd64_intel64_common.c ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_common.h b/libintel64asm/drd64_intel64_common.h
new file mode 100644 (file)
index 0000000..35af802
--- /dev/null
@@ -0,0 +1,53 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_common.h
+Function: Intel64 DisAsm/Asm Common Functions Header 
+Comment: none
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_INTEL64_COMMON
+
+#ifndef DRD64_SRC_INTEL64_COMMON
+       #define EXTERN  extern
+#else
+       #define EXTERN
+#endif
+
+EXTERN int
+    Drd64_Intel64_Common_ExtendValueBit(
+        Value *p_val,
+        int i_bit,
+        int i_flag_sign);
+
+#endif /* DRD64_HEADER_XXX */
+
+/* EOF of drd64_intel64_common.h ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_csvcompiler b/libintel64asm/drd64_intel64_csvcompiler
new file mode 100755 (executable)
index 0000000..17b5cfa
Binary files /dev/null and b/libintel64asm/drd64_intel64_csvcompiler differ
diff --git a/libintel64asm/drd64_intel64_csvcompiler.c b/libintel64asm/drd64_intel64_csvcompiler.c
new file mode 100644 (file)
index 0000000..0bf8124
--- /dev/null
@@ -0,0 +1,1001 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+    
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_csvcompiler.c
+Function: Intel64 DataBase CSV Compiler 
+Comment:  none
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#include"drd64_intel64_db.h"
+#include"drd64_intel64_dbfile.h"
+#include"drd64_intel64_dbcommon.h"
+
+/* USAGE: drdasm_compiler SrcFileName [DestFileName] */
+
+
+Word
+       drd64_asm64compiler_compile_sizetype(
+               char *pstr_size)
+{
+       Word    w_ret   = 0x0000;
+
+       if( !strncmp( pstr_size, OPSIZE_B_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_B;
+       } else if( !strncmp( pstr_size, OPSIZE_W_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_W;
+       } else if( !strncmp( pstr_size, OPSIZE_D_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_D;
+       } else if( !strncmp( pstr_size, OPSIZE_Q_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_Q;
+       } else if( !strncmp( pstr_size, OPSIZE_DQ_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_DQ;
+       } else if( !strncmp( pstr_size, OPSIZE_H_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_H;
+       } else if( !strncmp( pstr_size, OPSIZE_P_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_P;
+       } else if( !strncmp( pstr_size, OPSIZE_R_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_R;
+       } else if( !strncmp( pstr_size, OPSIZE_T_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_T;
+       } else if( !strncmp( pstr_size, OPSIZE_PD_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_PD;
+       } else if( !strncmp( pstr_size, OPSIZE_PS_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_PS;
+       } else if( !strncmp( pstr_size, OPSIZE_SD_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_SD;
+       } else if( !strncmp( pstr_size, OPSIZE_SS_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_SS;
+       } else if( !strncmp( pstr_size, OPSIZE_S_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_S;
+       } else if( !strncmp( pstr_size, OPSIZE_V_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_V;
+       } else if( !strncmp( pstr_size, OPSIZE_Z_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_Z;
+       } else if( !strncmp( pstr_size, OPSIZE_A_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_A;
+       } else if( !strncmp( pstr_size, OPSIZE_ILLEGAL_STR,
+                                       MAX_OPERAND_DATASIZE_LENGTH))   {
+               w_ret   = OPSIZE_ILLEGAL;
+       } else  {
+               w_ret   = 0xffff;
+       }
+
+       return  w_ret;
+}
+
+
+Word
+       Drd64_Intel64_CsvCompiler_CompileMethodType(
+               char *pstr_method)
+{
+       Word            w_ret   = 0x0000;
+
+       /* AX */
+       if( !strncmp( pstr_method, OPTYPE_REG_RAX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_RAX;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_EAX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_EAX;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_AX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_AX;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_AH_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_AH;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_AL_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_AL;
+       }
+       /* CX */
+         else if( !strncmp( pstr_method, OPTYPE_REG_RCX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_RCX;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_ECX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_ECX;
+       } 
+       /* Reserved!
+       else if( !strncmp( pstr_method, OPTYPE_REG_CX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_CX;
+       } 
+       */
+         else if( !strncmp( pstr_method, OPTYPE_REG_CH_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_CH;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_CL_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_CL;
+       }
+       /* DX */
+         else if( !strncmp( pstr_method, OPTYPE_REG_RDX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_RDX;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_EDX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_EDX;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_DX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_DX;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_DH_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_DH;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_DL_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_DL;
+       }
+       /* BX */
+         else if( !strncmp( pstr_method, OPTYPE_REG_RBX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_RBX;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_EBX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_EBX;
+       /*  -- Reserved! --
+       } else if( !strncmp( pstr_method, OPTYPE_REG_BX_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_BX;
+       */      
+       } else if( !strncmp( pstr_method, OPTYPE_REG_BH_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_BH;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_BL_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_BL;
+       }
+       /* SP */
+         else if( !strncmp( pstr_method, OPTYPE_REG_RSP_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_RSP;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_ESP_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_ESP;
+       }
+       /* BP */
+         else if( !strncmp( pstr_method, OPTYPE_REG_RBP_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_RBP;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_EBP_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_EBP;
+       }
+       /* SI */
+         else if( !strncmp( pstr_method, OPTYPE_REG_RSI_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_RSI;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_ESI_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_ESI;
+       }
+       /* DI */
+         else if( !strncmp( pstr_method, OPTYPE_REG_RDI_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_RDI;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_EDI_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_EDI;
+       }
+
+       /* R8 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_R8_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R8;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_R8D_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R8D;
+       }
+       /* R9 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_R9_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R9;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_R9D_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R9D;
+       }
+       /* R10 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_R10_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R10;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_R10D_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R10D;
+       }
+       /* R11 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_R11_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R11;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_R11D_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R11D;
+       }
+       /* R12 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_R12_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R12;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_R12D_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R12D;
+       }
+       /* R13 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_R13_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R13;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_R13D_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R13D;
+       }
+       /* R14 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_R14_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R14;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_R14D_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R14D;
+       }
+       /* R15 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_R15_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R15;
+       } else if( !strncmp( pstr_method, OPTYPE_REG_R15D_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_R15D;
+       }
+
+       /* CS */
+         else if( !strncmp( pstr_method, OPTYPE_REG_CS_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_CS;
+       }
+       /* DS */
+         else if( !strncmp( pstr_method, OPTYPE_REG_DS_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_DS;
+       }
+       /* ES */
+         else if( !strncmp( pstr_method, OPTYPE_REG_ES_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_ES;
+       }
+       /* SS */
+         else if( !strncmp( pstr_method, OPTYPE_REG_SS_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_SS;
+       }
+       /* FS */
+         else if( !strncmp( pstr_method, OPTYPE_REG_FS_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_FS;
+       }
+       /* GS */
+         else if( !strncmp( pstr_method, OPTYPE_REG_GS_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_GS;
+       }
+
+       /* FPU-0 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_FPU_ST0_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_FPU_ST0;
+       }
+       /* FPU-1 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_FPU_ST1_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_FPU_ST1;
+       }
+       /* FPU-2 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_FPU_ST2_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_FPU_ST2;
+       }
+       /* FPU-3 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_FPU_ST3_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_FPU_ST3;
+       }
+       /* FPU-4 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_FPU_ST4_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_FPU_ST4;
+       }
+       /* FPU-5 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_FPU_ST5_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_FPU_ST5;
+       }
+       /* FPU-6 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_FPU_ST6_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_FPU_ST6;
+       }
+       /* FPU-7 */
+         else if( !strncmp( pstr_method, OPTYPE_REG_FPU_ST7_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_REG_FPU_ST7;
+       }
+
+       /* DataMethod: C */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_C_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_C;
+       }
+       /* DataMethod: D */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_D_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_D;
+       }
+       /* DataMethod: G */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_G_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_G;
+       }
+       /* DataMethod: P */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_P_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_P;
+       }
+       /* DataMethod: S */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_S_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_S;
+       }
+       /* DataMethod: T */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_T_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_T;
+       }
+       /* DataMethod: V */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_V_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_V;
+       }
+       /* DataMethod: N */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_N_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_N;
+       }
+       /* DataMethod: R */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_R_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_R;
+       }
+       /* DataMethod: U */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_U_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_U;
+       }
+       /* DataMethod: E */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_E_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_E;
+       }
+       /* DataMethod: W */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_W_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_W;
+       }
+       /* DataMethod: Q */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_Q_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_Q;
+       }
+       /* DataMethod: M */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_M_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_M;
+       }
+
+       /* DataMethod: A */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_A_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_A;
+       }
+       /* DataMethod: I */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_I_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_I;
+       }
+       /* DataMethod: J */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_J_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_J;
+       }
+       /* DataMethod: O */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_O_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_O;
+       }
+       /* DataMethod: F */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_F_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_F;
+       }
+       /* DataMethod: X */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_X_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_X;
+       }
+       /* DataMethod: Y */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_Y_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_Y;
+       }
+       /* DataMethod: 1 */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_1_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_1;
+       }
+       /* DataMethod: Illegal */
+         else if( !strncmp( pstr_method, OPTYPE_DATA_METHOD_ILLEGAL_STR,
+                                       MAX_OPERAND_METHODTYPE_LENGTH)) {
+               w_ret   = OPTYPE_DATA_METHOD_ILLEGAL;
+       }
+       /* Error */
+         else {
+               w_ret   = OPTYPE_DATA_METHOD_ILLEGAL;
+       }
+
+       return w_ret;
+}
+
+Byte drd64_asm64compiler_conv_str2hex(char *str_src)
+{
+       Byte    b_hex   = 0x00;
+       Byte    b_tmp   = 0x00;
+
+       do{
+               if( isdigit( *str_src ) )       {
+                       b_tmp   = *str_src - '0';
+               } else if(('a' <= *str_src) && ('f' >= *str_src))       {
+                       b_tmp   = *str_src - 'a' + 0x0a;
+               } else {
+                       b_hex   = 0xff;
+                       break;
+               }
+
+               b_hex   = (b_hex << 4) + b_tmp; 
+       }while( '\0' != *++str_src );
+
+       return  b_hex;
+}      
+
+int    drd64_asm64compiler_conv_str2int(char *str_src)
+{
+       int             i_num   = 0;
+       char    *str_tmp;
+
+       str_tmp = str_src;
+
+       if( '-' == *str_tmp  )  { str_tmp++; }
+
+       do      {
+               if( 0x00 == isdigit( *str_tmp ) )       
+                       { break; }      
+
+               i_num   = (*str_tmp - '0') + (i_num * 10);                                      
+       }while( '\0' != *++str_tmp);
+
+       if( '-' == *str_src  )  { i_num = i_num * -1; }
+       
+       return i_num;
+}
+
+
+int
+       Drd64_Intel64_GetCsvLines(
+               FILE *fp_src )
+{
+       char    str_buf[512];
+       int             i_csvlines;
+
+       i_csvlines      = 0;
+       while( NULL != fgets(str_buf, 512, fp_src))     {
+               if( '#' == *(str_buf + 0) )     
+                       { continue; }
+               
+               i_csvlines++;
+       } while(0x00 == feof(fp_src));
+       fseek(fp_src, 0L, SEEK_SET);
+
+       printf(" CSV Data Lines = %d\n", i_csvlines);
+       return i_csvlines;
+}
+
+
+int
+       Drd64_Intel64_WriteDBFileHeader(
+               FILE    *fp_dest,
+               int             i_csvlines)
+{
+       Drd64_Intel64db_FileHeader      s_db64header;
+
+       /* DB File Header Setting */
+       strncpy(s_db64header.str_drd64file_header, 
+                               DRD64_INTEL64DB_FILEHEADER_STR, 16);
+       s_db64header.b_drd64file_version        = DRD64_INTEL64DB_FILEVERSION;
+       s_db64header.w_drd64file_id                     = DRD64_INTEL64DB_FILEID;
+       strncpy(s_db64header.str_intel64db_header, 
+                               DRD64_INTEL64DB_INTEL64DBHEADER_STR, 16);
+       s_db64header.w_intel64db_version        = DRD64_INTEL64DB_INTEL64DB_VERSION;
+       s_db64header.w_lines                            = i_csvlines;
+
+       fwrite(&s_db64header, sizeof(Drd64_Intel64db_FileHeader), 1, fp_dest);
+       return 0x00;
+}
+
+int
+       Drd64_Intel64_CsvCompiler_ReadCSVRecord(
+               Drd64_Intel64db_FileRecord      *p_dbrec,
+               FILE    *fp_src,
+               int             i_csvlines)
+{
+       int             i_error = 0x00;
+       int             i_count;
+       char    str_buf[512];
+       char    str_datatype[MAX_OPERAND_METHODTYPE_LENGTH];
+       char    str_datasize[MAX_OPERAND_DATASIZE_LENGTH];
+       char    str_restrict[10];
+       Word    w_methodtype;
+       Word    w_datasize;
+       char    *str_tp;
+       char    *pstr_now;
+       Drd64_Intel64db_FileRecord      *p_dbnow;
+       
+       i_count = 0;
+       p_dbnow = p_dbrec;
+
+       /* Compile CSV Lines */
+       while( NULL != fgets(str_buf, 512, fp_src))     {
+               if( '#' == *(str_buf + 0) )     {
+                       continue;
+               }
+
+               /* Compile & Write Routine !! */
+
+               /* No. */
+               str_tp  = strtok(str_buf, ",");
+               /*p_dbnow->i_num        = drd64_asm64compiler_conv_str2int( str_tp );*/
+               p_dbnow->i_num  = i_count++;
+               
+               /* b_prefix */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_prefix       = drd64_asm64compiler_conv_str2hex( str_tp );
+
+               /* b_rex */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_rex  = drd64_asm64compiler_conv_str2hex( str_tp );
+
+               /* Opcodes  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->i_opcodes      = drd64_asm64compiler_conv_str2int( str_tp );
+
+               /* Opcode 1  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_opcode[0]    = drd64_asm64compiler_conv_str2hex( str_tp );
+               /* Opcode 2  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_opcode[1]    = drd64_asm64compiler_conv_str2hex( str_tp );
+               /* Opcode 3  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_opcode[2]    = drd64_asm64compiler_conv_str2hex( str_tp );
+
+               /* ModR/M byte : Mod  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_mod  = (Byte)drd64_asm64compiler_conv_str2int( str_tp );
+               /* ModR/M byte : reg  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_reg  = (Byte)drd64_asm64compiler_conv_str2int( str_tp );
+               /* ModR/M byte : R/M  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_rm   = (Byte)drd64_asm64compiler_conv_str2int( str_tp );
+
+               /* x87 FloatCode-Opcode  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_fpu  = drd64_asm64compiler_conv_str2hex( str_tp );
+
+               /* Instruction Bits  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_bits = (Byte)drd64_asm64compiler_conv_str2int( str_tp );
+
+               /* Instruction String  */
+               str_tp  = strtok(NULL, ",");
+               strncpy( p_dbnow->str_instruction, str_tp, MAX_INSTRUCTION );
+               pstr_now        = p_dbnow->str_instruction;
+               do{
+                       *pstr_now       = tolower(*pstr_now);
+               } while( '\0' != *(pstr_now++ + 1));
+
+               /* Option Nums  */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->b_option       = (Byte)drd64_asm64compiler_conv_str2int( str_tp );
+
+               /* Operands   */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->i_operands     = drd64_asm64compiler_conv_str2int( str_tp );
+
+               /* Dest. DataType String  */
+               str_tp  = strtok(NULL, ",");
+               strncpy(str_datatype, str_tp, MAX_OPERAND_METHODTYPE_LENGTH - 1 );
+               w_methodtype    = Drd64_Intel64_CsvCompiler_CompileMethodType(
+                                                               str_datatype);
+               if( 0xffff == w_methodtype )    {
+                       printf("  Compile Error[%04d]: Method Type : %s\n",
+                                       p_dbnow->i_num, str_datatype);
+                       return 0x01;
+               }
+               p_dbnow->w_desttype     = w_methodtype;
+
+               /* Dest. DataSize String  */
+               str_tp  = strtok(NULL, ",");
+               strncpy( str_datasize, str_tp, MAX_OPERAND_DATASIZE_LENGTH - 1 );
+               w_datasize      = drd64_asm64compiler_compile_sizetype(str_datasize);
+               if( 0xffff == w_datasize )      {
+                       printf("  Compile Error[%04d]: Data Size : %s\n",
+                                       p_dbnow->i_num, str_datasize);
+                       return 0x02;
+               }
+               p_dbnow->w_destsize     = w_datasize;
+
+               /* Src. DataType String  */
+               str_tp  = strtok(NULL, ",");
+               strncpy(str_datatype, str_tp, MAX_OPERAND_METHODTYPE_LENGTH - 1 );
+               w_methodtype    = Drd64_Intel64_CsvCompiler_CompileMethodType(
+                                                       str_datatype);
+               if( 0xffff == w_methodtype )    {
+                       printf("  Compile Error[%04d]: Method Type : %s\n",
+                                       p_dbnow->i_num, str_datatype);
+                       return 0x03;
+               }
+               p_dbnow->w_srctype      = w_methodtype;
+
+               /* Src. DataSize String  */
+               str_tp  = strtok(NULL, ",");
+               strncpy( str_datasize, str_tp, MAX_OPERAND_DATASIZE_LENGTH - 1 );
+               w_datasize      = drd64_asm64compiler_compile_sizetype(str_datasize);
+               if( 0xffff == w_datasize )      {
+                       printf("  Compile Error[%04d]: Data Size : %s\n",
+                                       p_dbnow->i_num, str_datasize);
+                       return 0x04;
+               }
+               p_dbnow->w_srcsize      = w_datasize;
+
+               /* Option DataType String  */
+               str_tp  = strtok(NULL, ",");
+               strncpy( str_datatype, str_tp, MAX_OPERAND_METHODTYPE_LENGTH - 1 );
+               w_methodtype    = Drd64_Intel64_CsvCompiler_CompileMethodType(
+                                                               str_datatype);
+               if( 0xffff == w_methodtype )    {
+                       printf("  Compile Error[%04d]: Method Type : %s\n",
+                                       p_dbnow->i_num, str_datatype);
+                       return 0x05;
+               }
+               p_dbnow->w_optiontype   = w_methodtype;
+
+               /* Option DataSize String  */
+               str_tp  = strtok(NULL, ",");
+               strncpy(str_datasize, str_tp, MAX_OPERAND_DATASIZE_LENGTH - 1 );
+               w_datasize      = drd64_asm64compiler_compile_sizetype(str_datasize);
+               if( 0xffff == w_datasize )      {
+                       printf("  Compile Error[%04d]: Data Size : %s\n",
+                                       p_dbnow->i_num, str_datasize);
+                       return 0x06;
+               }
+               p_dbnow->w_optionsize   = w_datasize;
+
+               /* Duplication Flag  */
+               str_tp  = strtok(NULL, ",");
+               if( '-' == *str_tp )    { p_dbnow->b_duplicationflag    = 0x01; }
+
+               /* Search Priority */
+               str_tp  = strtok(NULL, ",");
+               p_dbnow->i_priority     = drd64_asm64compiler_conv_str2int( str_tp );
+
+               /* Restrict String */
+               str_tp  = strtok(NULL, ",");
+               strncpy( str_restrict, str_tp, 10 );
+               if( !strncmp( str_restrict, "d64", 10 ))
+                       { p_dbnow->w_restrict   = 0x01; }
+               else if( !strncmp( str_restrict, "f64", 10 ))
+                       { p_dbnow->w_restrict   = 0x02; }
+
+               /* Instruction Link (Initialize) */
+               p_dbnow->i_link = -2;
+               p_dbnow->i_search       = -2;
+               
+               p_dbnow++;
+       } while(0x00 == feof(fp_src));
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_CsvCompiler_LinkFileRecord(
+               Drd64_Intel64db_FileRecord      *p_dbrec,
+               int             i_csvlines)
+{
+       int     i_now;
+       int     i_pos;
+       int     i_sort;
+       Drd64_Intel64db_FileRecord      *p_dbnow;
+       Drd64_Intel64db_FileRecord      *p_dbbefore;
+       Drd64_Intel64db_FileRecord      *p_dbpos;
+       Drd64_Intel64db_FileRecord      *p_dbsort;
+       Drd64_Intel64db_FileRecord      *p_dbprev;
+       Drd64_Intel64db_FileRecord      *p_dbtop;
+
+       for( i_now = 0; i_now < i_csvlines; i_now++ )   {
+               p_dbnow = (p_dbrec + i_now);
+
+               if( -2 < p_dbnow->i_link )      { continue; }
+
+               p_dbbefore      = p_dbnow;
+               p_dbtop = p_dbnow;
+               p_dbtop->i_search       = -3;
+
+               for( i_pos = i_now+1; i_pos < i_csvlines; i_pos++ )     {
+                       p_dbpos = (p_dbrec + i_pos);
+
+                       if( !strncmp( p_dbpos->str_instruction,
+                                               p_dbnow->str_instruction, MAX_INSTRUCTION ))    {
+
+                               /* Sort */
+                               i_sort  = p_dbtop->i_num;
+                               p_dbprev        = NULL;
+                               while( -1 < i_sort )    {
+                                       p_dbsort        = (p_dbrec + i_sort);
+
+                                       if( p_dbpos->i_priority > p_dbsort->i_priority )        {
+                                               if( NULL != p_dbprev )          {
+                                                       p_dbprev->i_link        = p_dbpos->i_num;
+                                                       p_dbpos->i_search       = -1;
+                                               }
+                                               else     {
+                                                       p_dbtop->i_search       = -1;
+                                                       p_dbtop = p_dbpos;
+                                                       p_dbtop->i_search       = -3;
+                                               }
+                                               p_dbpos->i_link         = p_dbsort->i_num;
+                                               break;
+                                       }
+                                       p_dbprev        = p_dbsort;
+                                       i_sort          = p_dbsort->i_link;
+                               }
+                               if( 0 > i_sort )        {
+                                       p_dbbefore->i_link      = p_dbpos->i_num;
+                                       p_dbbefore      = p_dbpos;
+                                       p_dbbefore->i_search    = -1;
+                               }
+                                       
+                       }
+               }
+               p_dbbefore->i_link              = -1;
+       }
+
+       /*for( i_now = 0; i_now < i_csvlines; i_now++ ) {
+               p_dbnow = (p_dbrec + i_now);
+               printf("%d : %s (%d)> %d : %d\n", p_dbnow->i_num,
+                               p_dbnow->str_instruction, p_dbnow->i_priority,
+                               p_dbnow->i_link, p_dbnow->i_search);
+       }*/
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_CsvCompiler_CalcRecordHash(
+               Drd64_Intel64db_FileRecord      *p_dbrec,
+               int             *pi_hash_start,
+               int             i_csvlines)
+{
+       int     i_now;
+       int     i_value;
+       int     i_hash_now[DRD64_INTEL64DB_HASH_RADIX];
+       Drd64_Intel64db_FileRecord      *p_dbnow;
+       Drd64_Intel64db_FileRecord      *p_dbtemp;
+
+       for( i_now = 0; i_now < DRD64_INTEL64DB_HASH_RADIX; i_now++ ) {
+               *(pi_hash_start + i_now)        = -1;
+               i_hash_now[i_now]                       = -1;
+       }
+
+       for( i_now = 0; i_now < i_csvlines; i_now++ )   {
+               p_dbnow = (p_dbrec + i_now);
+
+               i_value = Drd64_Intel64_DBCommon_CalcHashValue(
+                                                               p_dbnow->str_instruction );
+               p_dbnow->b_hash = (Byte)i_value;
+
+               if( -3 < p_dbnow->i_search )    { continue; }
+               
+               if( -1 == *(pi_hash_start + i_value) )  {
+                       *(pi_hash_start + i_value)      = p_dbnow->i_num;
+               }
+
+               if( -1 < i_hash_now[i_value] )  {
+                       p_dbtemp        = (p_dbrec + i_hash_now[i_value]);
+                       p_dbtemp->i_search      = p_dbnow->i_num;
+               }
+
+               i_hash_now[i_value]     = p_dbnow->i_num;
+       }
+
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_CsvCompiler_Debug_PrintLink(
+               Drd64_Intel64db_FileRecord      *p_dbrec,
+               int             i_csvlines)
+{
+       int     i_now;
+       Drd64_Intel64db_FileRecord      *p_dbnow;
+
+
+       for( i_now = 0; i_now < i_csvlines; i_now++ )   {
+               p_dbnow = (p_dbrec + i_now);
+               printf("%3d : %10s (%3d : %2d)> %4d : %4d\n", p_dbnow->i_num,
+                               p_dbnow->str_instruction, p_dbnow->i_priority,
+                               p_dbnow->b_hash, p_dbnow->i_link, p_dbnow->i_search);
+       }
+       return 0x00;
+}
+
+
+int
+       Drd64_Intel64_CsvCompiler_Compile(
+               const char *str_dest_filename,
+               const char *str_src_filename)
+{
+       int             i_error = 0x00;
+       int             i_hash_start[DRD64_INTEL64DB_HASH_RADIX];
+       FILE    *fp_src;
+       FILE    *fp_dest;
+       Drd64_Intel64db_FileRecord      *p_dbrec;
+       
+       int             i_csvlines      = 0;
+
+       /* Phase 1 : Read CSV Section ----------------------*/
+       puts("[Phase 1] Reading CSV File");
+       /* Open SrcFile */
+       fp_src = fopen(str_src_filename, "r");
+       if( NULL == fp_src )    {
+               return 0x01;
+       }
+
+       /* Count CSV Lines */
+       i_csvlines      = Drd64_Intel64_GetCsvLines( fp_src );
+
+       /* Alloc FileRecord Memory */
+       p_dbrec = (Drd64_Intel64db_FileRecord *)malloc(
+                               sizeof(Drd64_Intel64db_FileRecord) * i_csvlines );
+       if( NULL == p_dbrec )   {
+               fclose( fp_src );
+               return 0x01;
+       }
+       memset( p_dbrec, 0x00, (sizeof(Drd64_Intel64db_FileRecord) * i_csvlines));
+
+       /* Read CSV Lines */
+       i_error = Drd64_Intel64_CsvCompiler_ReadCSVRecord(
+                               p_dbrec, fp_src, i_csvlines );
+
+       /* Close SrcFile */
+       fclose(fp_src);
+
+       /* Phase 2 : Optimize FileRecord -------------------*/
+       puts("[Phase 2] Optimize File Record");
+
+       /* Linking FileRecord */
+       Drd64_Intel64_CsvCompiler_LinkFileRecord( p_dbrec, i_csvlines );
+
+       /* Sort FileRecord with Priority */
+       Drd64_Intel64_CsvCompiler_CalcRecordHash(
+                                       p_dbrec, i_hash_start, i_csvlines);
+
+       Drd64_Intel64_CsvCompiler_Debug_PrintLink( p_dbrec, i_csvlines );
+
+       /* Phase 3 : Write DB Binary File ------------------*/
+       /* Open DestFile */
+       fp_dest = fopen(str_dest_filename, "wb");
+       if( NULL == fp_dest )   {
+               return 0x02;
+       }
+
+       /* Write DB File Header */
+       Drd64_Intel64_WriteDBFileHeader( fp_dest, i_csvlines );
+
+       /* Write DB Records */
+       if( 0x00 == fwrite( p_dbrec,
+                                       (sizeof(Drd64_Intel64db_FileRecord) * i_csvlines),
+                                       1, fp_dest))    {
+               puts("  Compile Error : Record Write Error ");
+       }
+
+       /* Write Hash Records */
+       if( 0x00 == fwrite( &i_hash_start,
+                                       (sizeof(int) * DRD64_INTEL64DB_HASH_RADIX),
+                                       1, fp_dest))    {
+               puts("  Compile Error : Record Write Error ");
+       }
+
+       /* Close DestFile */
+       fclose(fp_dest);
+
+       free( p_dbrec );
+
+       return 0x00;
+}
+
+       
+int main(int argc, char *argv[])
+{
+       char    str_src_filename[256];
+       char    str_dest_filename[256];
+
+       /* Check Option Parameter */
+       if(2 > argc)    {
+               puts("USAGE: drdasm_compiler SrcFileName [OutputFileName]\n");
+               return 0x01;
+       }
+       
+       strncpy(str_src_filename, argv[1], 256);
+       
+       if( 3 > argc )  {
+               strncpy(str_dest_filename, "drd64_intel64db.bin", 256);
+       }
+
+       Drd64_Intel64_CsvCompiler_Compile(str_dest_filename, str_src_filename);
+
+       /* Post Proc. */
+       puts("Complete CSV File Compile!");
+       return 0x00;
+}
+
+/* EOF of drd64_intel64_csvcompiler.c --------------------------------- */ 
diff --git a/libintel64asm/drd64_intel64_db.c b/libintel64asm/drd64_intel64_db.c
new file mode 100644 (file)
index 0000000..286571e
--- /dev/null
@@ -0,0 +1,1453 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_db.c
+Function: INTEL64 Assembler DataBase 
+Comment: none
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#include"drd64_intel64_dbtype.h"
+#include"drd64_intel64_db.h"
+#include"drd64_intel64_dbfile.h"
+#include"drd64_intel64_asm.h"
+#include"drd64_intel64_disasm.h"
+#include"drd64_intel64_dbcommon.h"
+
+/* Make Hash Table */
+/* Access & Search Function */
+#define        DRD64_INTEL64DB_FILENAME        "drd64_intel64db.bin"
+
+static Drd64_Intel64db_Record  *p_db64rec;
+static int                                             i_db64datanum;
+static void                                    *p_db64_bytetable[2][256];
+static Drd64_Intel64db_Record  *p_db64_hashtable[DRD64_INTEL64DB_HASH_RADIX];
+
+/*-----------------------------------------------------------------------
+Word
+       Drd64_Intel64db_GetRegisterCode(
+               : Get Register Code form Register String
+
+               char    *pstr_operand) : [src] Register String
+-----------------------------------------------------------------------*/
+Word
+       Drd64_Intel64db_GetRegisterCode(
+               char    *pstr_operand) 
+{
+       Word    w_regcode;
+       w_regcode       = OPTYPE_REG_INVAILD;
+
+       if( !strncmp( pstr_operand, OPTYPE_REG_RAX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_RAX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_EAX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_EAX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_AX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_AX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_AH_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_AH; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_AL_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_AL; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_RCX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_RCX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_ECX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_ECX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CH_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CH; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CL_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CL; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_RDX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_RDX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_EDX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_EDX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DH_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DH; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DL_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DL; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_RBX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_RBX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_EBX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_EBX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_BX_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_BX; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_BH_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_BH; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_BL_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_BL; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_RSP_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_RSP; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_ESP_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_ESP; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SP_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SP; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_RBP_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_RBP; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_EBP_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_EBP; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_BP_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_BP; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_RSI_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_RSI; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_ESI_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_ESI; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SI_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SI; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_RDI_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_RDI; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_EDI_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_EDI; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DI_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DI; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R8B_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R8B; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R8W_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R8W; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R8D_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R8D; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R8_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R8; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R9B_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R9B; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R9W_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R9W; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R9D_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R9D; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R9_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R9; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R10B_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R10B; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R10W_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R10W; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R10D_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R10D; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R10_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R10; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R11B_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R11B; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R11W_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R11W; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R11D_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R11D; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R11_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R11; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R12B_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R12B; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R12W_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R12W; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R12D_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R12D; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R12_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R12; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R13B_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R13B; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R13W_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R13W; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R13D_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R13D; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R13_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R13; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R14B_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R14B; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R14W_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R14W; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R14D_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R14D; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R14_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R14; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R15B_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R15B; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R15W_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R15W; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R15D_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R15D; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_R15_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_R15; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_ES_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_ES; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CS_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CS; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SS_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SS; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DS_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DS; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_FS_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_FS; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_GS_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_GS; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_FPU_ST0_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_FPU_ST0; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_FPU_ST1_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_FPU_ST1; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_FPU_ST2_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_FPU_ST2; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_FPU_ST3_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_FPU_ST3; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_FPU_ST4_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_FPU_ST4; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_FPU_ST5_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_FPU_ST5; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_FPU_ST6_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_FPU_ST6; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_FPU_ST7_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_FPU_ST7; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR0_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR0; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR1_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR1; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR2_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR2; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR3_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR3; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR4_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR4; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR5_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR5; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR6_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR6; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR7_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR7; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR8_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR8; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR9_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR9; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR10_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR10; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR11_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR11; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR12_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR12; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR13_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR13; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR14_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR14; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_CR15_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_CR15; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR0_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR0; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR1_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR1; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR2_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR2; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR3_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR3; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR4_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR4; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR5_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR5; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR6_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR6; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR7_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR7; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR8_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR8; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR9_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR9; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR10_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR10; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR11_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR11; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR12_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR12; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR13_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR13; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR14_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR14; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_DR15_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_DR15; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_MMX0_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_MMX0; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_MMX1_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_MMX1; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_MMX2_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_MMX2; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_MMX3_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_MMX3; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_MMX4_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_MMX4; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_MMX5_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_MMX5; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_MMX6_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_MMX6; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_MMX7_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_MMX7; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE0_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE0; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE1_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE1; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE2_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE2; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE3_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE3; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE4_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE4; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE5_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE5; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE6_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE6; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE7_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE7; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE8_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE8; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE9_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE9; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE10_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE10; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE11_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE11; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE12_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE12; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE13_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE13; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE14_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE14; }
+       else if( !strncmp( pstr_operand, OPTYPE_REG_SSE15_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_SSE15; }
+
+       else if( !strncmp( pstr_operand, OPTYPE_REG_RIP_STR ,MAX_OPERAND))
+               { w_regcode     = OPTYPE_REG_RIP; }
+
+       return w_regcode;
+}
+
+
+/*-----------------------------------------------------------------------
+int
+       Drd64_Intel64db_GetRegisterString(
+               : Convert Reg.ID to Reg. String
+
+               Byte *p_regstr,         : Dest. Register String
+               Word w_regid,           : Src. Register ID
+               int i_maxstr )          : Dest. Buf. Max Size
+
+-----------------------------------------------------------------------*/
+int
+       Drd64_Intel64db_GetRegisterString(
+               Byte *p_regstr,
+               Word w_regid,
+               int i_maxstr )
+{
+       char    *p_srcstr       = NULL;
+
+       switch( w_regid )       {
+               case OPTYPE_REG_RAX:    p_srcstr = OPTYPE_REG_RAX_STR;  break;
+               case OPTYPE_REG_EAX:    p_srcstr = OPTYPE_REG_EAX_STR;  break;
+               case OPTYPE_REG_AX:             p_srcstr = OPTYPE_REG_AX_STR;   break;
+               case OPTYPE_REG_AH:             p_srcstr = OPTYPE_REG_AH_STR;   break;
+               case OPTYPE_REG_AL:             p_srcstr = OPTYPE_REG_AL_STR;   break;
+               case OPTYPE_REG_RCX:    p_srcstr = OPTYPE_REG_RCX_STR;  break;
+               case OPTYPE_REG_ECX:    p_srcstr = OPTYPE_REG_ECX_STR;  break;
+               case OPTYPE_REG_CX:             p_srcstr = OPTYPE_REG_CX_STR;   break;
+               case OPTYPE_REG_CH:             p_srcstr = OPTYPE_REG_CH_STR;   break;
+               case OPTYPE_REG_CL:             p_srcstr = OPTYPE_REG_CL_STR;   break;
+               case OPTYPE_REG_RDX:    p_srcstr = OPTYPE_REG_RDX_STR;  break;
+               case OPTYPE_REG_EDX:    p_srcstr = OPTYPE_REG_EDX_STR;  break;
+               case OPTYPE_REG_DX:             p_srcstr = OPTYPE_REG_DX_STR;   break;
+               case OPTYPE_REG_DH:             p_srcstr = OPTYPE_REG_DH_STR;   break;
+               case OPTYPE_REG_DL:             p_srcstr = OPTYPE_REG_DL_STR;   break;
+               case OPTYPE_REG_RBX:    p_srcstr = OPTYPE_REG_RBX_STR;  break;
+               case OPTYPE_REG_EBX:    p_srcstr = OPTYPE_REG_EBX_STR;  break;
+               case OPTYPE_REG_BX:             p_srcstr = OPTYPE_REG_BX_STR;   break;
+               case OPTYPE_REG_BH:             p_srcstr = OPTYPE_REG_BH_STR;   break;
+               case OPTYPE_REG_BL:             p_srcstr = OPTYPE_REG_BL_STR;   break;
+               case OPTYPE_REG_RSP:    p_srcstr = OPTYPE_REG_RSP_STR;  break;
+               case OPTYPE_REG_ESP:    p_srcstr = OPTYPE_REG_ESP_STR;  break;
+               case OPTYPE_REG_SP:             p_srcstr = OPTYPE_REG_SP_STR;   break;
+               case OPTYPE_REG_RBP:    p_srcstr = OPTYPE_REG_RBP_STR;  break;
+               case OPTYPE_REG_EBP:    p_srcstr = OPTYPE_REG_EBP_STR;  break;
+               case OPTYPE_REG_BP:             p_srcstr = OPTYPE_REG_BP_STR;   break;
+               case OPTYPE_REG_RSI:    p_srcstr = OPTYPE_REG_RSI_STR;  break;
+               case OPTYPE_REG_ESI:    p_srcstr = OPTYPE_REG_ESI_STR;  break;
+               case OPTYPE_REG_SI:             p_srcstr = OPTYPE_REG_SI_STR;   break;
+               case OPTYPE_REG_RDI:    p_srcstr = OPTYPE_REG_RDI_STR;  break;
+               case OPTYPE_REG_EDI:    p_srcstr = OPTYPE_REG_EDI_STR;  break;
+               case OPTYPE_REG_DI:             p_srcstr = OPTYPE_REG_DI_STR;   break;
+               case OPTYPE_REG_R8B:    p_srcstr = OPTYPE_REG_R8B_STR;  break;
+               case OPTYPE_REG_R8W:    p_srcstr = OPTYPE_REG_R8W_STR;  break;
+               case OPTYPE_REG_R8D:    p_srcstr = OPTYPE_REG_R8D_STR;  break;
+               case OPTYPE_REG_R8:             p_srcstr = OPTYPE_REG_R8_STR;   break;
+               case OPTYPE_REG_R9B:    p_srcstr = OPTYPE_REG_R9B_STR;  break;
+               case OPTYPE_REG_R9W:    p_srcstr = OPTYPE_REG_R9W_STR;  break;
+               case OPTYPE_REG_R9D:    p_srcstr = OPTYPE_REG_R9D_STR;  break;
+               case OPTYPE_REG_R9:             p_srcstr = OPTYPE_REG_R9_STR;   break;
+               case OPTYPE_REG_R10B:   p_srcstr = OPTYPE_REG_R10B_STR; break;
+               case OPTYPE_REG_R10W:   p_srcstr = OPTYPE_REG_R10W_STR; break;
+               case OPTYPE_REG_R10D:   p_srcstr = OPTYPE_REG_R10D_STR; break;
+               case OPTYPE_REG_R10:    p_srcstr = OPTYPE_REG_R10_STR;  break;
+               case OPTYPE_REG_R11B:   p_srcstr = OPTYPE_REG_R11B_STR; break;
+               case OPTYPE_REG_R11W:   p_srcstr = OPTYPE_REG_R11W_STR; break;
+               case OPTYPE_REG_R11D:   p_srcstr = OPTYPE_REG_R11D_STR; break;
+               case OPTYPE_REG_R11:    p_srcstr = OPTYPE_REG_R11_STR;  break;
+               case OPTYPE_REG_R12B:   p_srcstr = OPTYPE_REG_R12B_STR; break;
+               case OPTYPE_REG_R12W:   p_srcstr = OPTYPE_REG_R12W_STR; break;
+               case OPTYPE_REG_R12D:   p_srcstr = OPTYPE_REG_R12D_STR; break;
+               case OPTYPE_REG_R12:    p_srcstr = OPTYPE_REG_R12_STR;  break;
+               case OPTYPE_REG_R13B:   p_srcstr = OPTYPE_REG_R13B_STR; break;
+               case OPTYPE_REG_R13W:   p_srcstr = OPTYPE_REG_R13W_STR; break;
+               case OPTYPE_REG_R13D:   p_srcstr = OPTYPE_REG_R13D_STR; break;
+               case OPTYPE_REG_R13:    p_srcstr = OPTYPE_REG_R13_STR;  break;
+               case OPTYPE_REG_R14B:   p_srcstr = OPTYPE_REG_R14B_STR; break;
+               case OPTYPE_REG_R14W:   p_srcstr = OPTYPE_REG_R14W_STR; break;
+               case OPTYPE_REG_R14D:   p_srcstr = OPTYPE_REG_R14D_STR; break;
+               case OPTYPE_REG_R14:    p_srcstr = OPTYPE_REG_R14_STR;  break;
+               case OPTYPE_REG_R15B:   p_srcstr = OPTYPE_REG_R15B_STR; break;
+               case OPTYPE_REG_R15W:   p_srcstr = OPTYPE_REG_R15W_STR; break;
+               case OPTYPE_REG_R15D:   p_srcstr = OPTYPE_REG_R15D_STR; break;
+               case OPTYPE_REG_R15:    p_srcstr = OPTYPE_REG_R15_STR;  break;
+               case OPTYPE_REG_ES:             p_srcstr = OPTYPE_REG_ES_STR;   break;
+               case OPTYPE_REG_CS:             p_srcstr = OPTYPE_REG_CS_STR;   break;
+               case OPTYPE_REG_SS:             p_srcstr = OPTYPE_REG_SS_STR;   break;
+               case OPTYPE_REG_DS:             p_srcstr = OPTYPE_REG_DS_STR;   break;
+               case OPTYPE_REG_FS:             p_srcstr = OPTYPE_REG_FS_STR;   break;
+               case OPTYPE_REG_GS:             p_srcstr = OPTYPE_REG_GS_STR;   break;
+               /* FPU Register */
+               case OPTYPE_REG_FPU_ST0:        p_srcstr = OPTYPE_REG_FPU_ST0_STR;      break;
+               case OPTYPE_REG_FPU_ST1:        p_srcstr = OPTYPE_REG_FPU_ST1_STR;      break;
+               case OPTYPE_REG_FPU_ST2:        p_srcstr = OPTYPE_REG_FPU_ST2_STR;      break;
+               case OPTYPE_REG_FPU_ST3:        p_srcstr = OPTYPE_REG_FPU_ST3_STR;      break;
+               case OPTYPE_REG_FPU_ST4:        p_srcstr = OPTYPE_REG_FPU_ST4_STR;      break;
+               case OPTYPE_REG_FPU_ST5:        p_srcstr = OPTYPE_REG_FPU_ST5_STR;      break;
+               case OPTYPE_REG_FPU_ST6:        p_srcstr = OPTYPE_REG_FPU_ST6_STR;      break;
+               case OPTYPE_REG_FPU_ST7:        p_srcstr = OPTYPE_REG_FPU_ST7_STR;      break;
+               /* Control Register */
+               case OPTYPE_REG_CR0:    p_srcstr = OPTYPE_REG_CR0_STR; break;
+               case OPTYPE_REG_CR1:    p_srcstr = OPTYPE_REG_CR1_STR; break;
+               case OPTYPE_REG_CR2:    p_srcstr = OPTYPE_REG_CR2_STR; break;
+               case OPTYPE_REG_CR3:    p_srcstr = OPTYPE_REG_CR3_STR; break;
+               case OPTYPE_REG_CR4:    p_srcstr = OPTYPE_REG_CR4_STR; break;
+               case OPTYPE_REG_CR5:    p_srcstr = OPTYPE_REG_CR5_STR; break;
+               case OPTYPE_REG_CR6:    p_srcstr = OPTYPE_REG_CR6_STR; break;
+               case OPTYPE_REG_CR7:    p_srcstr = OPTYPE_REG_CR7_STR; break;
+               case OPTYPE_REG_CR8:    p_srcstr = OPTYPE_REG_CR8_STR; break;
+               case OPTYPE_REG_CR9:    p_srcstr = OPTYPE_REG_CR9_STR; break;
+               case OPTYPE_REG_CR10:   p_srcstr = OPTYPE_REG_CR10_STR; break;
+               case OPTYPE_REG_CR11:   p_srcstr = OPTYPE_REG_CR11_STR; break;
+               case OPTYPE_REG_CR12:   p_srcstr = OPTYPE_REG_CR12_STR; break;
+               case OPTYPE_REG_CR13:   p_srcstr = OPTYPE_REG_CR13_STR; break;
+               case OPTYPE_REG_CR14:   p_srcstr = OPTYPE_REG_CR14_STR; break;
+               case OPTYPE_REG_CR15:   p_srcstr = OPTYPE_REG_CR15_STR; break;
+               /* Debug Register */
+               case OPTYPE_REG_DR0:    p_srcstr = OPTYPE_REG_DR0_STR; break;
+               case OPTYPE_REG_DR1:    p_srcstr = OPTYPE_REG_DR1_STR; break;
+               case OPTYPE_REG_DR2:    p_srcstr = OPTYPE_REG_DR2_STR; break;
+               case OPTYPE_REG_DR3:    p_srcstr = OPTYPE_REG_DR3_STR; break;
+               case OPTYPE_REG_DR4:    p_srcstr = OPTYPE_REG_DR4_STR; break;
+               case OPTYPE_REG_DR5:    p_srcstr = OPTYPE_REG_DR5_STR; break;
+               case OPTYPE_REG_DR6:    p_srcstr = OPTYPE_REG_DR6_STR; break;
+               case OPTYPE_REG_DR7:    p_srcstr = OPTYPE_REG_DR7_STR; break;
+               case OPTYPE_REG_DR8:    p_srcstr = OPTYPE_REG_DR8_STR; break;
+               case OPTYPE_REG_DR9:    p_srcstr = OPTYPE_REG_DR9_STR; break;
+               case OPTYPE_REG_DR10:   p_srcstr = OPTYPE_REG_DR10_STR; break;
+               case OPTYPE_REG_DR11:   p_srcstr = OPTYPE_REG_DR11_STR; break;
+               case OPTYPE_REG_DR12:   p_srcstr = OPTYPE_REG_DR12_STR; break;
+               case OPTYPE_REG_DR13:   p_srcstr = OPTYPE_REG_DR13_STR; break;
+               case OPTYPE_REG_DR14:   p_srcstr = OPTYPE_REG_DR14_STR; break;
+               case OPTYPE_REG_DR15:   p_srcstr = OPTYPE_REG_DR15_STR; break;
+               /* MMX Register */
+               case OPTYPE_REG_MMX0:   p_srcstr = OPTYPE_REG_MMX0_STR; break;
+               case OPTYPE_REG_MMX1:   p_srcstr = OPTYPE_REG_MMX1_STR; break;
+               case OPTYPE_REG_MMX2:   p_srcstr = OPTYPE_REG_MMX2_STR; break;
+               case OPTYPE_REG_MMX3:   p_srcstr = OPTYPE_REG_MMX3_STR; break;
+               case OPTYPE_REG_MMX4:   p_srcstr = OPTYPE_REG_MMX4_STR; break;
+               case OPTYPE_REG_MMX5:   p_srcstr = OPTYPE_REG_MMX5_STR; break;
+               case OPTYPE_REG_MMX6:   p_srcstr = OPTYPE_REG_MMX6_STR; break;
+               case OPTYPE_REG_MMX7:   p_srcstr = OPTYPE_REG_MMX7_STR; break;
+               /* SSE Register */
+               case OPTYPE_REG_SSE0:   p_srcstr = OPTYPE_REG_SSE0_STR; break;
+               case OPTYPE_REG_SSE1:   p_srcstr = OPTYPE_REG_SSE1_STR; break;
+               case OPTYPE_REG_SSE2:   p_srcstr = OPTYPE_REG_SSE2_STR; break;
+               case OPTYPE_REG_SSE3:   p_srcstr = OPTYPE_REG_SSE3_STR; break;
+               case OPTYPE_REG_SSE4:   p_srcstr = OPTYPE_REG_SSE4_STR; break;
+               case OPTYPE_REG_SSE5:   p_srcstr = OPTYPE_REG_SSE5_STR; break;
+               case OPTYPE_REG_SSE6:   p_srcstr = OPTYPE_REG_SSE6_STR; break;
+               case OPTYPE_REG_SSE7:   p_srcstr = OPTYPE_REG_SSE7_STR; break;
+               case OPTYPE_REG_SSE8:   p_srcstr = OPTYPE_REG_SSE8_STR; break;
+               case OPTYPE_REG_SSE9:   p_srcstr = OPTYPE_REG_SSE9_STR; break;
+               case OPTYPE_REG_SSE10:  p_srcstr = OPTYPE_REG_SSE10_STR; break;
+               case OPTYPE_REG_SSE11:  p_srcstr = OPTYPE_REG_SSE11_STR; break;
+               case OPTYPE_REG_SSE12:  p_srcstr = OPTYPE_REG_SSE12_STR; break;
+               case OPTYPE_REG_SSE13:  p_srcstr = OPTYPE_REG_SSE13_STR; break;
+               case OPTYPE_REG_SSE14:  p_srcstr = OPTYPE_REG_SSE14_STR; break;
+               case OPTYPE_REG_SSE15:  p_srcstr = OPTYPE_REG_SSE15_STR; break;
+               default: break;
+       }
+
+       if( NULL != p_srcstr )  {
+               strncpy( p_regstr, p_srcstr, i_maxstr ); 
+       }
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+       Drd64_Intel64db_JudgeDB_AssemblePacket_OperandType(
+               Drd64_Intel64_OperandNode       *p_operand,
+               Word w_dbid)
+{
+       int             i_ret;
+       Word    w_typeid;
+
+       w_typeid        = p_operand->w_typeid;  
+       i_ret           = 0xff;
+
+       /* C : [ModR/M:reg] Control Reg.  */
+       if( OPTYPE_DATA_METHOD_C == w_dbid )    {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_CONTROL ) )
+                       { i_ret = 0x00; }
+       }
+       /* D : [ModR/M:reg] Debug Reg. */
+       else if( OPTYPE_DATA_METHOD_D == w_dbid )               {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_DEBUG ) )
+                       { i_ret = 0x00; }
+       }
+       /* G : [ModR/M:reg] General Reg. */
+       else if( OPTYPE_DATA_METHOD_G == w_dbid )               {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_GENERIC ) )
+                       { i_ret = 0x00; }
+       }
+       /* P : [ModR/M:reg] Packed-QuadWord MMX Reg. */
+       /* N : [ModR/M:R/M] Packed-QuadWord MMX Reg. */
+       else if(( OPTYPE_DATA_METHOD_P == w_dbid ) ||
+                       ( OPTYPE_DATA_METHOD_N == w_dbid ))     {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_MMX ) )
+                       { i_ret = 0x00; }
+       }
+       /* V : [ModR/M:reg] 128bit XMM Reg. */
+       /* U : [ModR/M:R/M] 128bit XMM Reg. */
+       else if(( OPTYPE_DATA_METHOD_V == w_dbid ) ||
+                       ( OPTYPE_DATA_METHOD_U == w_dbid ))             {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_SSE ) )
+                       { i_ret = 0x00; }
+       }
+       /* R : [ModR/M:R/M] refer to General Reg by R/M Field */
+       else if( OPTYPE_DATA_METHOD_R == w_dbid )               {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_GENERIC ) )
+                       { i_ret = 0x00; }
+       }
+       /* E : [ModR/M] Memory & Reg. */
+       else if( OPTYPE_DATA_METHOD_E == w_dbid )               {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_GENERIC ) )
+                       { i_ret = 0x00; }
+               else if( isBitFlag( w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE ))     
+                       { i_ret = 0x00; }
+       }
+       /* S : [ModR/M:reg] Segment Reg. */
+       else if( OPTYPE_DATA_METHOD_S == w_dbid )               {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_SEGMENT ) )
+                       { i_ret = 0x00; }
+       }
+       /* W : [ModR/M] 128bit XMM Reg. or Memory Address 
+        ( Memory Address calculated by Seg.Reg. BaseReg. IndexReg. 
+            ScalingFactor, Displacement */
+       else if( OPTYPE_DATA_METHOD_W == w_dbid )               {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_SSE ) )
+                       { i_ret = 0x00; }
+               else if( isBitFlag( w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE ))     
+                       { i_ret = 0x00; }
+       }
+       /* Q : [ModR/M] MMX reg. or Memory Address 
+        ( Memory Address calced by Seg.Reg, BaseReg. IndexReg. 
+            ScalingFactor, Displacement */
+       else if( OPTYPE_DATA_METHOD_Q == w_dbid )               {
+               if( isRegType( w_typeid, OPTYPE_BASE_REG_MMX ) )
+                       { i_ret = 0x00; }
+               else if( isBitFlag( w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE ))     
+                       { i_ret = 0x00; }
+       }
+       /* M : Memory Access (by ModR/M) (NO!!: Reg. Indicate by ModR/M) */
+       else if( OPTYPE_DATA_METHOD_M == w_dbid )               {
+               if( isBitFlag( w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE ))  
+                       { i_ret = 0x00; }
+       }
+       /* I : Immediate Data (NO!!: ModR/M) */
+       /* J : IP relative Address (NO!!: ModR/M) */
+       else if(( OPTYPE_DATA_METHOD_I == w_dbid ) ||
+                       ( OPTYPE_DATA_METHOD_J == w_dbid ))             {
+               if( isBitFlag( w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_IMM ))      
+                       { i_ret = 0x00; }
+       }
+       /* O : XXX Word of DWord Data
+               (NO!!: ModR/M, BaseReg. IndexReg, ScalingFactor */
+       /*else if( OPTYPE_DATA_METHOD_O == w_dbid )             {
+               if( isBitFlag( w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_IMM ))      
+                       { i_ret = 0x00; }
+       }*/
+       /* F : EFLAGS / RFLAGS Reg. (NO!!: ModR/M)  */
+       /* X : DS:rSI (Memory Address) */
+       /* Y : ES:rDI (Memory Address) */
+       else if(( OPTYPE_DATA_METHOD_F == w_dbid ) ||
+                       ( OPTYPE_DATA_METHOD_X == w_dbid ) ||   
+                       ( OPTYPE_DATA_METHOD_Y == w_dbid ))             {
+               if( NULL == p_operand ) 
+                       { i_ret = 0x00; }
+       }
+       /* 1 : 0x01 Data (Immediate Data) */
+       else if( OPTYPE_DATA_METHOD_1 == w_dbid )               {
+               if( isBitFlag( w_typeid, OPTYPE_BASE_DATA_IMMEDIATE_IMM ))      {
+                       if( 1 == p_operand->v_val.val.val64 )           
+                               { i_ret = 0x00; }
+               }
+       }
+       else if( isRegType( w_dbid, OPTYPE_BASE_REG_GENERIC ) ) {
+               if(((unsigned int)w_dbid & OPTYPE_BASE_REG_GENERIC_IDMASK)
+                               == ((unsigned int)w_typeid & OPTYPE_BASE_REG_GENERIC_IDMASK))
+                       { i_ret = 0x00; }
+       }
+       else if( isRegType( w_dbid, OPTYPE_BASE_REG_SEGMENT ) ) {
+               if( w_dbid == w_typeid )        {
+                       i_ret   = 0x00;
+               }
+       }
+       else if( isRegType( w_dbid, OPTYPE_BASE_REG_FPU ) )     {
+               if( w_dbid == w_typeid )        {
+                       i_ret   = 0x00;
+               }
+       }
+       /* - : Illegal Instruction by DrDeamon64 Assembler System */
+       /*else  {       OPTYPE_DATA_METHOD_ILLEGAL
+       } */
+       /* Method Type T = No Impliment 
+       else if( OPTYPE_DATA_METHOD_S == w_typeid )     { } */
+       /* A : Direct Address
+               (NO!!: ModR/M, BaseReg, IndexReg, ScalingFactor)
+       else if( OPTYPE_DATA_METHOD_A == w_dbid )       { } */
+       
+       return i_ret;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+       Drd64_Intel64db_JudgeDB_AssemblePacket_OperandSize(
+               int             *pi_operandsize,
+               Drd64_Intel64_OperandNode       *p_operand,
+               Word w_dbsizeid)
+{
+       int             i_ret;
+       int             i_size;
+
+       i_ret   = 0xff;
+
+       if( 0 == p_operand->i_operandsize )
+               { return i_ret; }
+
+       if( OPSIZE_B == w_dbsizeid )    {
+               if( 1 == p_operand->i_operandsize )     
+                       { i_ret = 0x00; }
+       }
+       else if( OPSIZE_W == w_dbsizeid )       {
+               if( 2 == p_operand->i_operandsize )     
+                       { i_ret = 0x00; }
+               else if(( isBitFlag( p_operand->w_typeid,
+                                       OPTYPE_BASE_DATA_IMMEDIATE_IMM ))
+                               && ( 2 >= p_operand->i_operandsize))
+                       { i_ret = 0x00; }
+       }
+       else if( OPSIZE_D == w_dbsizeid )       {
+               if( 4 == p_operand->i_operandsize )     
+                       { i_ret = 0x00; }
+               else if(( isBitFlag( p_operand->w_typeid,
+                                       OPTYPE_BASE_DATA_IMMEDIATE_IMM ))
+                               && ( 4 >= p_operand->i_operandsize))
+                       { i_ret = 0x00; }
+       }
+       else if( OPSIZE_Q == w_dbsizeid )       {
+               if( 8 == p_operand->i_operandsize )     
+                       { i_ret = 0x00; }
+               else if(( isBitFlag( p_operand->w_typeid,
+                                       OPTYPE_BASE_DATA_IMMEDIATE_IMM ))
+                               && ( 8 >= p_operand->i_operandsize))
+                       { i_ret = 0x00; }
+       }
+       else if(( OPSIZE_DQ == w_dbsizeid ) ||
+                       ( OPSIZE_PD == w_dbsizeid )     ||
+                       ( OPSIZE_PS == w_dbsizeid )     ||
+                       ( OPSIZE_SD == w_dbsizeid )     ||
+                       ( OPSIZE_SS == w_dbsizeid ))    {       
+               if( 16 == p_operand->i_operandsize )    
+                       { i_ret = 0x00; }
+       }
+       /* XXX */
+       else if( OPSIZE_H == w_dbsizeid )       {
+               if( 8 == p_operand->i_operandsize )     
+                       { i_ret = 0x00; }
+       }
+       /* XXX */
+       else if( OPSIZE_S == w_dbsizeid )       {
+
+       }
+       else if(( OPSIZE_V == w_dbsizeid ) ||
+                       ( OPSIZE_P == w_dbsizeid ))     {
+               if(( 8 == p_operand->i_operandsize ) ||
+                               ( 4 == p_operand->i_operandsize ) ||
+                               ( 2 == p_operand->i_operandsize ))       {
+                       i_ret   = 0x00;
+                       *pi_operandsize = p_operand->i_operandsize;
+               }
+               else if(( isBitFlag( p_operand->w_typeid,
+                                       OPTYPE_BASE_DATA_IMMEDIATE_IMM ))
+                               && ( 8 >= p_operand->i_operandsize)) {
+                       i_ret   = 0x00;
+               }
+       }
+       else if( OPSIZE_Z == w_dbsizeid )       {
+               if( 0 == *pi_operandsize )      {
+                       if(( 4 == p_operand->i_operandsize ) ||
+                                       ( 2 == p_operand->i_operandsize ))       {
+                               i_ret   = 0x00;
+                               *pi_operandsize = p_operand->i_operandsize;
+                       }
+                       else if(( isBitFlag( p_operand->w_typeid,
+                                               OPTYPE_BASE_DATA_IMMEDIATE_IMM ))
+                                       && ( 4 >= p_operand->i_operandsize)) {
+                               i_ret   = 0x00;
+                       }
+               }
+               else    {
+                       if( 2 == *pi_operandsize )      {
+                               if( 2 == p_operand->i_operandsize )
+                                       { i_ret = 0x00; }
+                               else if(( isBitFlag( p_operand->w_typeid,
+                                                       OPTYPE_BASE_DATA_IMMEDIATE_IMM ))
+                                               && ( 2 >= p_operand->i_operandsize)) {
+                                       i_ret   = 0x00;
+                               }
+                       }
+                       else    {
+                               if( 4 == p_operand->i_operandsize )     {
+                                       i_ret   = 0x00;
+                               }
+                               else if(( isBitFlag( p_operand->w_typeid,
+                                                       OPTYPE_BASE_DATA_IMMEDIATE_IMM ))
+                                               && ( 4 >= p_operand->i_operandsize)) {
+                                       i_ret   = 0x00;
+                               }
+                       }
+               }
+       }
+       /*else if( OPSIZE_A == w_dbsizeid )     { } */
+       else if( ((Word)OPSIZE_ILLEGAL) == w_dbsizeid )         {
+               if( !isBitFlag( p_operand->w_typeid, OPTYPE_BASE_DATA ) )       {
+                       if( (( 0 < *pi_operandsize ) &&
+                                       ( p_operand->i_operandsize == *pi_operandsize)) ||
+                                       ( 0 == *pi_operandsize ))
+                       { i_ret = 0x00; }
+               }
+               else if( ((Word)p_operand->w_typeid) == OPTYPE_DATA_METHOD_1 )
+                       { i_ret = 0x00; } 
+       }
+
+       return i_ret;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+       Drd64_Intel64db_JudgeDB_AssemblePacket_Operand(
+               int             *pi_operandsize,
+               Drd64_Intel64_OperandNode       *p_operand,
+               Word    w_dbtypeid,
+               Word    w_dbsizeid)
+{
+       int             i_err;
+
+       i_err   = Drd64_Intel64db_JudgeDB_AssemblePacket_OperandType(
+               p_operand, w_dbtypeid);
+       if( 0x00 != i_err )
+               { return i_err; }
+
+       i_err   = Drd64_Intel64db_JudgeDB_AssemblePacket_OperandSize(
+               pi_operandsize, p_operand, w_dbsizeid);
+       if( 0x00 != i_err )
+               { return i_err; }
+       
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+       Drd64_Intel64db_SetAnalyzePacket_fromDB(
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Drd64_Intel64db_Record *p_db64rec_now)
+{
+
+       if( 0x00 != p_db64rec_now->b_prefix )   {
+               p_analyze->b_prefix[0]  = p_db64rec_now->b_prefix;
+               p_analyze->i_prefixes   = 1;
+       }
+
+       p_analyze->rex.b_rex    = p_db64rec_now->b_rex;
+       p_analyze->b_codetype   = p_db64rec_now->b_option;
+       p_analyze->i_opcodes    = p_db64rec_now->i_opcodes;
+
+       if( 0x07 == p_db64rec_now->b_option ) 
+               { p_analyze->i_opcodes  = 1; }
+       else if( 0x08 == p_db64rec_now->b_option ) 
+               { p_analyze->i_opcodes  = 2; }
+
+       p_analyze->b_opcode[0]  = p_db64rec_now->b_opcode[0];
+       if( 0x00 != p_db64rec_now->b_fpu )      {
+               p_analyze->b_opcode[1]  = p_db64rec_now->b_fpu;
+       } else  {
+               p_analyze->b_opcode[1]  = p_db64rec_now->b_opcode[1];
+               p_analyze->b_opcode[2]  = p_db64rec_now->b_opcode[2];
+       }
+
+       p_analyze->b_modtype    = p_db64rec_now->b_mod;
+       p_analyze->b_regtype    = p_db64rec_now->b_reg;
+       p_analyze->b_rmtype             = p_db64rec_now->b_rm;
+       p_analyze->b_bits               = p_db64rec_now->b_bits;
+       p_analyze->i_operands   = p_db64rec_now->i_operands;
+       p_analyze->w_desttype   = p_db64rec_now->w_desttype;
+       p_analyze->w_destsize   = p_db64rec_now->w_destsize;
+       p_analyze->w_srctype    = p_db64rec_now->w_srctype;
+       p_analyze->w_srcsize    = p_db64rec_now->w_srcsize;
+       p_analyze->w_optiontype = p_db64rec_now->w_optiontype;
+       p_analyze->w_optionsize = p_db64rec_now->w_optionsize;
+
+       return 0x00;
+}
+               
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+       Drd64_Intel64db_SearchInstruction(
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Drd64_Intel64_AssemblePacket *p_assemble)
+{
+       Drd64_Intel64db_Record  *p_db64rec_now;
+       int             i_operandsize;
+       int             i_err;
+       int             i_hash;
+       
+       i_err                   = 0xff;
+       p_db64rec_now   = p_db64rec;
+
+
+       /* Calc. Instruction Hash */
+       i_hash  = Drd64_Intel64_DBCommon_CalcHashValue(
+                                                       p_assemble->str_instruction );
+       p_db64rec_now   = p_db64_hashtable[ i_hash ];
+
+
+       /* Search Instruction */
+       do      {
+               
+               if( !strncmp( p_assemble->str_instruction, 
+                                               p_db64rec_now->str_instruction,
+                                               MAX_INSTRUCTION ))
+                       { break; }
+
+               p_db64rec_now   = p_db64rec_now->p_dbrec_search;
+       }while( p_db64rec_now != NULL );
+       
+       if( NULL == p_db64rec_now )      { return 0x01; }
+
+       /* Search Operand */
+       do      {
+               
+               i_err   = 0x00;
+
+               if( 32 == p_db64rec_now->b_bits )
+                       { i_err = 0x01; }
+
+               i_operandsize   = 0;
+               if( NULL != p_assemble->p_desttree )    {
+                       i_err += Drd64_Intel64db_JudgeDB_AssemblePacket_Operand(
+                                               &i_operandsize, 
+                                               p_assemble->p_desttree, 
+                                               p_db64rec_now->w_desttype,
+                                               p_db64rec_now->w_destsize);
+               }
+               else    {
+                       if( 0 < p_db64rec_now->i_operands )     {
+                               i_err   += 0x01;
+                       }
+               }
+
+               if( NULL != p_assemble->p_srctree )     {
+                       i_err += Drd64_Intel64db_JudgeDB_AssemblePacket_Operand(
+                                               &i_operandsize, 
+                                               p_assemble->p_srctree, 
+                                               p_db64rec_now->w_srctype,
+                                               p_db64rec_now->w_srcsize);
+               }
+               else    {
+                       if( 1 < p_db64rec_now->i_operands )     {
+                               i_err   += 0x01;
+                       }
+               }
+
+               if( NULL != p_assemble->p_optiontree )  {
+                       i_err += Drd64_Intel64db_JudgeDB_AssemblePacket_Operand(
+                                               &i_operandsize, 
+                                               p_assemble->p_optiontree, 
+                                               p_db64rec_now->w_optiontype,
+                                               p_db64rec_now->w_optionsize);
+               }
+               else    {
+                       if( 2 < p_db64rec_now->i_operands )     {
+                               i_err   += 0x01;
+                       }
+               }
+
+               if( 0x00 == i_err )     {
+                       Drd64_Intel64db_SetAnalyzePacket_fromDB( p_analyze, p_db64rec_now );
+                       break;
+               }
+
+               p_db64rec_now   = p_db64rec_now->p_dbrec_link;  
+
+       }while( NULL != p_db64rec_now );
+
+       return i_err;
+}
+
+
+/*-----------------------------------------------------------------------
+
+-----------------------------------------------------------------------*/
+static int
+       Drd64_Intel64db_JudgeDB_AnalyzePacket( 
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Drd64_Intel64db_Record *p_db64, Byte b_bits )
+{
+
+       /* Judge Instruction - Bits */
+       if( INTEL64_BITFREE != p_db64->b_bits ) {
+               if( b_bits != p_db64->b_bits )
+                       { return 0xff; }
+       }
+
+       /* Judge Opecode */
+       if( p_analyze->i_opcodes > 0 )  {
+               if( p_db64->b_opcode[0] != p_analyze->b_opcode[0] )
+                       { return 0x01; }
+       }
+
+       if( p_analyze->i_opcodes > 1 )  {
+               if( p_db64->i_opcodes < 2 )
+                       { return 0x21; }
+               if( p_db64->b_opcode[1] != p_analyze->b_opcode[1] ) {
+                       if( 0x00 != p_db64->b_fpu )     {
+                               if( p_db64->b_fpu != p_analyze->b_opcode[1] )
+                                       { return 0x22; }
+                       } else  {
+                               return 0x23;
+                       }
+               }
+       }
+
+       if( p_analyze->i_opcodes > 2 )  {
+               if( p_db64->i_opcodes < 3 )
+                       { return 0x03; }
+               if( p_db64->b_opcode[2] != p_analyze->b_opcode[2] )
+                       { return 0x03; }
+       }
+       
+       /* Judge REX prefix */
+       if( 0x00 != p_db64->b_rex )     {
+               if( p_db64->b_rex != p_analyze->rex.b_rex )
+                       { return 0x04; }
+       }
+
+       /* Judge Prefix */
+       if( 0x00 != p_db64->b_prefix )  {
+               if( 0 == p_analyze->i_prefixes )                        {
+                       return 0x51;
+               } else if( 1 == p_analyze->i_prefixes )         {
+                       if( p_analyze->b_prefix[0] != p_db64->b_prefix )
+                               { return 0x52;  }
+               } else if( 2 == p_analyze->i_prefixes )         {
+                       if(( p_analyze->b_prefix[0] != p_db64->b_prefix )
+                                       && ( p_analyze->b_prefix[1] != p_db64->b_prefix ))      
+                               { return 0x53;  }
+               } else if( 3 == p_analyze->i_prefixes )         {
+                       if(( p_analyze->b_prefix[0] != p_db64->b_prefix )
+                                       && ( p_analyze->b_prefix[1] != p_db64->b_prefix )
+                                       && ( p_analyze->b_prefix[2] != p_db64->b_prefix ))      
+                               { return 0x54;  }
+               } else if( 4 == p_analyze->i_prefixes )         {
+                       if(( p_analyze->b_prefix[0] != p_db64->b_prefix )
+                                       && ( p_analyze->b_prefix[1] != p_db64->b_prefix )
+                                       && ( p_analyze->b_prefix[2] != p_db64->b_prefix )
+                                       && ( p_analyze->b_prefix[3] != p_db64->b_prefix ))      
+                               { return 0x55;  }
+               }
+
+               /* XXX :
+               if( (( 0 < p_analyze->i_prefixes )
+                                && ( p_analyze->b_prefix[0] != p_db64->b_prefix ))
+                       || (( 1 < p_analyze->i_prefixes )
+                                && ( p_analyze->b_prefix[1] != p_db64->b_prefix ))
+                       || (( 2 < p_analyze->i_prefixes )
+                                && ( p_analyze->b_prefix[2] != p_db64->b_prefix ))
+                       || (( 3 < p_analyze->i_prefixes )
+                                && ( p_analyze->b_prefix[3] != p_db64->b_prefix )) )
+                               { return 0x52; }
+               */
+
+       }
+       /* Judge ModR/M */
+       if( 0 < p_analyze->i_modrm_bytes )      {
+               if( INTEL64_MODTYPE_REG == p_db64->b_mod )      {
+                       if( 0x03 != p_analyze->modrm.modrm.mod)
+                               { return 0x61; }
+                       if( ( 0x08 > p_db64->b_reg)
+                                       && ( p_analyze->modrm.modrm.reg != p_db64->b_reg ))
+                               { return 0x62; } 
+                       if( ( 0x08 > p_db64->b_rm)
+                                       && ( p_analyze->modrm.modrm.rm != p_db64->b_rm ))
+                               { return 0x63; } 
+               }
+               else if( INTEL64_MODTYPE_MEMREG == p_db64->b_mod )      {
+                       if( ( 0x08 > p_db64->b_reg)
+                                       && ( p_analyze->modrm.modrm.reg != p_db64->b_reg ))
+                               { return 0x71; } 
+                       if( ( 0x08 > p_db64->b_rm)
+                                       && ( p_analyze->modrm.modrm.rm != p_db64->b_rm ))
+                               { return 0x72; } 
+
+               } 
+               else if( INTEL64_MODTYPE_MEM == p_db64->b_mod ) {
+                       if( 0x03 == p_analyze->modrm.modrm.mod)
+                               { return 0x81; }
+                       if( ( 0x08 > p_db64->b_reg)
+                                       && ( p_analyze->modrm.modrm.reg != p_db64->b_reg ))
+                               { return 0x82; } 
+                       if( ( 0x08 > p_db64->b_rm)
+                                       && ( p_analyze->modrm.modrm.rm != p_db64->b_rm ))
+                               { return 0x83; } 
+
+               } 
+
+               else if( INTEL64_MODTYPE_FPU == p_db64->b_mod ) {
+                       if( 0xbf < p_analyze->modrm.b_modrm )
+                               { return 0x91;  }
+                       if(( 0x08 > p_db64->b_reg )
+                                       && ( p_analyze->modrm.modrm.reg != p_db64->b_reg))
+                               { return 0x92;  }
+
+               }
+
+               if( INTEL64_MODTYPE_FPU == p_analyze->b_modtype )       {
+                       if( INTEL64_MODTYPE_ESCAPE == p_db64->b_mod )
+                               { return 0xa0;  }
+               }
+               
+       }
+       return 0x00;
+}
+
+
+/*-----------------------------------------------------------------------
+Byte
+       Drd64_Intel64db_GetByteCodeType(
+               : Get ByteCode Tyep from Intel 64 DataBase 
+       
+               Drd64_Intel64_AnalyzePacket *p_analyze) 
+                       : [Dest][Src] Analyze Packet
+-----------------------------------------------------------------------*/
+Byte
+       Drd64_Intel64db_GetByteCodeType(
+               Drd64_Intel64_AnalyzePacket *p_analyze)
+{
+       Byte    b_ret   = INTEL64_CODETYPE_NOINSTRUCTION;
+       Drd64_Intel64db_Record  *p_db64rec_now;
+       void                                    **p_ext_bytetable;
+       int             i_judge;
+
+       if( 1 < p_analyze->i_opcodes )          {
+               p_ext_bytetable = p_db64_bytetable[1][ p_analyze->b_opcode[0] ];
+               if( NULL == p_ext_bytetable )   {
+                       return INTEL64_CODETYPE_ERROR;
+               }
+               p_db64rec_now   = *(p_ext_bytetable + p_analyze->b_opcode[1] );
+       } else  {
+               p_db64rec_now   = p_db64_bytetable[0][ p_analyze->b_opcode[0] ];
+       }
+
+       if( NULL == p_db64rec_now )     {
+               return INTEL64_CODETYPE_ERROR;
+       }
+
+       do      {
+               i_judge = Drd64_Intel64db_JudgeDB_AnalyzePacket(
+                                               p_analyze, p_db64rec_now, INTEL64_BIT64ONLY );
+               if( 0x00 == i_judge )   {
+                       b_ret   = p_db64rec_now->b_option;
+                       p_analyze->b_codetype   = p_db64rec_now->b_option;
+                       p_analyze->b_modtype    = p_db64rec_now->b_mod;
+                       p_analyze->b_regtype    = p_db64rec_now->b_reg;
+                       p_analyze->b_rmtype             = p_db64rec_now->b_rm;
+                       strncpy( p_analyze->str_instruction,
+                               p_db64rec_now->str_instruction, MAX_INSTRUCTION );
+                       
+                       p_analyze->w_desttype   = p_db64rec_now->w_desttype;
+                       p_analyze->w_destsize   = p_db64rec_now->w_destsize;
+                       p_analyze->w_srctype    = p_db64rec_now->w_srctype;
+                       p_analyze->w_srcsize    = p_db64rec_now->w_srcsize;
+                       p_analyze->w_optiontype = p_db64rec_now->w_optiontype;
+                       p_analyze->w_optionsize = p_db64rec_now->w_optionsize;
+                       break;  
+               }
+               p_db64rec_now++;        
+       } while( p_db64rec_now->i_num < i_db64datanum );
+
+       return b_ret;
+}
+
+
+/*-----------------------------------------------------------------------
+Byte
+       Drd64_Intel64db_GetBytePrefixType(
+               : Get ByteCode Type is Prefix Or None
+
+               Byte b_code,    : [src] ByteCode 
+               Byte b_bits)    : [opt] Judge Bit Mode (32/64)
+
+-----------------------------------------------------------------------*/
+Byte
+       Drd64_Intel64db_GetBytePrefixType(
+               Byte b_code,
+               Byte b_bits)
+{
+       Byte    b_ret   = 0x00;
+       Drd64_Intel64db_Record  *p_db64rec_now;
+
+       p_db64rec_now   = p_db64_bytetable[0][b_code];
+       do      {
+               if(( INTEL64_BITFREE == p_db64rec_now->b_bits )
+                       || ((INTEL64_BIT64ONLY == b_bits )
+                               && ( INTEL64_BIT64ONLY == p_db64rec_now->b_bits ))) {
+                       b_ret   = p_db64rec_now->b_option;
+                       break;  
+               }
+               p_db64rec_now++;        
+       } while( p_db64rec_now->i_num < i_db64datanum );
+       
+       return b_ret;
+}
+
+
+/*-----------------------------------------------------------------------
+static int
+       Drd64_Intel64db_FreeByteTable(void)
+               : Free Intel 64 Database Byte Table for High-speed Access
+-----------------------------------------------------------------------*/
+static int
+       Drd64_Intel64db_FreeByteTable(void)
+{
+       int             i_cnt;
+
+       for( i_cnt=0; i_cnt<256; i_cnt++ )      {
+               if( NULL != p_db64_bytetable[1][ i_cnt ] )      {
+                       free( p_db64_bytetable[1][ i_cnt ] );
+                       p_db64_bytetable[1][ i_cnt ]    = NULL; 
+               }
+               p_db64_bytetable[0][ i_cnt ]    = NULL; 
+       }
+       
+       return 0x00;
+}
+
+
+/*-----------------------------------------------------------------------
+static int
+       Drd64_Intel64db_GenerateByteTable(void)
+               : Generate Intel 64 Database Byte Table for High-speed Access
+-----------------------------------------------------------------------*/
+static int
+       Drd64_Intel64db_GenerateByteTable(void)
+{
+       int                                             i_cnt;
+       Drd64_Intel64db_Record  *p_db64rec_now;
+       void                                    **p_ext_bytetable;
+       Byte                                    b_opcode[2];
+
+       /* Initialize Byte Table */
+       memset( p_db64_bytetable, 0x00, sizeof(void *) * 256 * 2);
+
+       for( i_cnt=i_db64datanum; i_cnt>=0; i_cnt-- )   {
+               p_db64rec_now   = p_db64rec + i_cnt;
+               b_opcode[0]             = p_db64rec_now->b_opcode[0];
+       
+               if( 1 < p_db64rec_now->i_opcodes )      {
+                       if( NULL == p_db64_bytetable[1][ b_opcode[0] ] )        {
+                               p_ext_bytetable = malloc( 256 * sizeof(void *));
+                               if( NULL == p_ext_bytetable )   {
+                                       return 0x01;
+                               }
+                               p_db64_bytetable[1][ b_opcode[0] ] = p_ext_bytetable;
+                       }
+                       
+                       if( 4 == p_db64rec_now->i_opcodes ) 
+                               { b_opcode[1]   = p_db64rec_now->b_fpu; }
+                       else
+                               { b_opcode[1]   = p_db64rec_now->b_opcode[1]; }
+                                       
+                       p_ext_bytetable = p_db64_bytetable[1][ b_opcode[0] ];
+                       *(p_ext_bytetable + b_opcode[1]) = p_db64rec_now;
+               } else  {
+                       p_db64_bytetable[0][ b_opcode[0] ] = p_db64rec_now;
+               }
+       }
+
+       return 0x00;
+}
+
+
+/*-----------------------------------------------------------------------
+static int
+       Drd64_Intel64db_GenerateByteTable(void)
+               : Generate Intel 64 Database Byte Table for High-speed Access
+-----------------------------------------------------------------------*/
+static int
+       Drd64_Intel64db_GenerateHashTable(
+               FILE    *fp_db )
+{
+       int             i_cnt;
+       int             i_hashtable[DRD64_INTEL64DB_HASH_RADIX];
+
+       if( 1 != fread( &i_hashtable, sizeof(int) * DRD64_INTEL64DB_HASH_RADIX,
+                                               1, fp_db))      {
+               puts("Error 005");
+               return 0x05;
+       }
+
+       for( i_cnt = 0; i_cnt < DRD64_INTEL64DB_HASH_RADIX; i_cnt++ )   {
+               if( 0 > i_hashtable[i_cnt] )    {       
+                       p_db64_hashtable[i_cnt] = NULL;
+               } else  {
+                       p_db64_hashtable[i_cnt] = (p_db64rec + i_hashtable[i_cnt]);
+               }
+       }
+
+       return 0x00;
+}
+
+
+/*-----------------------------------------------------------------------
+static Drd64_Intel64db_Record *
+       Drd64_Intel64db_AllocMemory(void)
+               : Alloc Intel 64 Database Memory 
+-----------------------------------------------------------------------*/
+static Drd64_Intel64db_Record *
+       Drd64_Intel64db_AllocMemory(void)
+{
+       Drd64_Intel64db_Record  *p_db64rec_ret;
+
+       p_db64rec_ret   = NULL;
+       p_db64rec_ret = (Drd64_Intel64db_Record *)malloc(sizeof(Drd64_Intel64db_Record) * i_db64datanum);
+       if( NULL == p_db64rec_ret )     {
+               return p_db64rec_ret;
+       }
+
+       memset( p_db64rec_ret, 0x00,
+                       sizeof(Drd64_Intel64db_Record) * i_db64datanum );
+
+       return p_db64rec_ret;
+}
+
+
+/*-----------------------------------------------------------------------
+static int
+       Drd64_Intel64db_LoadRecord(FILE *)
+               : Load Intel 64 DataBase from binary-File
+-----------------------------------------------------------------------*/
+static int
+       Drd64_Intel64db_LoadRecord(
+               FILE    *fp_db )
+{
+       int             i_cnt;
+       Drd64_Intel64db_FileRecord      db64_filerecord;
+       Drd64_Intel64db_Record          *p_db64rec_now;
+
+       p_db64rec_now   = p_db64rec;
+       for( i_cnt=0; i_cnt<i_db64datanum; i_cnt++ )    {
+               /* Read Record */
+               memset( &db64_filerecord, 0x00, sizeof(Drd64_Intel64db_FileRecord));
+               if( 1 != fread( &db64_filerecord, sizeof(Drd64_Intel64db_FileRecord), 1, fp_db))        {
+                       puts("Error 004");
+                       return 0x04;
+               }
+
+               /* Copy PackData to MemoryData */
+               p_db64rec_now->i_num            = db64_filerecord.i_num;
+               p_db64rec_now->b_prefix         = db64_filerecord.b_prefix;
+               p_db64rec_now->b_rex            = db64_filerecord.b_rex;
+               p_db64rec_now->i_opcodes        = db64_filerecord.i_opcodes;
+               p_db64rec_now->b_opcode[0]      = db64_filerecord.b_opcode[0];
+               p_db64rec_now->b_opcode[1]      = db64_filerecord.b_opcode[1];
+               p_db64rec_now->b_opcode[2]      = db64_filerecord.b_opcode[2];
+               p_db64rec_now->b_mod            = db64_filerecord.b_mod;
+               p_db64rec_now->b_reg            = db64_filerecord.b_reg;
+               p_db64rec_now->b_rm                     = db64_filerecord.b_rm;
+               p_db64rec_now->b_fpu            = db64_filerecord.b_fpu;
+               p_db64rec_now->b_bits           = db64_filerecord.b_bits;
+               strncpy( p_db64rec_now->str_instruction,
+                                       db64_filerecord.str_instruction, MAX_INSTRUCTION );
+               p_db64rec_now->b_option         = db64_filerecord.b_option;
+               p_db64rec_now->i_operands       = db64_filerecord.i_operands;
+               p_db64rec_now->w_desttype       = db64_filerecord.w_desttype;
+               p_db64rec_now->w_destsize       = db64_filerecord.w_destsize;
+               p_db64rec_now->w_srctype        = db64_filerecord.w_srctype;
+               p_db64rec_now->w_srcsize        = db64_filerecord.w_srcsize;
+               p_db64rec_now->w_optiontype     = db64_filerecord.w_optiontype;
+               p_db64rec_now->w_optionsize     = db64_filerecord.w_optionsize;
+               p_db64rec_now->b_duplicationflag        = db64_filerecord.b_duplicationflag;
+               p_db64rec_now->i_priority       = db64_filerecord.i_priority;
+               p_db64rec_now->w_restrict       = db64_filerecord.w_restrict;
+               p_db64rec_now->b_hash           = db64_filerecord.b_hash;
+               
+               if( 0 > db64_filerecord.i_link )        {
+                       p_db64rec_now->p_dbrec_link     = NULL;
+               } else  {
+                       p_db64rec_now->p_dbrec_link     
+                                       = (p_db64rec + db64_filerecord.i_link);
+               }
+
+               if( 0 > db64_filerecord.i_search )      {
+                       p_db64rec_now->p_dbrec_search   = NULL;
+               } else  {
+                       p_db64rec_now->p_dbrec_search   
+                                       = (p_db64rec + db64_filerecord.i_search);
+               }
+
+               p_db64rec_now++;
+       }
+
+       return 0x00;
+}
+
+
+/*-----------------------------------------------------------------------
+[extern] int
+       Drd64_Intel64db_Initialize(void)
+               : Initialize Intel 64 DataBase Before Use. 
+-----------------------------------------------------------------------*/
+int
+       Drd64_Intel64_DB_Initialize(
+               void)
+{
+       int             i_cnt;
+       FILE    *fp_db;
+       Drd64_Intel64db_FileHeader      db64_fileheader;
+
+       fp_db   = NULL;
+       i_db64datanum   = 0;
+       
+       /* Load DB file */
+       fp_db   = fopen(DRD64_INTEL64DB_FILENAME, "rb");
+       if( NULL == fp_db )             { return 0x01; }
+
+       /* DB header Load */
+       if( 1 != fread(&db64_fileheader,
+                               sizeof(Drd64_Intel64db_FileHeader), 1, fp_db))
+               { return 0x02;  }
+       
+       /* Check DB Header */
+
+
+       /* Set Header Data */
+       i_db64datanum   = (int)db64_fileheader.w_lines;
+
+       /* Alloc Memory */
+       p_db64rec = Drd64_Intel64db_AllocMemory();
+       if( NULL == p_db64rec )         { return 0x03; }
+
+       /* Load */
+       if( 0x00 != Drd64_Intel64db_LoadRecord(fp_db) )
+                       { return 0x04; }
+
+       /* Make Byte Table */
+       Drd64_Intel64db_GenerateByteTable();
+
+       /* Make Hash Table */
+       Drd64_Intel64db_GenerateHashTable( fp_db );
+       
+       fclose(fp_db);
+
+       return 0x00;
+}
+
+
+/*-----------------------------------------------------------------------
+[extern] int
+       Drd64_Intel64db_Terminate(void)
+               : Terminate Intel64 DataBase Use
+-----------------------------------------------------------------------*/
+int
+       Drd64_Intel64_DB_Terminate(
+               void)
+{
+       Drd64_Intel64db_FreeByteTable();
+
+       if( NULL != p_db64rec ) {
+               free( p_db64rec );
+       }
+
+       return 0x00;
+}
+
+
+/* EOF of drd64_intel64_db.c ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_db.h b/libintel64asm/drd64_intel64_db.h
new file mode 100644 (file)
index 0000000..b6b6acf
--- /dev/null
@@ -0,0 +1,77 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+    
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_db.h
+Function: Intel64 Nimonic DataBase Functions Header
+Comment: none
+----------------------------------------------------------------------*/
+
+
+#ifndef DRD64_HEADER_INTEL64_DB
+#define DRD64_HEADER_INTEL64_DB
+
+#include"drd64_intel64.h"
+#include"drd64_intel64_dbtype.h"
+
+
+typedef struct {
+       int             i_num;
+       Byte    b_prefix;
+       Byte    b_rex;
+       int             i_opcodes;
+       Byte    b_opcode[3];
+       Byte    b_mod;
+       Byte    b_reg;
+       Byte    b_rm;
+       Byte    b_fpu;
+       Byte    b_bits;
+       char    str_instruction[MAX_INSTRUCTION];
+       Byte    b_option;
+       int             i_operands;
+       Word    w_desttype;
+       Word    w_destsize;     
+       Word    w_srctype;
+       Word    w_srcsize;
+       Word    w_optiontype;
+       Word    w_optionsize;
+       Byte    b_duplicationflag;
+       int             i_priority;
+       Word    w_restrict;
+       void    *p_dbrec_link;
+       void    *p_dbrec_search;
+       Byte    b_hash;
+} Drd64_Intel64db_Record;
+
+
+#endif /* DRD64_HEADER_INTEL64_DB */
+
+/* EOF of drd64_intel64_db.h ----------------------------------- */ 
+
diff --git a/libintel64asm/drd64_intel64_dbcommon.c b/libintel64asm/drd64_intel64_dbcommon.c
new file mode 100644 (file)
index 0000000..7c4a0a8
--- /dev/null
@@ -0,0 +1,71 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_dbcommon.c
+Function: Intel64 DataBase Common Functions 
+Comment:  none
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#include"drd64_intel64_dbtype.h"
+#include"drd64_intel64_dbfile.h"
+#define        DRD64_SRC_INTEL64_DBCOMMON
+#include"drd64_intel64_dbcommon.h"
+#include"drd64_intel64_db.h"
+
+/*----------------------------------------------------------------------
+int
+    Drd64_Intel64_DBCommon_CalcHashValue(
+        char    *pstr_value )
+----------------------------------------------------------------------*/
+EXTERN int
+    Drd64_Intel64_DBCommon_CalcHashValue(
+        char    *pstr_value )
+{
+    int     i_len;
+    int     i_sum;
+    char    *pstr_now;
+
+    pstr_now    = pstr_value;
+    i_sum       = 0;
+
+    do  {
+        i_sum   += (*pstr_now * DRD64_INTEL64DB_HASH_MUL);
+    }while( '\0' != *++pstr_now );
+
+    i_sum   = i_sum % DRD64_INTEL64DB_HASH_RADIX;
+
+    return i_sum;
+}
+
+
+
+/* EOF of drd64_intel64_dbcommon.c --------------------------------- */
diff --git a/libintel64asm/drd64_intel64_dbcommon.h b/libintel64asm/drd64_intel64_dbcommon.h
new file mode 100644 (file)
index 0000000..363ece4
--- /dev/null
@@ -0,0 +1,29 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+            Copyright(C) Koinec 2007-2008. All Rights Reserved.  
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.h
+Function: Header 
+Comment: 
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_INTEL64_DBCOMMON
+
+#ifndef DRD64_SRC_INTEL64_DBCOMMON
+       #define EXTERN  extern
+#else
+       #define EXTERN
+#endif
+
+EXTERN int
+    Drd64_Intel64_DBCommon_CalcHashValue(
+        char    *pstr_value );
+
+#endif /* DRD64_HEADER_XXX */
+
+/* EOF of drd64_.h ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_dbfile.h b/libintel64asm/drd64_intel64_dbfile.h
new file mode 100644 (file)
index 0000000..4d51205
--- /dev/null
@@ -0,0 +1,188 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+    
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_dbfile.h
+Function: Intel64 DataBase Binary File Defines/Headers
+Comment:  none
+----------------------------------------------------------------------*/
+
+
+#ifndef DRD64_HEADER_INTEL64DBFILE
+#define DRD64_HEADER_INTEL64DBFILE
+
+#include"drd64_intel64.h"
+#include"drd64_intel64_db.h"
+
+#define        DRD64_INTEL64DB_HASH_MUL        137
+#define        DRD64_INTEL64DB_HASH_RADIX      69
+
+typedef struct {
+       int             i_num;
+       Byte    b_prefix;
+       Byte    b_rex;
+       int             i_opcodes;
+       Byte    b_opcode[3];
+       Byte    b_mod;
+       Byte    b_reg;
+       Byte    b_rm;
+       Byte    b_fpu;
+       Byte    b_bits;
+       char    str_instruction[MAX_INSTRUCTION];
+       Byte    b_option;
+       int             i_operands;
+       Word    w_desttype;
+       Word    w_destsize;     
+       Word    w_srctype;
+       Word    w_srcsize;
+       Word    w_optiontype;
+       Word    w_optionsize;
+       Byte    b_duplicationflag;
+       int             i_priority;
+       Word    w_restrict;
+       int             i_link;
+       int             i_search;
+       Byte    b_hash;
+} __attribute((packed))        Drd64_Intel64db_FileRecord;
+
+
+#define        DRD64_INTEL64DB_FILEHEADER_STR          "DrDeamon64 BSD "
+#define        DRD64_INTEL64DB_FILEVERSION                     0x10
+#define        DRD64_INTEL64DB_FILEID                          0x8664
+#define        DRD64_INTEL64DB_INTEL64DBHEADER_STR     "INTEL64 NIMONIC "
+#define        DRD64_INTEL64DB_INTEL64DB_VERSION       0x0010
+
+typedef struct {
+       char    str_drd64file_header[16];       /* "DrDeamon64 BSD \0" */
+       Byte    b_drd64file_version;            /* 0x10 */
+       Word    w_drd64file_id;                         /* */
+
+       char    str_intel64db_header[16];       /* "INTEL64 NIMONIC \0" */
+       Word    w_intel64db_version;            /* 0x0010 */
+       Word    w_lines;                                        
+       
+} __attribute((packed))        Drd64_Intel64db_FileHeader;
+
+
+/* C : [ModR/M:reg] Control Reg.  */
+#define OPTYPE_DATA_METHOD_C_STR       "C"
+/* D : [ModR/M:reg] Debug Reg. */
+#define OPTYPE_DATA_METHOD_D_STR       "D"
+/* G : [ModR/M:reg] General Reg. */
+#define OPTYPE_DATA_METHOD_G_STR       "G"
+/* P : [ModR/M:reg] Packed-QuadWord MMX Reg. */ 
+#define OPTYPE_DATA_METHOD_P_STR       "P"
+/* S : [ModR/M:reg] Segment Reg. */
+#define OPTYPE_DATA_METHOD_S_STR       "S"
+/* T : [ModR/M:reg] Test Reg. ( Reserved ) */
+#define OPTYPE_DATA_METHOD_T_STR       "T"
+/* V : [ModR/M:reg] 128bit XMM Reg. */
+#define OPTYPE_DATA_METHOD_V_STR       "V"
+/* N : [ModR/M:R/M] Packed-QuadWord MMX Reg. */
+#define OPTYPE_DATA_METHOD_N_STR       "N"
+/* R : [ModR/M:R/M] refer to General Reg by R/M Field */
+#define OPTYPE_DATA_METHOD_R_STR       "R"
+/* U : [ModR/M:R/M] 128bit XMM Reg. */
+#define OPTYPE_DATA_METHOD_U_STR       "U"
+/* E : [ModR/M] Memory & Reg. */
+#define OPTYPE_DATA_METHOD_E_STR       "E"
+/* W : [ModR/M] 128bit XMM Reg. or Memory Address 
+               ( Memory Address calculated by Seg.Reg. BaseReg. IndexReg. 
+                       ScalingFactor, Displacement */
+#define OPTYPE_DATA_METHOD_W_STR       "W"
+/* Q : [ModR/M] MMX reg. or Memory Address 
+               ( Memory Address calced by Seg.Reg, BaseReg. IndexReg. 
+                       ScalingFactor, Displacement */
+#define OPTYPE_DATA_METHOD_Q_STR       "Q"
+/* M : Memory Access (by ModR/M) (NO!!: Reg. Indicate by ModR/M) */
+#define OPTYPE_DATA_METHOD_M_STR       "M"
+
+/* A : Direct Address (NO!!: ModR/M, BaseReg, IndexReg, ScalingFactor) */
+#define OPTYPE_DATA_METHOD_A_STR       "A"
+/* I : Immediate Data (NO!!: ModR/M) */
+#define OPTYPE_DATA_METHOD_I_STR       "I"
+/* J : IP relative Address (NO!!: ModR/M) */
+#define OPTYPE_DATA_METHOD_J_STR       "J"
+/* O : Word of DWord Data (NO!!: ModR/M, BaseReg. IndexReg, ScalingFactor */
+#define OPTYPE_DATA_METHOD_O_STR       "O"
+/* F : EFLAGS / RFLAGS Reg. (NO!!: ModR/M)  */
+#define OPTYPE_DATA_METHOD_F_STR       "F"
+/* X : DS:rSI (Memory Address) */
+#define OPTYPE_DATA_METHOD_X_STR       "X"
+/* Y : ES:rDI (Memory Address) */
+#define OPTYPE_DATA_METHOD_Y_STR       "Y"
+
+/* 1 : 0x01 Data (Immediate Data) */
+#define OPTYPE_DATA_METHOD_1_STR       "1"
+/* - : Illegal Instruction by DrDeamon64 Assembler System */
+#define OPTYPE_DATA_METHOD_ILLEGAL_STR "-"
+
+/* b : Byte (Regardless Operand Size Attribute) */
+#define OPSIZE_B_STR   "b"
+/* w : Word (Regardless Operand Size Attribute) */
+#define OPSIZE_W_STR   "w"
+/* d : DWord (Regardless Operand Size Attribute) */
+#define OPSIZE_D_STR   "d"
+/* q : QuadWord(64bit) (Regardless Operand Size Attribute) */
+#define OPSIZE_Q_STR   "q"
+/* dq : Double QuadWord(128Bit) (Regardless Operand Size Attribute) */
+#define OPSIZE_DQ_STR  "dq"
+/* h : Memory Pointer for 94/108bit */
+#define OPSIZE_H_STR   "h"
+/* p : Memory Pointer for 32bit or 48bit (depend on Operand Size Attribute) */
+#define OPSIZE_P_STR   "p"
+/* r : Memory Pointer for 14bit / 28bit */
+#define OPSIZE_R_STR   "r"
+/* t : Memory Pointer for 80bit */
+#define OPSIZE_T_STR   "t"
+/* pd : 128bit Packed double-float Data */
+#define OPSIZE_PD_STR  "pd"
+/* ps : 128bit Packed float Data */
+#define OPSIZE_PS_STR  "ps"
+/* sd : Scalar Element of 128bit Packed Double-float Data */
+#define OPSIZE_SD_STR  "sd"
+/* ss : Scalar Element of 128bit Packed float Data */
+#define OPSIZE_SS_STR  "ss"
+/* s : 6Byte or 10 Byte Pseudo Descriptor */
+#define OPSIZE_S_STR   "s"
+/* v : Word, DWord, QuadWord(64bit-ModeOnly) (Depend On Operand Size Attribute)*/
+#define OPSIZE_V_STR   "v"
+/* z : Word(16bit Operand Size) or DWord(32/64 Operand Size) */
+#define OPSIZE_Z_STR   "z"
+/* a : 2 Word or 2 DWord in Memory ( for BOUND ) */
+#define OPSIZE_A_STR   "a"
+
+#define        OPSIZE_ILLEGAL_STR              "-"     
+
+
+#endif /* DRD64_HEADER_INTEL64DBFILE */
+
+/* EOF of drd64_intel64_dbfile.h --------------------------------------*/
+
diff --git a/libintel64asm/drd64_intel64_dbtype.h b/libintel64asm/drd64_intel64_dbtype.h
new file mode 100644 (file)
index 0000000..cf3c7eb
--- /dev/null
@@ -0,0 +1,584 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+    
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_dbtype.h
+Function: Intel64 Nimonic DataBase Defines Header
+Comment: none
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_INTEL64_DBTYPE
+#define DRD64_HEADER_INTEL64_DBTYPE
+
+#include"drd64_intel64.h"
+
+#define        MAX_INSTRUCTION         20
+#define        MAX_OPERAND_METHODTYPE_LENGTH   7
+#define        MAX_OPERAND_DATASIZE_LENGTH     5
+#define        MAX_OPERAND     50
+
+#define        INTEL64_CODETYPE_SEGMENT                0x03
+#define        INTEL64_CODETYPE_REX                    0x04
+#define        INTEL64_CODETYPE_PREFIX                 0x01
+#define        INTEL64_CODETYPE_ESCAPE                 0x02
+#define        INTEL64_CODETYPE_FPUBYTE1               0x05
+#define        INTEL64_CODETYPE_ESCAPE2                0x06
+#define        INTEL64_CODETYPE_ILLEGAL                0x09
+#define        INTEL64_CODETYPE_FPU_MEM                0x07
+#define        INTEL64_CODETYPE_FPU_REG                0x08
+#define        INTEL64_CODETYPE_ERROR                  0xff
+#define        INTEL64_CODETYPE_NOINSTRUCTION  0xf0
+
+#define        INTEL64_BITFREE                         86
+#define        INTEL64_BIT32ONLY                       32
+#define        INTEL64_BIT64ONLY                       64
+
+#define        INTEL64_MODTYPE_REG                     3
+#define        INTEL64_MODTYPE_NONE            4
+#define        INTEL64_MODTYPE_REQUIRE         5
+#define        INTEL64_MODTYPE_MEMREG          6
+#define        INTEL64_MODTYPE_MEM                     7
+#define        INTEL64_MODTYPE_FPU                     8
+#define        INTEL64_MODTYPE_NONE_FPU        9
+#define        INTEL64_MODTYPE_ESCAPE          10
+#define        INTEL64_MODTYPE_ERROR           15
+
+
+
+/* Opeland Type Defines */
+/*
+       Bit 15: have ModR/M
+       Bit 14: have SIB
+       Bit 13: have Immidiate Data  
+       Bit 12:
+       Bit 11:
+       Bit 10:
+       Bit  9: 
+       Bit  8:
+       Bit  7:
+       Bit  6:
+       Bit  5:
+       Bit  4:
+       Bit  3:
+       Bit  2:
+       Bit  1:
+       Bit  0:
+
+*/
+#define OPTYPE_BASE_REG                0x0000
+#define OPTYPE_BASE_DATA       0x8000
+
+#define OPTYPE_BASE_REG_TYPEMASK       0x7000|OPTYPE_BASE_REG
+#define OPTYPE_BASE_REG_GENERIC                0x1000|OPTYPE_BASE_REG
+#define OPTYPE_BASE_REG_SEGMENT                0x2000|OPTYPE_BASE_REG
+#define OPTYPE_BASE_REG_CONTROL                0x3000|OPTYPE_BASE_REG
+#define OPTYPE_BASE_REG_FPU                    0x4000|OPTYPE_BASE_REG
+#define OPTYPE_BASE_REG_DEBUG          0x5000|OPTYPE_BASE_REG
+#define OPTYPE_BASE_REG_MMX                    0x6000|OPTYPE_BASE_REG
+#define OPTYPE_BASE_REG_SSE                    0x7000|OPTYPE_BASE_REG
+#define OPTYPE_BASE_REG_OTHER          0x0000|OPTYPE_BASE_REG
+
+#define OPTYPE_BASE_REG_SIZEMASK       0x00f0
+#define OPTYPE_BASE_REG_64BIT          0x0080
+#define OPTYPE_BASE_REG_32BIT          0x0040
+#define OPTYPE_BASE_REG_16BIT          0x0020
+#define OPTYPE_BASE_REG_8BIT           0x0010
+
+#define OPTYPE_BASE_REG_8BIT_HIGH      0x0002|OPTYPE_BASE_REG_8BIT
+#define OPTYPE_BASE_REG_8BIT_LOW       0x0001|OPTYPE_BASE_REG_8BIT
+
+#define OPTYPE_BASE_REG_IDMASK                 0x0f00  
+#define OPTYPE_BASE_REG_GENERIC_IDMASK 0x0f00|OPTYPE_BASE_REG_GENERIC  
+#define OPTYPE_BASE_REG_GENERIC_AX             0x0000|OPTYPE_BASE_REG_GENERIC  
+#define OPTYPE_BASE_REG_GENERIC_CX             0x0100|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_DX             0x0200|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_BX             0x0300|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_SP             0x0400|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_BP             0x0500|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_SI             0x0600|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_DI             0x0700|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_R8             0x0800|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_R9             0x0900|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_R10            0x0a00|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_R11            0x0b00|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_R12            0x0c00|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_R13            0x0d00|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_R14            0x0e00|OPTYPE_BASE_REG_GENERIC
+#define OPTYPE_BASE_REG_GENERIC_R15            0x0f00|OPTYPE_BASE_REG_GENERIC
+
+
+#define OPTYPE_REG_RAX         (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_EAX         (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_AX          (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_AH          (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_8BIT_HIGH)
+#define OPTYPE_REG_AL          (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_RCX         (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_ECX         (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_CX          (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_CH          (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_8BIT_HIGH)
+#define OPTYPE_REG_CL          (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_RDX         (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_EDX         (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_DX          (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_DH          (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_8BIT_HIGH)
+#define OPTYPE_REG_DL          (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_RBX         (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_EBX         (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_BX          (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_BH          (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_8BIT_HIGH)
+#define OPTYPE_REG_BL          (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_RSP         (OPTYPE_BASE_REG_GENERIC_SP|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_ESP         (OPTYPE_BASE_REG_GENERIC_SP|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_SP          (OPTYPE_BASE_REG_GENERIC_SP|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_RBP         (OPTYPE_BASE_REG_GENERIC_BP|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_EBP         (OPTYPE_BASE_REG_GENERIC_BP|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_BP          (OPTYPE_BASE_REG_GENERIC_BP|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_RSI         (OPTYPE_BASE_REG_GENERIC_SI|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_ESI         (OPTYPE_BASE_REG_GENERIC_SI|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_SI          (OPTYPE_BASE_REG_GENERIC_SI|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_RDI         (OPTYPE_BASE_REG_GENERIC_DI|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_EDI         (OPTYPE_BASE_REG_GENERIC_DI|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_DI          (OPTYPE_BASE_REG_GENERIC_DI|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_R8B         (OPTYPE_BASE_REG_GENERIC_R8|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_R8W         (OPTYPE_BASE_REG_GENERIC_R8|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_R8D         (OPTYPE_BASE_REG_GENERIC_R8|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_R8          (OPTYPE_BASE_REG_GENERIC_R8|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_R9B         (OPTYPE_BASE_REG_GENERIC_R9|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_R9W         (OPTYPE_BASE_REG_GENERIC_R9|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_R9D         (OPTYPE_BASE_REG_GENERIC_R9|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_R9          (OPTYPE_BASE_REG_GENERIC_R9|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_R10B                (OPTYPE_BASE_REG_GENERIC_R10|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_R10W                (OPTYPE_BASE_REG_GENERIC_R10|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_R10D                (OPTYPE_BASE_REG_GENERIC_R10|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_R10         (OPTYPE_BASE_REG_GENERIC_R10|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_R11B                (OPTYPE_BASE_REG_GENERIC_R11|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_R11W                (OPTYPE_BASE_REG_GENERIC_R11|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_R11D                (OPTYPE_BASE_REG_GENERIC_R11|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_R11         (OPTYPE_BASE_REG_GENERIC_R11|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_R12B                (OPTYPE_BASE_REG_GENERIC_R12|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_R12W                (OPTYPE_BASE_REG_GENERIC_R12|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_R12D                (OPTYPE_BASE_REG_GENERIC_R12|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_R12         (OPTYPE_BASE_REG_GENERIC_R12|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_R13B                (OPTYPE_BASE_REG_GENERIC_R13|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_R13W                (OPTYPE_BASE_REG_GENERIC_R13|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_R13D                (OPTYPE_BASE_REG_GENERIC_R13|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_R13         (OPTYPE_BASE_REG_GENERIC_R13|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_R14B                (OPTYPE_BASE_REG_GENERIC_R14|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_R14W                (OPTYPE_BASE_REG_GENERIC_R14|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_R14D                (OPTYPE_BASE_REG_GENERIC_R14|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_R14         (OPTYPE_BASE_REG_GENERIC_R14|OPTYPE_BASE_REG_64BIT)
+#define OPTYPE_REG_R15B                (OPTYPE_BASE_REG_GENERIC_R15|OPTYPE_BASE_REG_8BIT_LOW)
+#define OPTYPE_REG_R15W                (OPTYPE_BASE_REG_GENERIC_R15|OPTYPE_BASE_REG_16BIT)
+#define OPTYPE_REG_R15D                (OPTYPE_BASE_REG_GENERIC_R15|OPTYPE_BASE_REG_32BIT)
+#define OPTYPE_REG_R15         (OPTYPE_BASE_REG_GENERIC_R15|OPTYPE_BASE_REG_64BIT)
+
+#define OPTYPE_REG_FPU_ST0                     (0x0000|OPTYPE_BASE_REG_FPU)
+#define OPTYPE_REG_FPU_ST1                     (0x0100|OPTYPE_BASE_REG_FPU)
+#define OPTYPE_REG_FPU_ST2                     (0x0200|OPTYPE_BASE_REG_FPU)
+#define OPTYPE_REG_FPU_ST3                     (0x0300|OPTYPE_BASE_REG_FPU)
+#define OPTYPE_REG_FPU_ST4                     (0x0400|OPTYPE_BASE_REG_FPU)
+#define OPTYPE_REG_FPU_ST5                     (0x0500|OPTYPE_BASE_REG_FPU)
+#define OPTYPE_REG_FPU_ST6                     (0x0600|OPTYPE_BASE_REG_FPU)
+#define OPTYPE_REG_FPU_ST7                     (0x0700|OPTYPE_BASE_REG_FPU)
+
+#define OPTYPE_REG_ES                          (0x0000|OPTYPE_BASE_REG_SEGMENT)
+#define OPTYPE_REG_CS                          (0x0100|OPTYPE_BASE_REG_SEGMENT)
+#define OPTYPE_REG_SS                          (0x0200|OPTYPE_BASE_REG_SEGMENT)
+#define OPTYPE_REG_DS                          (0x0300|OPTYPE_BASE_REG_SEGMENT)
+#define OPTYPE_REG_FS                          (0x0400|OPTYPE_BASE_REG_SEGMENT)
+#define OPTYPE_REG_GS                          (0x0500|OPTYPE_BASE_REG_SEGMENT)
+
+#define        OPTYPE_REG_CR0                          (0x0000|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR1                          (0x0100|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR2                          (0x0200|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR3                          (0x0300|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR4                          (0x0400|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR5                          (0x0500|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR6                          (0x0600|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR7                          (0x0700|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR8                          (0x0800|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR9                          (0x0900|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR10                         (0x0a00|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR11                         (0x0b00|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR12                         (0x0c00|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR13                         (0x0d00|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR14                         (0x0e00|OPTYPE_BASE_REG_CONTROL)
+#define        OPTYPE_REG_CR15                         (0x0f00|OPTYPE_BASE_REG_CONTROL)
+
+#define        OPTYPE_REG_DR0                          (0x0000|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR1                          (0x0100|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR2                          (0x0200|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR3                          (0x0300|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR4                          (0x0400|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR5                          (0x0500|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR6                          (0x0600|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR7                          (0x0700|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR8                          (0x0800|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR9                          (0x0900|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR10                         (0x0a00|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR11                         (0x0b00|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR12                         (0x0c00|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR13                         (0x0d00|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR14                         (0x0e00|OPTYPE_BASE_REG_DEBUG)
+#define        OPTYPE_REG_DR15                         (0x0f00|OPTYPE_BASE_REG_DEBUG)
+
+#define        OPTYPE_REG_MMX0                         (0x0000|OPTYPE_BASE_REG_MMX)
+#define        OPTYPE_REG_MMX1                         (0x0100|OPTYPE_BASE_REG_MMX)
+#define        OPTYPE_REG_MMX2                         (0x0200|OPTYPE_BASE_REG_MMX)
+#define        OPTYPE_REG_MMX3                         (0x0300|OPTYPE_BASE_REG_MMX)
+#define        OPTYPE_REG_MMX4                         (0x0400|OPTYPE_BASE_REG_MMX)
+#define        OPTYPE_REG_MMX5                         (0x0500|OPTYPE_BASE_REG_MMX)
+#define        OPTYPE_REG_MMX6                         (0x0600|OPTYPE_BASE_REG_MMX)
+#define        OPTYPE_REG_MMX7                         (0x0700|OPTYPE_BASE_REG_MMX)
+
+#define        OPTYPE_REG_SSE0                         (0x0000|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE1                         (0x0100|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE2                         (0x0200|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE3                         (0x0300|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE4                         (0x0400|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE5                         (0x0500|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE6                         (0x0600|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE7                         (0x0700|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE8                         (0x0800|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE9                         (0x0900|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE10                        (0x0a00|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE11                        (0x0b00|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE12                        (0x0c00|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE13                        (0x0d00|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE14                        (0x0e00|OPTYPE_BASE_REG_SSE)
+#define        OPTYPE_REG_SSE15                        (0x0f00|OPTYPE_BASE_REG_SSE)
+
+#define        OPTYPE_REG_RIP                          (0x0100|OPTYPE_BASE_REG_OTHER|OPTYPE_BASE_REG_64BIT)
+#define        OPTYPE_REG_INVAILD                      (0x0fff|OPTYPE_BASE_REG_OTHER)
+/*
+       Bit 15: Type = Data
+       Bit 14: ModR/M = 1, Immediate = 0
+       Bit 13: [ModR/M] Field Mod
+       Bit 12: [ModR/M] Field reg
+       Bit 11: [ModR/M] Field R/M
+       Bit 10: Memory Address
+       Bit  9:
+       Bit  8:
+       Bit  7: General Register
+       Bit  6: Segment Register
+       Bit  5: Debug Register
+       Bit  4: Control Register
+       Bit  3: Packed-QuadWord MMX Register
+       Bit  2: 128bit XMM Register
+       Bit  1: Others Register
+       Bit  0: <Reserved> 
+*/
+#define OPTYPE_BASE_DATA_MODRM                 0x4000|OPTYPE_BASE_DATA
+#define OPTYPE_BASE_DATA_IMMEDIATE             0x0000|OPTYPE_BASE_DATA
+
+#define OPTYPE_BASE_DATA_MODRM_FLD_MOD         0x2000|OPTYPE_BASE_DATA_MODRM
+#define OPTYPE_BASE_DATA_MODRM_FLD_REG         0x1000|OPTYPE_BASE_DATA_MODRM
+#define        OPTYPE_BASE_DATA_MODRM_FLD_RM           0x0800|OPTYPE_BASE_DATA_MODRM
+#define        OPTYPE_BASE_DATA_MODRM_FLD_FULL         0x3800|OPTYPE_BASE_DATA_MODRM
+#define OPTYPE_BASE_DATA_MODRM_MEMORY          0x0400|OPTYPE_BASE_DATA_MODRM
+
+#define        OPTYPE_BASE_DATA_MODRM_REG_GENERAL      0x0080
+#define OPTYPE_BASE_DATA_MODRM_REG_SEGMENT     0x0040
+#define OPTYPE_BASE_DATA_MODRM_REG_DEBUG       0x0020
+#define OPTYPE_BASE_DATA_MODRM_REG_CONTROL     0x0010
+#define OPTYPE_BASE_DATA_MODRM_REG_PQMMX       0x0008
+#define OPTYPE_BASE_DATA_MODRM_REG_128XMM      0x0004
+#define OPTYPE_BASE_DATA_MODRM_REG_OTHER       0x0002
+#define OPTYPE_BASE_DATA_MODRM_REG_FULL                0x00fe
+
+#define OPTYPE_REG_RAX_STR     "rax"           
+#define OPTYPE_REG_EAX_STR     "eax"           
+#define OPTYPE_REG_AX_STR      "ax"            
+#define OPTYPE_REG_AH_STR      "ah"            
+#define OPTYPE_REG_AL_STR      "al"            
+#define OPTYPE_REG_RCX_STR     "rcx"           
+#define OPTYPE_REG_ECX_STR     "ecx"           
+#define OPTYPE_REG_CX_STR      "cx"            
+#define OPTYPE_REG_CH_STR      "ch"            
+#define OPTYPE_REG_CL_STR      "cl"            
+#define OPTYPE_REG_RDX_STR     "rdx"           
+#define OPTYPE_REG_EDX_STR     "edx"           
+#define OPTYPE_REG_DX_STR      "dx"            
+#define OPTYPE_REG_DH_STR      "dh"            
+#define OPTYPE_REG_DL_STR      "dl"            
+#define OPTYPE_REG_RBX_STR     "rbx"           
+#define OPTYPE_REG_EBX_STR     "ebx"           
+#define OPTYPE_REG_BX_STR      "bx"            
+#define OPTYPE_REG_BH_STR      "bh"            
+#define OPTYPE_REG_BL_STR      "bl"            
+#define OPTYPE_REG_RSP_STR     "rsp"           
+#define OPTYPE_REG_ESP_STR     "esp"           
+#define OPTYPE_REG_SP_STR      "sp"            
+#define OPTYPE_REG_RBP_STR     "rbp"           
+#define OPTYPE_REG_EBP_STR     "ebp"           
+#define OPTYPE_REG_BP_STR      "bp"            
+#define OPTYPE_REG_RSI_STR     "rsi"           
+#define OPTYPE_REG_ESI_STR     "esi"           
+#define OPTYPE_REG_SI_STR      "si"            
+#define OPTYPE_REG_RDI_STR     "rdi"           
+#define OPTYPE_REG_EDI_STR     "edi"           
+#define OPTYPE_REG_DI_STR      "di"            
+#define OPTYPE_REG_R8B_STR     "r8l"           
+#define OPTYPE_REG_R8W_STR     "r8w"           
+#define OPTYPE_REG_R8D_STR     "r8d"           
+#define OPTYPE_REG_R8_STR      "r8"            
+#define OPTYPE_REG_R9B_STR     "r9l"           
+#define OPTYPE_REG_R9W_STR     "r9w"           
+#define OPTYPE_REG_R9D_STR     "r9d"           
+#define OPTYPE_REG_R9_STR      "r9"            
+#define OPTYPE_REG_R10B_STR    "r10l"          
+#define OPTYPE_REG_R10W_STR    "r10w"          
+#define OPTYPE_REG_R10D_STR    "r10d"          
+#define OPTYPE_REG_R10_STR     "r10"           
+#define OPTYPE_REG_R11B_STR    "r11l"          
+#define OPTYPE_REG_R11W_STR    "r11w"          
+#define OPTYPE_REG_R11D_STR    "r11d"          
+#define OPTYPE_REG_R11_STR     "r11"           
+#define OPTYPE_REG_R12B_STR    "r12l"          
+#define OPTYPE_REG_R12W_STR    "r12w"          
+#define OPTYPE_REG_R12D_STR    "r12d"          
+#define OPTYPE_REG_R12_STR     "r12"           
+#define OPTYPE_REG_R13B_STR    "r13l"          
+#define OPTYPE_REG_R13W_STR    "r13w"          
+#define OPTYPE_REG_R13D_STR    "r13d"          
+#define OPTYPE_REG_R13_STR     "r13"           
+#define OPTYPE_REG_R14B_STR    "r14l"          
+#define OPTYPE_REG_R14W_STR    "r14w"          
+#define OPTYPE_REG_R14D_STR    "r14d"          
+#define OPTYPE_REG_R14_STR     "r14"           
+#define OPTYPE_REG_R15B_STR    "r15l"          
+#define OPTYPE_REG_R15W_STR    "r15w"          
+#define OPTYPE_REG_R15D_STR    "r15d"          
+#define OPTYPE_REG_R15_STR     "r15"           
+#define OPTYPE_REG_CS_STR      "cs"            
+#define OPTYPE_REG_DS_STR      "ds"            
+#define OPTYPE_REG_ES_STR      "es"            
+#define OPTYPE_REG_SS_STR      "ss"            
+#define OPTYPE_REG_FS_STR      "fs"            
+#define OPTYPE_REG_GS_STR      "gs"            
+#define        OPTYPE_REG_RIP_STR      "rip"
+
+#define OPTYPE_REG_FPU_ST0_STR "st0"
+#define OPTYPE_REG_FPU_ST1_STR "st1"
+#define OPTYPE_REG_FPU_ST2_STR "st2"
+#define OPTYPE_REG_FPU_ST3_STR "st3"
+#define OPTYPE_REG_FPU_ST4_STR "st4"
+#define OPTYPE_REG_FPU_ST5_STR "st5"
+#define OPTYPE_REG_FPU_ST6_STR "st6"
+#define OPTYPE_REG_FPU_ST7_STR "st7"
+
+#define        OPTYPE_REG_CR0_STR              "cr0"
+#define        OPTYPE_REG_CR1_STR              "cr1"
+#define        OPTYPE_REG_CR2_STR              "cr2"
+#define        OPTYPE_REG_CR3_STR              "cr3"
+#define        OPTYPE_REG_CR4_STR              "cr4"
+#define        OPTYPE_REG_CR5_STR              "cr5"
+#define        OPTYPE_REG_CR6_STR              "cr6"
+#define        OPTYPE_REG_CR7_STR              "cr7"
+#define        OPTYPE_REG_CR8_STR              "cr8"
+#define        OPTYPE_REG_CR9_STR              "cr9"
+#define        OPTYPE_REG_CR10_STR             "cr10"
+#define        OPTYPE_REG_CR11_STR             "cr11"
+#define        OPTYPE_REG_CR12_STR             "cr12"
+#define        OPTYPE_REG_CR13_STR             "cr13"
+#define        OPTYPE_REG_CR14_STR             "cr14"
+#define        OPTYPE_REG_CR15_STR             "cr15"
+
+#define        OPTYPE_REG_DR0_STR              "dr0"
+#define        OPTYPE_REG_DR1_STR              "dr1"
+#define        OPTYPE_REG_DR2_STR              "dr2"
+#define        OPTYPE_REG_DR3_STR              "dr3"
+#define        OPTYPE_REG_DR4_STR              "dr4"
+#define        OPTYPE_REG_DR5_STR              "dr5"
+#define        OPTYPE_REG_DR6_STR              "dr6"
+#define        OPTYPE_REG_DR7_STR              "dr7"
+#define        OPTYPE_REG_DR8_STR              "dr8"
+#define        OPTYPE_REG_DR9_STR              "dr9"
+#define        OPTYPE_REG_DR10_STR             "dr10"
+#define        OPTYPE_REG_DR11_STR             "dr11"
+#define        OPTYPE_REG_DR12_STR             "dr12"
+#define        OPTYPE_REG_DR13_STR             "dr13"
+#define        OPTYPE_REG_DR14_STR             "dr14"
+#define        OPTYPE_REG_DR15_STR             "dr15"
+
+#define        OPTYPE_REG_MMX0_STR             "mm0"
+#define        OPTYPE_REG_MMX1_STR             "mm1"
+#define        OPTYPE_REG_MMX2_STR             "mm2"
+#define        OPTYPE_REG_MMX3_STR             "mm3"
+#define        OPTYPE_REG_MMX4_STR             "mm4"
+#define        OPTYPE_REG_MMX5_STR             "mm5"
+#define        OPTYPE_REG_MMX6_STR             "mm6"
+#define        OPTYPE_REG_MMX7_STR             "mm7"
+
+#define        OPTYPE_REG_SSE0_STR             "xmm0"
+#define        OPTYPE_REG_SSE1_STR             "xmm1"
+#define        OPTYPE_REG_SSE2_STR             "xmm2"
+#define        OPTYPE_REG_SSE3_STR             "xmm3"
+#define        OPTYPE_REG_SSE4_STR             "xmm4"
+#define        OPTYPE_REG_SSE5_STR             "xmm5"
+#define        OPTYPE_REG_SSE6_STR             "xmm6"
+#define        OPTYPE_REG_SSE7_STR             "xmm7"
+#define        OPTYPE_REG_SSE8_STR             "xmm8"
+#define        OPTYPE_REG_SSE9_STR             "xmm9"
+#define        OPTYPE_REG_SSE10_STR    "xmm10"
+#define        OPTYPE_REG_SSE11_STR    "xmm11"
+#define        OPTYPE_REG_SSE12_STR    "xmm12"
+#define        OPTYPE_REG_SSE13_STR    "xmm13"
+#define        OPTYPE_REG_SSE14_STR    "xmm14"
+#define        OPTYPE_REG_SSE15_STR    "xmm15"
+
+/* C : [ModR/M:reg] Control Reg.  */
+#define OPTYPE_DATA_METHOD_C   (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_CONTROL)
+/* D : [ModR/M:reg] Debug Reg. */
+#define OPTYPE_DATA_METHOD_D   (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_DEBUG)
+/* G : [ModR/M:reg] General Reg. */
+#define OPTYPE_DATA_METHOD_G   (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_GENERAL)
+/* P : [ModR/M:reg] Packed-QuadWord MMX Reg. */ 
+#define OPTYPE_DATA_METHOD_P   (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_PQMMX)
+/* S : [ModR/M:reg] Segment Reg. */
+#define OPTYPE_DATA_METHOD_S   (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_SEGMENT)
+/* T : [ModR/M:reg] Test Reg. ( Reserved ) */
+#define OPTYPE_DATA_METHOD_T   (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_OTHER)
+/* V : [ModR/M:reg] 128bit XMM Reg. */
+#define OPTYPE_DATA_METHOD_V   (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_128XMM)
+/* N : [ModR/M:R/M] Packed-QuadWord MMX Reg. */
+#define OPTYPE_DATA_METHOD_N   (OPTYPE_BASE_DATA_MODRM_FLD_RM|OPTYPE_BASE_DATA_MODRM_REG_PQMMX)
+/* R : [ModR/M:R/M] refer to General Reg by R/M Field */
+#define OPTYPE_DATA_METHOD_R   (OPTYPE_BASE_DATA_MODRM_FLD_RM|OPTYPE_BASE_DATA_MODRM_REG_GENERAL)
+/* U : [ModR/M:R/M] 128bit XMM Reg. */
+#define OPTYPE_DATA_METHOD_U   (OPTYPE_BASE_DATA_MODRM_FLD_RM|OPTYPE_BASE_DATA_MODRM_REG_128XMM)
+/* E : [ModR/M] Memory & Reg. */
+#define OPTYPE_DATA_METHOD_E   (OPTYPE_BASE_DATA_MODRM_FLD_FULL|OPTYPE_BASE_DATA_MODRM_REG_FULL|OPTYPE_BASE_DATA_MODRM_MEMORY)
+/* W : [ModR/M] 128bit XMM Reg. or Memory Address 
+               ( Memory Address calculated by Seg.Reg. BaseReg. IndexReg. 
+                       ScalingFactor, Displacement */
+#define OPTYPE_DATA_METHOD_W   (OPTYPE_BASE_DATA_MODRM_FLD_FULL|OPTYPE_BASE_DATA_MODRM_REG_128XMM|OPTYPE_BASE_DATA_MODRM_MEMORY)
+/* Q : [ModR/M] MMX reg. or Memory Address 
+               ( Memory Address calced by Seg.Reg, BaseReg. IndexReg. 
+                       ScalingFactor, Displacement */
+#define OPTYPE_DATA_METHOD_Q   (OPTYPE_BASE_DATA_MODRM_FLD_FULL|OPTYPE_BASE_DATA_MODRM_REG_PQMMX|OPTYPE_BASE_DATA_MODRM_MEMORY)
+/* M : Memory Access (by ModR/M) (NO!!: Reg. Indicate by ModR/M) */
+#define OPTYPE_DATA_METHOD_M   (OPTYPE_BASE_DATA_MODRM_FLD_FULL|OPTYPE_BASE_DATA_MODRM_MEMORY)
+
+#define OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE     0x0800|OPTYPE_BASE_DATA_IMMEDIATE
+#define OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR    0x0400|OPTYPE_BASE_DATA_IMMEDIATE
+#define OPTYPE_BASE_DATA_IMMEDIATE_DATA                0x0200|OPTYPE_BASE_DATA_IMMEDIATE
+#define OPTYPE_BASE_DATA_IMMEDIATE_IMM         0x0100|OPTYPE_BASE_DATA_IMMEDIATE
+#define OPTYPE_BASE_DATA_IMMEDIATE_NONE                0x0000|OPTYPE_BASE_DATA_IMMEDIATE
+
+/* A : Direct Address (NO!!: ModR/M, BaseReg, IndexReg, ScalingFactor) */
+#define OPTYPE_DATA_METHOD_A   (0x0010|OPTYPE_BASE_DATA_IMMEDIATE_DATA)
+/* I : Immediate Data (NO!!: ModR/M) */
+#define OPTYPE_DATA_METHOD_I   (0x0020|OPTYPE_BASE_DATA_IMMEDIATE_DATA)
+/* J : IP relative Address (NO!!: ModR/M) */
+#define OPTYPE_DATA_METHOD_J   (0x0030|OPTYPE_BASE_DATA_IMMEDIATE_DATA)
+/* O : Word of DWord Data (NO!!: ModR/M, BaseReg. IndexReg, ScalingFactor */
+#define OPTYPE_DATA_METHOD_O   (0x0040|OPTYPE_BASE_DATA_IMMEDIATE_DATA)
+/* F : EFLAGS / RFLAGS Reg. (NO!!: ModR/M)  */
+#define OPTYPE_DATA_METHOD_F   (0x0010|OPTYPE_BASE_DATA_IMMEDIATE_NONE)
+/* X : DS:rSI (Memory Address) */
+#define OPTYPE_DATA_METHOD_X   (0x0020|OPTYPE_BASE_DATA_IMMEDIATE_NONE)
+/* Y : ES:rDI (Memory Address) */
+#define OPTYPE_DATA_METHOD_Y   (0x0030|OPTYPE_BASE_DATA_IMMEDIATE_NONE)
+
+/* 1 : 0x01 Data (Immediate Data) */
+#define OPTYPE_DATA_METHOD_1   (0x0001|OPTYPE_BASE_DATA_IMMEDIATE_IMM)
+/* - : Illegal Instruction by DrDeamon64 Assembler System */
+#define OPTYPE_DATA_METHOD_ILLEGAL     (0x00ff|OPTYPE_BASE_DATA_IMMEDIATE_IMM)
+
+
+
+
+#define OPSIZE_BASE_SIZE_BYTE          0x0001
+#define OPSIZE_BASE_SIZE_WORD          0x0002
+#define OPSIZE_BASE_SIZE_DWORD         0x0004
+#define OPSIZE_BASE_SIZE_QWORD         0x0008
+#define OPSIZE_BASE_SIZE_DQWORD                0x0010
+#define        OPSIZE_BASE_FLOAT                       0x0040
+#define        OPSIZE_BASE_DOUBLE                      0x0080
+#define        OPSIZE_BASE_ILLEGAL                     0x00ff
+
+#define OPSIZE_BASE_ATTR_DEPENDON      0x2000
+#define OPSIZE_BASE_ATTR_REGARDLESS    0x0000
+#define OPSIZE_BASE_ADDRESS                    0x4000
+#define OPSIZE_BASE_SPECIAL                    0x8000
+#define        OPSIZE_BASE_PACKED                      0x1000
+#define OPSIZE_BASE_SCALAR                     0x0800
+
+
+/* b : Byte (Regardless Operand Size Attribute) */
+#define OPSIZE_B       (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_BYTE)
+/* w : Word (Regardless Operand Size Attribute) */
+#define OPSIZE_W       (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_WORD)
+/* d : DWord (Regardless Operand Size Attribute) */
+#define OPSIZE_D       (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_DWORD)
+/* q : QuadWord(64bit) (Regardless Operand Size Attribute) */
+#define OPSIZE_Q       (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_QWORD)
+/* dq : Double QuadWord(128Bit) (Regardless Operand Size Attribute) */
+#define OPSIZE_DQ      (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_DQWORD)
+/* h : Memory Pointer for 94/108bit */
+#define OPSIZE_H       (OPSIZE_BASE_ADDRESS)
+/* p : Memory Pointer for 32bit or 48bit (depend on Operand Size Attribute) */
+#define OPSIZE_P       (OPSIZE_BASE_ADDRESS|OPSIZE_BASE_ATTR_DEPENDON)
+/* r : Memory Pointer for 14bit / 28bit */
+#define OPSIZE_R       (OPSIZE_BASE_ADDRESS)
+/* t : Memory Pointer for 80bit */
+#define OPSIZE_T       (OPSIZE_BASE_ADDRESS)
+/* pd : 128bit Packed double-float Data */
+#define OPSIZE_PD      (OPSIZE_BASE_PACKED|OPSIZE_BASE_DOUBLE|OPSIZE_BASE_SIZE_DQWORD)
+/* ps : 128bit Packed float Data */
+#define OPSIZE_PS      (OPSIZE_BASE_PACKED|OPSIZE_BASE_FLOAT|OPSIZE_BASE_SIZE_DQWORD)
+/* sd : Scalar Element of 128bit Packed Double-float Data */
+#define OPSIZE_SD      (OPSIZE_BASE_PACKED|OPSIZE_BASE_SCALAR|OPSIZE_BASE_DOUBLE|OPSIZE_BASE_SIZE_DQWORD)
+/* ss : Scalar Element of 128bit Packed float Data */
+#define OPSIZE_SS      (OPSIZE_BASE_PACKED|OPSIZE_BASE_SCALAR|OPSIZE_BASE_FLOAT|OPSIZE_BASE_SIZE_DQWORD)
+/* s : 6Byte or 10 Byte Pseudo Descriptor */
+#define OPSIZE_S       (OPSIZE_BASE_SPECIAL|0x0001)
+/* v : Word, DWord, QuadWord(64bit-ModeOnly) (Depend On Operand Size Attribute)*/
+#define OPSIZE_V       (OPSIZE_BASE_ATTR_DEPENDON|OPSIZE_BASE_SIZE_WORD|OPSIZE_BASE_SIZE_DWORD|OPSIZE_BASE_SIZE_QWORD)
+/* z : Word(16bit Operand Size) or DWord(32/64 Operand Size) */
+#define OPSIZE_Z       (OPSIZE_BASE_ATTR_DEPENDON|OPSIZE_BASE_SIZE_WORD|OPSIZE_BASE_SIZE_DWORD)
+/* a : 2 Word or 2 DWord in Memory ( for BOUND ) */
+#define OPSIZE_A       (OPSIZE_BASE_ADDRESS|OPSIZE_BASE_SIZE_WORD|OPSIZE_BASE_SIZE_DWORD)
+
+#define        OPSIZE_ILLEGAL                  (OPSIZE_BASE_ILLEGAL)
+
+
+
+#define isRegType(m,n)  (((Word)(((Word)(m))&(OPTYPE_BASE_REG_TYPEMASK)))==(n))
+#define isRegID(m,n)  (((Word)(((Word)(m))&(OPTYPE_BASE_REG_IDMASK)))==(n))
+#define isRegGenericID(m,n)  (((Word)(((Word)(m))&(OPTYPE_BASE_REG_GENERIC_IDMASK)))==(n))
+#define isRegSize(m,n)  (((Word)(((Word)(m))&(OPTYPE_BASE_REG_SIZEMASK)))==(n))
+
+
+#endif /* DRD64_HEADER_INTEL64_DBTYPE */
+
+/* EOF of drd64_intel64_dbtype.h ----------------------------------- */ 
+
diff --git a/libintel64asm/drd64_intel64_debug.c b/libintel64asm/drd64_intel64_debug.c
new file mode 100644 (file)
index 0000000..59eadd3
--- /dev/null
@@ -0,0 +1,367 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_debug.c
+Function: Intel64 DisAsm/Asm Debug Fucntions 
+Comment:  none
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#include"drd64_intel64_dbtype.h"
+#include"drd64_intel64_asm.h"
+#include"drd64_intel64_disasm.h"
+#define DRD64_SRC_LIBINTEL64ASM_FUNC
+#include"../include/libintel64asm.h"
+
+
+/* [ Debug Level ] -----------------------------------------------------
+ Level Range : 0 - 4 ( Default : 0 )
+ Level 0 : None Message
+ Level 1 : Assemble & DisAssemble Start & Last Status Only
+ Level 2 : 
+ Level 3 : 
+ Level 4 : Full Message
+----------------------------------------------------------------------*/
+
+
+static int             i_debug_level;
+
+
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+void
+       Drd64_Intel64_Debug_Asm_PrintCarveString(
+               Drd64_Intel64_AssemblePacket *p_assemble,
+               char    *pstr_input )
+{
+       /* Judge Debug Level */
+       if( 3 > i_debug_level )         { return; }
+
+       puts(   "----------------------------------------------------------");
+       printf( " Input String : %s\n", pstr_input );
+       printf( "    [ Instruction : %s ]\n", p_assemble->str_instruction );
+       printf( "    [ Destination : %s ]\n", p_assemble->str_destination );
+       printf( "    [ Source      : %s ]\n", p_assemble->str_source );
+       printf( "    [ Option      : %s ]\n", p_assemble->str_option );
+       puts("");
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+static void
+       Drd64_Intel64_Debug_PrintOperandTree_Sub(
+               Drd64_Intel64_OperandNode *p_now)
+{
+       if( NULL == p_now )             { return; }
+
+       Drd64_Intel64_Debug_PrintOperandTree_Sub( p_now->p_left );
+       Drd64_Intel64_Debug_PrintOperandTree_Sub( p_now->p_right );
+
+       printf( "    [%s (Operand Size = %2d, Address Size = %2d, TypeID = %04x )]\n",
+               p_now->str_data, p_now->i_operandsize, p_now->i_addressize,
+               p_now->w_typeid );
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+void
+       Drd64_Intel64_Debug_PrintOperandTree(
+               Drd64_Intel64_OperandNode *p_root,
+               char *pstr_operandstr )
+{
+       /* Judge Debug Level */
+       if( 3 > i_debug_level )         { return; }
+
+
+       printf( "- Operand Tree : %s -----------------------\n",
+               pstr_operandstr );
+
+       if( NULL == p_root )
+               { puts(" None "); }
+       else
+               { Drd64_Intel64_Debug_PrintOperandTree_Sub( p_root ); }
+
+       puts("");
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+void
+       Drd64_Intel64_Debug_Asm_PrintOperandChain(
+               Drd64_Intel64_OperandNode *p_chain )
+{
+       Drd64_Intel64_OperandNode       *p_temp;
+
+       /* Judge Debug Level */
+       if( 3 > i_debug_level )         { return; }
+
+       puts( "- Operand Chain --------------------------");
+
+       p_temp  = p_chain;
+       do      {
+               printf( "{%s} => ", p_temp->str_data );
+               p_temp  = p_temp->p_next;
+       }while( NULL != p_temp );
+
+       puts("\n");
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+void
+       Drd64_Intel64_Debug_Asm_PrintMemoryOperand(
+               Drd64_Intel64_OperandNode       *p_index,
+               Drd64_Intel64_OperandNode       *p_scale,
+               Drd64_Intel64_OperandNode       *p_base,
+               Drd64_Intel64_OperandNode       *p_disp)
+{
+       /* Judge Debug Level */
+       if( 3 > i_debug_level )         { return; }
+
+    printf("- Analyze Memory Operand -----------------------------\n");
+    if( NULL != p_index )   {
+        printf(" Index = %p ( TypeID = %02x : String = %s : Value = %ld )\n",
+                p_index, p_index->w_typeid, p_index->str_data,
+                p_index->v_val.val.val64 );
+    } else  {
+        printf(" Index = None\n");
+    }
+
+    if( NULL != p_scale )   {
+        printf(" Scale = %p ( TypeID = %02x : String = %s : Value = %ld )\n",
+                p_scale, p_scale->w_typeid, p_scale->str_data,
+                p_scale->v_val.val.val64 );
+    } else  {
+        printf(" Scale = None\n");
+    }
+
+    if( NULL != p_base )    {
+        printf(" Base  = %p ( TypeID = %02x : String = %s : Value = %ld )\n",
+                p_base, p_base->w_typeid, p_base->str_data,
+                p_base->v_val.val.val64 );
+    } else  {
+        printf(" Base  = None\n");
+    }
+
+    if( NULL != p_disp )    {
+        printf(" Disp. = %p ( TypeID = %02x : String = %s : Value = %ld )\n",
+                p_disp, p_disp->w_typeid, p_disp->str_data,
+                p_disp->v_val.val.val64 );
+    } else  {
+        printf(" Disp. = None\n");
+    }
+
+    puts("");
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+void
+       Drd64_Intel64_Debug_Asm_PrintAnswer(
+               Byte    *pb_data,
+               char    *pstr_src,
+               int             i_bytes )
+{
+       int             i_cnt;
+
+       /* Judge Debug Level */
+       if( 1 > i_debug_level )         { return; }
+
+    puts("- Assemble Answer -----------------------------");
+
+       printf(" Input    : %s\n", pstr_src );
+
+    printf(" Output   : %2d Bytes [", i_bytes );
+    for( i_cnt = 0; i_cnt < i_bytes - 1; i_cnt++ )
+               { printf(" %02x :", *(pb_data + i_cnt) ); }
+    printf(" %02x ]\n\n", *(pb_data + i_cnt) );
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+void
+       Drd64_Intel64_Debug_DisAsm_PrintAnswer(
+               char    *pstr_answer,
+               Byte    *pb_src,
+               int             i_bytes )
+{
+       int             i_cnt;
+
+       /* Judge Debug Level */
+       if( 1 > i_debug_level )         { return; }
+
+    puts("- DisAssemble Answer -----------------------------");
+
+    printf(" Input    : %2dBytes [", i_bytes );
+    for( i_cnt = 0; i_cnt < i_bytes - 1; i_cnt++ )
+               { printf(" %02x :", *(pb_src + i_cnt) ); }
+    printf(" %02x ]\n", *(pb_src + i_cnt) );
+
+       printf(" Output   : %s\n\n", pstr_answer );
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+void
+       Drd64_Intel64_Debug_PrintAnalyzePacket(
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               char *pstr_debugstr,
+               int i_print_debuglevel)
+{
+       /* Judge Debug Level */
+       if( i_print_debuglevel > i_debug_level )                { return; }
+
+       printf("- Analyze Packet (%s) --------------------------\n",
+                       pstr_debugstr );
+
+       if( NULL == p_analyze )         {
+
+       }
+       else    {
+               printf(" Prefixes : %d [%02x : %02x : %02x : %02x]\n",
+            p_analyze->i_prefixes,
+                       p_analyze->b_prefix[0],
+            p_analyze->b_prefix[1],
+                       p_analyze->b_prefix[2],
+            p_analyze->b_prefix[3] );
+
+               printf( " Rex      : %02x [ b = %d : x = %d : r = %d : w = %d ]\n",
+                       p_analyze->rex.b_rex, p_analyze->rex.rex.b,
+                       p_analyze->rex.rex.x, p_analyze->rex.rex.r,
+                       p_analyze->rex.rex.w );
+               printf( " Nimonic  : %s\n", p_analyze->str_instruction );
+               printf( " Opcodes  : %d [ %02x : %02x : %02x ]\n",
+                       p_analyze->i_opcodes, p_analyze->b_opcode[0],
+                       p_analyze->b_opcode[1], p_analyze->b_opcode[2] );
+               printf( " CodeType : %02x\n", p_analyze->b_codetype );
+               printf( " ModR/M   : %02x [ Mod = %x : reg = %x : r/m = %x ]\n",
+                       p_analyze->modrm.b_modrm, p_analyze->modrm.modrm.mod,
+                       p_analyze->modrm.modrm.reg, p_analyze->modrm.modrm.rm );
+               printf( " SiB      : %02x [ scale = %x : index = %x : base = %x ]\n",
+                       p_analyze->sib.b_sib, p_analyze->sib.sib.scale,
+                       p_analyze->sib.sib.index, p_analyze->sib.sib.base );
+               printf( "   [ Type : Mod = %02x, reg = %02x, r/m = %02x ]\n",
+                       p_analyze->b_modtype, p_analyze->b_regtype,
+                       p_analyze->b_rmtype );
+               printf( " Operands : %d [ Operand Size = %2d : Address Size = %2d ]\n",
+                       p_analyze->i_operands, p_analyze->i_operandsize, 
+                       p_analyze->i_addresssize );
+               printf( "  Destination : [ TypeID = %02x : SizeID = %02x Size = %d] \n",
+                       p_analyze->w_desttype,
+                       p_analyze->w_destsize,
+                       p_analyze->i_destsize );
+               printf( "                [ %s ]\n",
+                       p_analyze->str_destination );
+               printf( "  Source      : [ TypeID = %02x : SizeID = %02x Size = %d] \n",
+                       p_analyze->w_srctype,
+                       p_analyze->w_srcsize,
+                       p_analyze->i_srcsize );
+               printf( "                [ %s ]\n",
+                       p_analyze->str_source );
+               printf( "  Option      : [ TypeID = %02x : SizeID = %02x Size = %d] \n",
+                       p_analyze->w_optiontype,
+                       p_analyze->w_optionsize,
+                       p_analyze->i_optionsize );
+               printf( "                [ %s ]\n",
+                       p_analyze->str_option );
+
+               printf(" Displacement : %d [%08x]\n",
+                       p_analyze->v_disp.i_bytes, ((p_analyze->v_disp.i_bytes == 1) ?
+                       p_analyze->v_disp.val.val8 : p_analyze->v_disp.val.val32));
+       
+               if( 0 == p_analyze->v_imm.i_bytes )
+                   { printf(" Immediate    : 0 \n"); }
+               else if( 1 == p_analyze->v_imm.i_bytes )
+                       { printf(" Immediate    : 1 [%02x]\n",
+                       p_analyze->v_imm.val.val8 ); }
+               else if( 2 == p_analyze->v_imm.i_bytes )
+                       { printf(" Immediate    : 2 [%04x]\n",
+                               p_analyze->v_imm.val.val16 ); }
+               else if( 4 == p_analyze->v_imm.i_bytes )
+                       { printf(" Immediate    : 4 [%08x]\n",
+                       p_analyze->v_imm.val.val32 ); }
+               else if( 8 == p_analyze->v_imm.i_bytes )
+                       { printf(" Immediate    : 8 [%16x]\n",
+                       p_analyze->v_imm.val.val64 ); }
+
+       }       
+
+       puts("");
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBINTEL64ASM_FUNC     void
+       Drd64_LibIntel64asm_SetDebugLevel(
+               int     i_level )
+{
+       i_debug_level   = i_level;
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBINTEL64ASM_FUNC     int
+       Drd64_LibIntel64asm_GetDebugLevel(
+               void )
+{
+       return i_debug_level;
+}
+
+/* EOF of drd64_intel64_debug.c ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_disasm.c b/libintel64asm/drd64_intel64_disasm.c
new file mode 100644 (file)
index 0000000..e7f617d
--- /dev/null
@@ -0,0 +1,1073 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_disasm.c
+Function: Intel64 DisAssembler Main Module
+Comment: none 
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#include"drd64_intel64_disasm.h"
+#include"drd64_intel64_dbtype.h"
+#include"drd64_intel64_db.h"
+#include"drd64_intel64_common.h"
+/*#include"drd64_intel64_debug.h"*/
+#define        DRD64_SRC_LIBINTEL64ASM_FUNC
+#include"../include/libintel64asm.h"
+
+
+Word drd64_register_table[][16] = {
+       { OPTYPE_REG_AL  , OPTYPE_REG_CL  , OPTYPE_REG_DL  , OPTYPE_REG_BL  ,
+         OPTYPE_REG_AH  , OPTYPE_REG_CH  , OPTYPE_REG_DH  , OPTYPE_REG_BH  ,
+         OPTYPE_REG_R8B , OPTYPE_REG_R9B , OPTYPE_REG_R10B, OPTYPE_REG_R11B,
+         OPTYPE_REG_R12B, OPTYPE_REG_R13B, OPTYPE_REG_R14B, OPTYPE_REG_R15B }, 
+       { OPTYPE_REG_AX  , OPTYPE_REG_CX  , OPTYPE_REG_DX  , OPTYPE_REG_BX  ,
+         OPTYPE_REG_SP  , OPTYPE_REG_BP  , OPTYPE_REG_SI  , OPTYPE_REG_DI  ,
+         OPTYPE_REG_R8W , OPTYPE_REG_R9W , OPTYPE_REG_R10W, OPTYPE_REG_R11W,
+         OPTYPE_REG_R12W, OPTYPE_REG_R13W, OPTYPE_REG_R14W, OPTYPE_REG_R15W }, 
+       { OPTYPE_REG_EAX , OPTYPE_REG_ECX , OPTYPE_REG_EDX , OPTYPE_REG_EBX ,
+         OPTYPE_REG_ESP , OPTYPE_REG_EBP , OPTYPE_REG_ESI , OPTYPE_REG_EDI ,
+         OPTYPE_REG_R8D , OPTYPE_REG_R9D , OPTYPE_REG_R10D, OPTYPE_REG_R11D,
+         OPTYPE_REG_R12D, OPTYPE_REG_R13D, OPTYPE_REG_R14D, OPTYPE_REG_R15D }, 
+       { OPTYPE_REG_RAX , OPTYPE_REG_RCX , OPTYPE_REG_RDX , OPTYPE_REG_RBX ,
+         OPTYPE_REG_RSP , OPTYPE_REG_RBP , OPTYPE_REG_RSI , OPTYPE_REG_RDI ,
+         OPTYPE_REG_R8  , OPTYPE_REG_R9  , OPTYPE_REG_R10 , OPTYPE_REG_R11 ,
+         OPTYPE_REG_R12 , OPTYPE_REG_R13 , OPTYPE_REG_R14 , OPTYPE_REG_R15 }, 
+       { OPTYPE_REG_ES  , OPTYPE_REG_CS  , OPTYPE_REG_SS  , OPTYPE_REG_DS  ,
+         OPTYPE_REG_FS  , OPTYPE_REG_GS  , OPTYPE_REG_INVAILD,OPTYPE_REG_INVAILD,
+         OPTYPE_REG_ES  , OPTYPE_REG_CS  , OPTYPE_REG_SS  , OPTYPE_REG_DS  ,
+         OPTYPE_REG_FS  , OPTYPE_REG_GS  , OPTYPE_REG_INVAILD,OPTYPE_REG_INVAILD},
+       { OPTYPE_REG_CR0 , OPTYPE_REG_CR1 , OPTYPE_REG_CR2 , OPTYPE_REG_CR3 ,
+         OPTYPE_REG_CR4 , OPTYPE_REG_CR5 , OPTYPE_REG_CR6 , OPTYPE_REG_CR7 ,
+         OPTYPE_REG_CR8 , OPTYPE_REG_CR9 , OPTYPE_REG_CR10, OPTYPE_REG_CR11,
+         OPTYPE_REG_CR12, OPTYPE_REG_CR13, OPTYPE_REG_CR14, OPTYPE_REG_CR15 }, 
+       { OPTYPE_REG_DR0 , OPTYPE_REG_DR1 , OPTYPE_REG_DR2 , OPTYPE_REG_DR3 ,
+         OPTYPE_REG_DR4 , OPTYPE_REG_DR5 , OPTYPE_REG_DR6 , OPTYPE_REG_DR7 ,
+         OPTYPE_REG_DR8 , OPTYPE_REG_DR9 , OPTYPE_REG_DR10, OPTYPE_REG_DR11,
+         OPTYPE_REG_DR12, OPTYPE_REG_DR13, OPTYPE_REG_DR14, OPTYPE_REG_DR15 }, 
+       { OPTYPE_REG_MMX0, OPTYPE_REG_MMX1, OPTYPE_REG_MMX2, OPTYPE_REG_MMX3,
+         OPTYPE_REG_MMX4, OPTYPE_REG_MMX5, OPTYPE_REG_MMX6, OPTYPE_REG_MMX7,
+         OPTYPE_REG_MMX0, OPTYPE_REG_MMX1, OPTYPE_REG_MMX2, OPTYPE_REG_MMX3,
+         OPTYPE_REG_MMX4, OPTYPE_REG_MMX5, OPTYPE_REG_MMX6, OPTYPE_REG_MMX7 }, 
+       { OPTYPE_REG_SSE0, OPTYPE_REG_SSE1, OPTYPE_REG_SSE2, OPTYPE_REG_SSE3,
+         OPTYPE_REG_SSE4, OPTYPE_REG_SSE5, OPTYPE_REG_SSE6, OPTYPE_REG_SSE7,
+         OPTYPE_REG_SSE8, OPTYPE_REG_SSE9,OPTYPE_REG_SSE10,OPTYPE_REG_SSE11,
+        OPTYPE_REG_SSE12,OPTYPE_REG_SSE13,OPTYPE_REG_SSE14,OPTYPE_REG_SSE15 }
+};
+
+
+
+/*----------------------------------------------------------------------
+static int
+       Drd64_Intel64_DisAsm_ConvValue2String(
+               : Convert Value to String 
+
+               char *p_str,    : [dest] String from Value
+               Value *p_val,   : [src] Value
+               int i_maxstr)   : [opt] Max Strings
+----------------------------------------------------------------------*/
+static int
+       Drd64_Intel64_DisAsm_ConvValue2String(
+               char *p_str,
+               Value *p_val,
+               int i_maxstr) 
+{
+       if( 1 == p_val->i_bytes )       {
+               snprintf( p_str, i_maxstr, "%03xh", p_val->val.val8 );
+       } else if( 2 == p_val->i_bytes )        {
+               snprintf( p_str, i_maxstr, "%05xh", p_val->val.val16 );
+       } else if( 4 == p_val->i_bytes )        {
+               snprintf( p_str, i_maxstr, "%09xh", p_val->val.val32 );
+       } else if( 8 == p_val->i_bytes )        {
+               snprintf( p_str, i_maxstr, "%09x%08xh",
+                       (p_val->val.val64 >> 32), p_val->val.val64 );
+       }
+
+       return 0x00;
+}
+
+/*----------------------------------------------------------------------
+static int
+       Drd64_Intel64_DisAsm_CalcDefaultAddressSize(
+               : Calc. Default Address Size from Prefix67h
+
+               Drd64_Intel64_AnalyzePacket *p_analyze )
+                               : [dest][src] Drd64 Analyze Packet
+----------------------------------------------------------------------*/
+/* XXX - 64bit Long Mode Only!! --------------------------------------*/
+static int
+       Drd64_Intel64_DisAsm_CalcDefaultAddressSize(
+               Drd64_Intel64_AnalyzePacket *p_analyze )
+{
+       int             i_defaultaddresssize    = 8;
+
+       /* Check Operand-Size Prefix(066h) */
+       if(( 0x67 == p_analyze->b_prefix[0])
+                       || ( 0x67 == p_analyze->b_prefix[1])
+                       || ( 0x67 == p_analyze->b_prefix[2])
+                       || ( 0x67 == p_analyze->b_prefix[3]) )  {
+               i_defaultaddresssize    = 4;
+       }
+
+       p_analyze->i_addresssize        = i_defaultaddresssize;
+       
+       return i_defaultaddresssize;
+}
+
+
+/*----------------------------------------------------------------------
+static int
+       Drd64_Intel64_DisAsm_CalcOperandSize(
+               : Calc. Operand Size from Prefix66h & Rex.W
+
+               Drd64_Intel64_AnalyzePacket *p_analyze )
+                               : [dest][src] Drd64 Analyze Packet
+----------------------------------------------------------------------*/
+/* XXX - 64bit Long Mode Only!! --------------------------------------*/
+static int
+       Drd64_Intel64_DisAsm_CalcOperandSize(
+               Drd64_Intel64_AnalyzePacket *p_analyze )
+{
+       Byte    b_prefix66h     = 0x00;
+       int             i_defaultsize   = 4;
+
+       /* Check Operand-Size Prefix(066h) */
+       if(( 0x66 == p_analyze->b_prefix[0])
+                       || ( 0x66 == p_analyze->b_prefix[1])
+                       || ( 0x66 == p_analyze->b_prefix[2])
+                       || ( 0x66 == p_analyze->b_prefix[3]) )  {
+               b_prefix66h     = 0x66;
+       }
+
+       if( 0x00 != p_analyze->rex.rex.w )      { i_defaultsize = 8; }
+       else if( 0x66 == b_prefix66h )          { i_defaultsize = 2; }
+
+       p_analyze->i_operandsize        = i_defaultsize;
+       
+       return i_defaultsize;
+}
+
+/*----------------------------------------------------------------------
+static int
+       Drd64_Intel64_DisAsm_GetSize_SizeID(
+               : Get Operand Size form Intel 64 DB SizeID
+
+               int i_operandsize,      : [src] Default Operand Size
+               Word w_methodtype,      : [src] Method Type ID
+               Word w_sizeid )         : [src] Size ID
+----------------------------------------------------------------------*/
+/* XXX - 64bit Long Mode Only!! --------------------------------------*/
+static int
+       Drd64_Intel64_DisAsm_GetSize_SizeID(
+               int i_operandsize,
+               Word w_methodtype,
+               Word w_sizeid )
+{
+       int             i_ret = -1;
+
+       if( isBitFlag(w_methodtype,OPTYPE_BASE_DATA))   {
+               /* Memory / Immediate Data ---*/
+               switch( w_sizeid )
+                       {
+                       case OPSIZE_B: i_ret    = 1; break;
+                       case OPSIZE_W: i_ret    = 2; break;
+                       case OPSIZE_D: i_ret    = 4; break;
+                       case OPSIZE_Q: i_ret    = 8; break;
+                       case OPSIZE_DQ: i_ret   = 16; break;
+                       case OPSIZE_PD: i_ret   = 16; break;
+                       case OPSIZE_PS: i_ret   = 16; break;
+                       case OPSIZE_SD: i_ret   = 16; break;
+                       case OPSIZE_SS: i_ret   = 16; break;
+                       /* OPSIZE_H, OPSIZE_R, OPSIZE_T */
+                       case OPSIZE_H: i_ret    = 8; break;             /* XXX */
+                       case OPSIZE_Z:
+                               i_ret   = ((2 == i_operandsize) ? 2 : 4);       break;
+                       case OPSIZE_S: i_ret    = -1; break;    /* XXX */
+                       case OPSIZE_A: i_ret    = -1; break;    /* XXX */
+                       case OPSIZE_V: i_ret    = i_operandsize; break;
+                       case OPSIZE_P: i_ret    = i_operandsize; break;
+                       default:        i_ret   = -1;   break;
+               }
+       } else  {
+               /* Register Data ---*/
+               if( isBitFlag(w_methodtype,OPTYPE_BASE_REG_64BIT))
+                       { i_ret = 8; }
+               else if( isBitFlag(w_methodtype,OPTYPE_BASE_REG_32BIT))
+                       { i_ret = 4; }
+               else if( isBitFlag(w_methodtype,OPTYPE_BASE_REG_16BIT))
+                       { i_ret = 2; }
+               else
+                       { i_ret = 1; }
+
+               switch( w_sizeid )      {
+                       case OPSIZE_V:  i_ret   = i_operandsize;        break;
+               }
+
+       }
+
+       return i_ret;
+}
+
+/*----------------------------------------------------------------------
+static Byte *
+       Drd64_Intel64_DisAsm_CarvePrefixByte(
+               : Carve Prefix Byte from ByteString
+
+               Drd64_Intel64_AnalyzePacket *drd64_analyze,
+                                               : [dest] drd64 Analyze Packet
+               Byte *pb_base)  : [src] Byte String
+----------------------------------------------------------------------*/
+static Byte *
+       Drd64_Intel64_DisAsm_CarvePrefixByte(
+               Drd64_Intel64_AnalyzePacket *drd64_analyze,
+               Byte *pb_base)
+{
+       Byte    *pb_now;
+       int             i_cnt;
+       Byte    b_codetype;
+
+       pb_now  = pb_base;
+
+       for( i_cnt=0; i_cnt<5; i_cnt++ )        {
+               /* Query GetByte is Prefix? to Intel64DB */     
+               b_codetype = Drd64_Intel64db_GetBytePrefixType( *pb_now, INTEL64_BIT64ONLY );
+               if(( INTEL64_CODETYPE_PREFIX == b_codetype )
+                       || ( INTEL64_CODETYPE_SEGMENT == b_codetype ) )         {
+                       drd64_analyze->b_prefix[ drd64_analyze->i_prefixes ]
+                               = *pb_now++;
+                       drd64_analyze->i_prefixes++;
+               } else if( INTEL64_CODETYPE_REX == b_codetype ) {
+                       drd64_analyze->rex.b_rex = *pb_now++;
+                       break;
+               } else  {
+                       break;
+               }
+       }       
+
+       return pb_now;
+}
+
+/*----------------------------------------------------------------------
+static Byte *
+       Drd64_Intel64_DisAsm_CarveOpecode(
+               : Carve OpeCodes from Byte String
+
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+                                               : [dest] Drd64 Analyze Packet
+               Byte *pb_base ) : [src] Byte String
+----------------------------------------------------------------------*/
+static Byte *
+       Drd64_Intel64_DisAsm_CarveOpecode(
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Byte *pb_base )
+{
+       Byte    *pb_now;
+       Byte    b_codetype;
+
+       pb_now  = pb_base;
+
+       /* Set Byte 0 ---*/
+       p_analyze->b_opcode[0]  = *(pb_now + 0);
+       p_analyze->i_opcodes            = 1;
+       b_codetype = Drd64_Intel64db_GetByteCodeType( p_analyze );
+
+       /* Judge & Set MultiByte ---*/
+       if( INTEL64_CODETYPE_ESCAPE == b_codetype )     {
+               /* Set Byte 1 ---*/
+               p_analyze->b_opcode[1]  = *(pb_now + 1);
+               p_analyze->i_opcodes            = 2;
+               b_codetype = Drd64_Intel64db_GetByteCodeType( p_analyze );
+
+               if( INTEL64_CODETYPE_ESCAPE2 == b_codetype )    {
+                       p_analyze->b_opcode[2]  = *(pb_now + 2);
+                       p_analyze->i_opcodes            = 3;
+                       b_codetype = Drd64_Intel64db_GetByteCodeType( p_analyze );
+               }
+
+               /* XXX ---*/
+               /*
+               if( INTEL64_CODETYPE_ILLEGAL == b_codetype )    {
+                       return NULL;
+               }
+               */
+
+       } else if( INTEL64_CODETYPE_FPUBYTE1 == b_codetype )    {
+               /* Judge Byte2 is 0BFh up/down */
+               if( 0xbf < *(pb_now + 1) )      {
+                       p_analyze->b_opcode[1]  = *(pb_now + 1);
+                       p_analyze->i_opcodes            = 2;
+                       b_codetype = Drd64_Intel64db_GetByteCodeType( p_analyze );
+               } else  {
+                       p_analyze->b_modtype    = INTEL64_MODTYPE_FPU;
+               }
+       } else if( INTEL64_CODETYPE_ILLEGAL == b_codetype )     {
+               return NULL;
+       }
+       pb_now  += p_analyze->i_opcodes;
+
+       return pb_now;
+}
+
+
+/*----------------------------------------------------------------------
+static Byte *
+       Drd64_Intel64_DisAsm_CarveDisplacement(
+               : Carve Displacement from ByteString
+
+               Drd64_Intel64_AnalyzePacket *p_analyze, 
+                                               : [dest] Drd64 Analyze Packet
+               Byte *pb_base)  : [src] Byte String
+----------------------------------------------------------------------*/
+/* XXX - 64bit Long Mode Only!! --------------------------------------*/
+static Byte *
+       Drd64_Intel64_DisAsm_CarveDisplacement(
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Byte *pb_base)
+{
+       Byte    *pb_now;
+
+       pb_now  = pb_base;
+
+       /* Carve Displacement */
+       if( 0 < p_analyze->i_modrm_bytes )      {
+               if( 0x01 == p_analyze->modrm.modrm.mod )        {
+                       p_analyze->v_disp.i_bytes       = 1;
+                       p_analyze->v_disp.val.val8      = *pb_base++;
+               } else if( 0x02 == p_analyze->modrm.modrm.mod ) {
+                       p_analyze->v_disp.i_bytes       = 4;
+                       p_analyze->v_disp.val.val32
+                               =     (*(pb_now + 3) << 24) 
+                                       + (*(pb_now + 2) << 16)
+                                       + (*(pb_now + 1) <<  8)
+                                       + (*(pb_now + 0)      );
+                       pb_base += 4;
+               } else if(( 0x00 == p_analyze->modrm.modrm.mod )
+                                       && ( 0x05 == p_analyze->modrm.modrm.rm ))       {
+                       /* RIP disp Mode : 64bit Long Mode Only */
+                       p_analyze->v_disp.i_bytes       = 4;
+                       p_analyze->v_disp.val.val32
+                               =     (*(pb_now + 3) << 24) 
+                                       + (*(pb_now + 2) << 16)
+                                       + (*(pb_now + 1) <<  8)
+                                       + (*(pb_now + 0)      );
+                       pb_base += 4;
+
+               } else if(( 0x00 == p_analyze->modrm.modrm.mod )
+                                       && ( 0x04 == p_analyze->modrm.modrm.rm )
+                                       && ( 0x05 == p_analyze->sib.sib.base )) {
+                       p_analyze->v_disp.i_bytes       = 4;
+                       p_analyze->v_disp.val.val32
+                               =     (*(pb_now + 3) << 24) 
+                                       + (*(pb_now + 2) << 16)
+                                       + (*(pb_now + 1) <<  8)
+                                       + (*(pb_now + 0)      );
+                       pb_base += 4;
+               } else {
+                       p_analyze->v_disp.i_bytes       = 0;
+               }
+       }
+
+       return pb_base;
+}
+
+/*----------------------------------------------------------------------
+static Byte *
+       Drd64_Intel64_DisAsm_CarveImmediate(
+               : Carve Immediate Value from Byte String
+
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+                                               : [dest] Drd64 Analyze Packet
+               Byte *pb_base)  : [src] Byte String
+----------------------------------------------------------------------*/
+/* XXX - 64bit Long Mode Only!! --------------------------------------*/
+static Byte *
+       Drd64_Intel64_DisAsm_CarveImmediate(
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Byte *pb_base)
+{
+       Byte    *pb_now;
+       QWord   q_temp;
+
+       pb_now  = pb_base;
+
+       if(( OPTYPE_DATA_METHOD_A == p_analyze->w_desttype )
+                       || ( OPTYPE_DATA_METHOD_I == p_analyze->w_desttype )
+                       || ( OPTYPE_DATA_METHOD_J == p_analyze->w_desttype )
+                       || ( OPTYPE_DATA_METHOD_O == p_analyze->w_desttype ) )  {
+               assert( 0 ==  p_analyze->v_imm.i_bytes );
+               p_analyze->v_imm.i_bytes        = p_analyze->i_destsize;
+       }
+       if(( OPTYPE_DATA_METHOD_A == p_analyze->w_srctype )
+                       || ( OPTYPE_DATA_METHOD_I == p_analyze->w_srctype )
+                       || ( OPTYPE_DATA_METHOD_J == p_analyze->w_srctype )
+                       || ( OPTYPE_DATA_METHOD_O == p_analyze->w_srctype ) )   {
+               assert( 0 ==  p_analyze->v_imm.i_bytes );
+               p_analyze->v_imm.i_bytes        = p_analyze->i_srcsize;
+       }
+       
+       if(( OPTYPE_DATA_METHOD_A == p_analyze->w_optiontype )
+                       || ( OPTYPE_DATA_METHOD_I == p_analyze->w_optiontype )
+                       || ( OPTYPE_DATA_METHOD_J == p_analyze->w_optiontype )
+                       || ( OPTYPE_DATA_METHOD_O == p_analyze->w_optiontype ) )        {
+               assert( 0 ==  p_analyze->v_imm.i_bytes );
+               p_analyze->v_imm.i_bytes        = p_analyze->i_optionsize;
+       }
+
+       if( 1 == p_analyze->v_imm.i_bytes )     {
+               p_analyze->v_imm.val.val8       = *pb_now++;
+       } else if( 2 == p_analyze->v_imm.i_bytes )      {
+               p_analyze->v_imm.val.val16
+                       =     (*(pb_now + 1) << 8) 
+                               + (*(pb_now + 0)     );
+               pb_now  += 2;
+       } else if( 4 == p_analyze->v_imm.i_bytes )      {
+               p_analyze->v_imm.val.val32
+                       =     (*(pb_now + 3) << 24) 
+                               + (*(pb_now + 2) << 16)
+                               + (*(pb_now + 1) <<  8)
+                               + (*(pb_now + 0)      );
+               pb_now  += 4;
+       } else if( 8 == p_analyze->v_imm.i_bytes )      {
+               q_temp  = *(pb_now + 7);
+               q_temp  = (q_temp << 8) + *(pb_now + 6);
+               q_temp  = (q_temp << 8) + *(pb_now + 5);
+               q_temp  = (q_temp << 8) + *(pb_now + 4);
+               q_temp  = (q_temp << 8) + *(pb_now + 3);
+               q_temp  = (q_temp << 8) + *(pb_now + 2);
+               q_temp  = (q_temp << 8) + *(pb_now + 1);
+               q_temp  = (q_temp << 8) + *(pb_now + 0);
+               
+               p_analyze->v_imm.val.val64      = q_temp;
+               pb_now  += 8;
+       }
+
+       return pb_now;
+}
+
+/*----------------------------------------------------------------------
+static int
+       Drd64_Intel64_DisAsm_AnalyzeSIB(
+               : Analyze SIB ( to Asm String )
+
+               char *p_strsib,         : [dest] Asm String
+               Drd64_Intel64_AnalyzePacket *p_analyze, : [src] Analyze Packet
+               int i_maxstr )          : [opt] Dest Max Strings 
+----------------------------------------------------------------------*/
+static int
+       Drd64_Intel64_DisAsm_AnalyzeSIB(
+               char *p_strsib,
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               int i_maxstr )
+{
+       int             i_scale;
+       Word    w_regid;
+       int             i_sizerow;
+       Byte    b_regtype;
+       char    str_sibtemp[MAX_OPERAND];
+       char    str_sibbase[MAX_OPERAND];
+
+       str_sibtemp[0]  = '\0';
+       str_sibbase[0]  = '\0';
+
+       i_sizerow               = 0x03;
+       if( 8 == p_analyze->i_addresssize )                     { i_sizerow     = 0x03; }
+       else if( 4 == p_analyze->i_addresssize )        { i_sizerow     = 0x02; }
+
+       if(( 0x04 != p_analyze->sib.sib.index ) ||
+                       (( 0x04 == p_analyze->sib.sib.index )
+                               && ( 0x01 == p_analyze->rex.rex.x )))   {
+
+               b_regtype       = ((p_analyze->rex.rex.x) << 3) |
+                                                               (p_analyze->sib.sib.index);
+               w_regid = drd64_register_table[i_sizerow][b_regtype];
+               Drd64_Intel64db_GetRegisterString( str_sibtemp, w_regid, i_maxstr );
+
+               if( 0x01 == p_analyze->sib.sib.scale )
+                       { strncat(str_sibtemp, " * 02h", MAX_OPERAND ); }
+               else if( 0x02 == p_analyze->sib.sib.scale )
+                       { strncat(str_sibtemp, " * 04h", MAX_OPERAND ); }
+               else if( 0x03 == p_analyze->sib.sib.scale )
+                       { strncat(str_sibtemp, " * 08h", MAX_OPERAND ); }
+       }
+               
+       if(( 0x05 != p_analyze->sib.sib.base )
+                       || ( 0x00 != p_analyze->modrm.modrm.mod ))      {
+               b_regtype       = ((p_analyze->rex.rex.b) << 3) | (p_analyze->sib.sib.base);
+               w_regid = drd64_register_table[i_sizerow][b_regtype];
+               Drd64_Intel64db_GetRegisterString( str_sibbase, w_regid, i_maxstr );
+
+               if(( 0x04 != p_analyze->sib.sib.index ) ||
+                               (( 0x04 == p_analyze->sib.sib.index )
+                                       && ( 0x01 == p_analyze->rex.rex.x )))   {
+                       strncat( str_sibtemp, " + ", MAX_OPERAND );
+               }
+               strncat( str_sibtemp, str_sibbase, MAX_OPERAND );
+       }
+
+       strncpy( p_strsib, str_sibtemp, i_maxstr );
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+static int
+       Drd64_Intel64_DisAsm_AnalyzeOperand_Memory(
+               : Analyze Memory Operand ( Sub )
+
+               char *p_operandstr,             : [dest] Operand String
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+                                                               : [src] Drd64 Analyze Packet
+               Word w_methodtype,              : MethodType ID
+               Word w_size,                    : Size ID
+               int i_size,                             : Bytes
+               int i_maxstr )                  : Operand Max Strings
+----------------------------------------------------------------------*/
+static int
+       Drd64_Intel64_DisAsm_AnalyzeOperand_Memory(
+               char *p_operandstr,
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Word w_methodtype,
+               Word w_size,
+               int i_size,
+               int i_maxstr )
+{
+       Word    w_regid;
+       int             i_sizerow;
+       int             i_regtbl_type;
+       int             i_err;
+       Byte    b_regtype;
+       char    str_modrm[MAX_OPERAND];
+       char    str_opesize[MAX_OPERAND];
+       char    str_addr[MAX_OPERAND];
+       char    str_segment[MAX_OPERAND];
+       char    str_disp[20];
+
+       memset(str_modrm, 0x00, MAX_OPERAND);   
+       memset(str_opesize, 0x00, MAX_OPERAND); 
+       memset(str_addr, 0x00, MAX_OPERAND);    
+       memset(str_segment, 0x00, MAX_OPERAND); 
+
+       /* Set Address Operand Size String */
+       switch( i_size )        {
+               case  1:                strncpy( str_opesize, "BYTE", MAX_OPERAND ); break;
+               case  2:                strncpy( str_opesize, "WORD", MAX_OPERAND ); break;
+               case  4:                strncpy( str_opesize, "DWORD", MAX_OPERAND ); break;
+               case  8:                strncpy( str_opesize, "QWORD", MAX_OPERAND ); break;
+               case 16:                strncpy( str_opesize, "DQWORD", MAX_OPERAND ); break;
+       };
+
+       i_regtbl_type   = 0x03;
+       if( 4 == p_analyze->i_addresssize )     {
+               i_regtbl_type   = 0x02;
+       }       
+       
+       /* Set Base Address String */
+       if( 0x04 == p_analyze->modrm.modrm.rm ) {
+               i_err = Drd64_Intel64_DisAsm_AnalyzeSIB(
+                                               str_addr, p_analyze, MAX_OPERAND );
+               if( 0x00 != i_err )             { return 0x01; }
+       } else if(( 0x00 == p_analyze->modrm.modrm.mod )
+                       && ( 0x05 == p_analyze->modrm.modrm.rm ))       {
+               strncpy( str_addr, "rIP", MAX_OPERAND );
+       } else  {
+               b_regtype       = ((p_analyze->rex.rex.b) << 3)
+                                               | (p_analyze->modrm.modrm.rm);
+               w_regid = drd64_register_table[i_regtbl_type][b_regtype];
+               Drd64_Intel64db_GetRegisterString( str_addr, w_regid, MAX_OPERAND );
+       }
+
+       /* Set Segment Prefix String */
+       /* 64h : FS */
+       if(( 0x64 == p_analyze->b_prefix[0] )
+                       || ( 0x64 == p_analyze->b_prefix[1] ) 
+                       || ( 0x64 == p_analyze->b_prefix[2] ) 
+                       || ( 0x64 == p_analyze->b_prefix[3] ))
+               { strncpy( str_segment, "FS:", MAX_OPERAND ); }
+       /* 65h : GS */
+       else if(( 0x65 == p_analyze->b_prefix[0] )
+                       || ( 0x65 == p_analyze->b_prefix[1] ) 
+                       || ( 0x65 == p_analyze->b_prefix[2] ) 
+                       || ( 0x65 == p_analyze->b_prefix[3] ))
+               { strncpy( str_segment, "GS:", MAX_OPERAND ); }
+       /* 26h : ES (32Bit Only) */
+       else if(( 0x26 == p_analyze->b_prefix[0] )
+                       || ( 0x26 == p_analyze->b_prefix[1] ) 
+                       || ( 0x26 == p_analyze->b_prefix[2] ) 
+                       || ( 0x26 == p_analyze->b_prefix[3] ))
+               { strncpy( str_segment, "ES:", MAX_OPERAND ); }
+       /* 2eh : CS (32Bit Only) */
+       else if(( 0x2e == p_analyze->b_prefix[0] )
+                       || ( 0x2e == p_analyze->b_prefix[1] ) 
+                       || ( 0x2e == p_analyze->b_prefix[2] ) 
+                       || ( 0x2e == p_analyze->b_prefix[3] ))
+               { strncpy( str_segment, "CS:", MAX_OPERAND ); }
+       /* 36h : SS (32Bit Only) */
+       else if(( 0x36 == p_analyze->b_prefix[0] )
+                       || ( 0x36 == p_analyze->b_prefix[1] ) 
+                       || ( 0x36 == p_analyze->b_prefix[2] ) 
+                       || ( 0x36 == p_analyze->b_prefix[3] ))
+               { strncpy( str_segment, "SS:", MAX_OPERAND ); }
+       /* 3eh : DS (32Bit Only) */
+       else if(( 0x3e == p_analyze->b_prefix[0] )
+                       || ( 0x3e == p_analyze->b_prefix[1] ) 
+                       || ( 0x3e == p_analyze->b_prefix[2] ) 
+                       || ( 0x3e == p_analyze->b_prefix[3] ))
+               { strncpy( str_segment, "DS:", MAX_OPERAND ); }
+
+
+       /* Merge Base Address & Displacement String */
+       strncat( p_operandstr, str_opesize, i_maxstr );
+       strncat( p_operandstr, " [", i_maxstr );
+       if( '\0' != str_segment[0] )    {
+               strncat( p_operandstr, str_segment, i_maxstr );
+       }
+       if( '\0' != str_addr[0] )       {
+               strncat( p_operandstr, str_addr, i_maxstr );
+       }
+       if( 0 < p_analyze->v_disp.i_bytes )     {
+               /* Set Displacement String */
+               Drd64_Intel64_Common_ExtendValueBit(
+                        &(p_analyze->v_disp),p_analyze->i_addresssize, 1);
+               Drd64_Intel64_DisAsm_ConvValue2String(
+                       str_disp, &(p_analyze->v_disp), 20); 
+
+               if( '\0' != str_addr[0] )       {
+                       strncat( p_operandstr, " + ", i_maxstr );
+               }
+               strncat( p_operandstr, str_disp, i_maxstr );
+       }
+       strncat( p_operandstr, "]", i_maxstr );
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+static int
+       Drd64_Intel64_DisAsm_AnalyzeOperand(
+               : Analyze Operand
+
+               char *p_operandstr,             : [dest] Operand String
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+                                                               : [src] Drd64 Analyze Packet
+               Word w_methodtype,              : MethodType ID
+               Word w_size,                    : Size ID
+               int i_size,                             : Bytes
+               int i_maxstr )                  : Operand Max Strings
+----------------------------------------------------------------------*/
+static int
+       Drd64_Intel64_DisAsm_AnalyzeOperand(
+               char *p_operandstr,
+               Drd64_Intel64_AnalyzePacket *p_analyze,
+               Word w_methodtype,
+               Word w_size,
+               int i_size,
+               int i_maxstr )
+{
+       Word    w_regid;
+       int             i_sizerow;
+       Byte    b_regtype;
+       int             i_err;
+
+       i_err = 0x00;
+
+       /* Data (Immediate, Memory) */
+       if( (OPTYPE_BASE_DATA & w_methodtype) == OPTYPE_BASE_DATA )     {
+               if( isBitFlag(w_methodtype,OPTYPE_BASE_DATA_MODRM) )    {
+                       /* C : [ModR/M:reg] Control Reg.  */
+                       if( OPTYPE_DATA_METHOD_C == w_methodtype )      {
+                               b_regtype       = ((p_analyze->rex.rex.r) << 3)
+                                               | (p_analyze->modrm.modrm.reg);
+                               w_regid = drd64_register_table[0x05][b_regtype];
+                               Drd64_Intel64db_GetRegisterString(
+                                       p_operandstr, w_regid, i_maxstr );
+                       }
+                       /* D : [ModR/M:reg] Debug Reg. */
+                       else if( OPTYPE_DATA_METHOD_D == w_methodtype )         {
+                               b_regtype       = ((p_analyze->rex.rex.r) << 3)
+                                               | (p_analyze->modrm.modrm.reg);
+                               w_regid = drd64_register_table[0x06][b_regtype];
+                               Drd64_Intel64db_GetRegisterString(
+                                       p_operandstr, w_regid, i_maxstr );
+                       }
+                       /* G : [ModR/M:reg] General Reg. */
+                       else if( OPTYPE_DATA_METHOD_G == w_methodtype )         {
+                               switch( i_size )        {
+                                       case 1: i_sizerow       = 0x00; break;
+                                       case 2: i_sizerow       = 0x01; break;
+                                       case 4: i_sizerow       = 0x02; break;
+                                       case 8: i_sizerow       = 0x03; break;
+                               }       
+                               b_regtype       = ((p_analyze->rex.rex.r) << 3)
+                                               | (p_analyze->modrm.modrm.reg);
+                               w_regid = drd64_register_table[i_sizerow][b_regtype];
+                               Drd64_Intel64db_GetRegisterString(
+                                       p_operandstr, w_regid, i_maxstr );
+                       }
+                       /* P : [ModR/M:reg] Packed-QuadWord MMX Reg. */
+                       else if( OPTYPE_DATA_METHOD_P == w_methodtype )         {
+                               b_regtype       = ((p_analyze->rex.rex.r) << 3)
+                                               | (p_analyze->modrm.modrm.reg);
+                               w_regid = drd64_register_table[0x07][b_regtype];
+                               Drd64_Intel64db_GetRegisterString(
+                                       p_operandstr, w_regid, i_maxstr );
+                       }
+                       /* S : [ModR/M:reg] Segment Reg. */
+                       else if( OPTYPE_DATA_METHOD_S == w_methodtype )         {
+                               b_regtype       = ((p_analyze->rex.rex.r) << 3)
+                                               | (p_analyze->modrm.modrm.reg);
+                               w_regid = drd64_register_table[0x04][b_regtype];
+                               Drd64_Intel64db_GetRegisterString(
+                                       p_operandstr, w_regid, i_maxstr );
+                       }
+                       /* T : [ModR/M:reg] Test Reg. ( Reserved ) */
+                       /* else if( OPTYPE_DATA_METHOD_T == w_methodtype )              {
+                       } */
+                       /* V : [ModR/M:reg] 128bit XMM Reg. */
+                       else if( OPTYPE_DATA_METHOD_V == w_methodtype )         {
+                               b_regtype       = ((p_analyze->rex.rex.r) << 3)
+                                               | (p_analyze->modrm.modrm.reg);
+                               w_regid = drd64_register_table[0x08][b_regtype];
+                               Drd64_Intel64db_GetRegisterString(
+                                       p_operandstr, w_regid, i_maxstr );
+                       }
+                       /* N : [ModR/M:R/M] Packed-QuadWord MMX Reg. */
+                       else if( OPTYPE_DATA_METHOD_N == w_methodtype )         {
+                               if( 0x03 == p_analyze->modrm.modrm.mod )        {
+                                       b_regtype       = ((p_analyze->rex.rex.b) << 3)
+                                                       | (p_analyze->modrm.modrm.rm);
+                                       w_regid = drd64_register_table[0x07][b_regtype];
+                                       Drd64_Intel64db_GetRegisterString(
+                                               p_operandstr, w_regid, i_maxstr );
+                               }
+                       }
+                       /* R : [ModR/M:R/M] refer to General Reg by R/M Field */
+                       else if( OPTYPE_DATA_METHOD_R == w_methodtype )         {
+                               if( 0x03 == p_analyze->modrm.modrm.mod )        {
+                                       switch( i_size )        {
+                                               case 1: i_sizerow       = 0x00; break;
+                                               case 2: i_sizerow       = 0x01; break;
+                                               case 4: i_sizerow       = 0x02; break;
+                                               case 8: i_sizerow       = 0x03; break;
+                                       }       
+                                       b_regtype       = ((p_analyze->rex.rex.b) << 3)
+                                                       | (p_analyze->modrm.modrm.rm);
+                                       w_regid = drd64_register_table[i_sizerow][b_regtype];
+
+                                       Drd64_Intel64db_GetRegisterString(
+                                               p_operandstr, w_regid, i_maxstr );
+                               }
+                       }
+                       /* U : [ModR/M:R/M] 128bit XMM Reg. */
+                       else if( OPTYPE_DATA_METHOD_U == w_methodtype )         {
+                               if( 0x03 == p_analyze->modrm.modrm.mod )        {
+                                       b_regtype       = ((p_analyze->rex.rex.b) << 3)
+                                                       | (p_analyze->modrm.modrm.rm);
+                                       w_regid = drd64_register_table[0x08][b_regtype];
+                                       Drd64_Intel64db_GetRegisterString(
+                                               p_operandstr, w_regid, i_maxstr );
+                               }
+                       }
+                       /* E : [ModR/M] Memory & Reg. */
+                       else if( OPTYPE_DATA_METHOD_E == w_methodtype )         {
+                               if( 0x03 == p_analyze->modrm.modrm.mod )        {
+                                       switch( i_size )        {
+                                               case 1: i_sizerow       = 0x00; break;
+                                               case 2: i_sizerow       = 0x01; break;
+                                               case 4: i_sizerow       = 0x02; break;
+                                               case 8: i_sizerow       = 0x03; break;
+                                       }       
+                                       b_regtype       = ((p_analyze->rex.rex.b) << 3)
+                                                       | (p_analyze->modrm.modrm.rm);
+                                       w_regid = drd64_register_table[i_sizerow][b_regtype];
+
+                                       Drd64_Intel64db_GetRegisterString(
+                                               p_operandstr, w_regid, i_maxstr );
+                               } else  {
+                                       i_err   = Drd64_Intel64_DisAsm_AnalyzeOperand_Memory( 
+                                               p_operandstr, p_analyze, w_methodtype, w_size,
+                                               i_size, i_maxstr );
+                                       if( 0x00 != i_err )     { return 0x01; }
+                               }
+                       }
+                       /* W : [ModR/M] 128bit XMM Reg. or Memory Address */
+                       else if( OPTYPE_DATA_METHOD_W == w_methodtype )         {
+                               if( 0x03 == p_analyze->modrm.modrm.mod )        {
+                                       b_regtype       = ((p_analyze->rex.rex.b) << 3)
+                                                       | (p_analyze->modrm.modrm.rm);
+                                       w_regid = drd64_register_table[0x08][b_regtype];
+                                       Drd64_Intel64db_GetRegisterString(
+                                               p_operandstr, w_regid, i_maxstr );
+                               } else  {
+                                       i_err   = Drd64_Intel64_DisAsm_AnalyzeOperand_Memory( 
+                                               p_operandstr, p_analyze, w_methodtype, w_size,
+                                               i_size, i_maxstr );
+                                       if( 0x00 != i_err )     { return 0x01; }
+                               }
+                       }
+                       /* Q : [ModR/M] MMX reg. or Memory Address */
+                       else if( OPTYPE_DATA_METHOD_Q == w_methodtype )         {
+                               if( 0x03 == p_analyze->modrm.modrm.mod )        {
+                                       b_regtype       = ((p_analyze->rex.rex.b) << 3)
+                                                       | (p_analyze->modrm.modrm.rm);
+                                       w_regid = drd64_register_table[0x07][b_regtype];
+                                       Drd64_Intel64db_GetRegisterString(
+                                               p_operandstr, w_regid, i_maxstr );
+                               } else  {
+                                       i_err   = Drd64_Intel64_DisAsm_AnalyzeOperand_Memory( 
+                                               p_operandstr, p_analyze, w_methodtype, w_size,
+                                               i_size, i_maxstr );
+                                       if( 0x00 != i_err )     { return 0x01; }
+                               }
+                       }
+                       /* M : Memory Access (by ModR/M) (NO!!: Reg. Indicate by ModR/M) */
+                       else if( OPTYPE_DATA_METHOD_M == w_methodtype )         {
+                               if( 0x03 != p_analyze->modrm.modrm.mod )        {
+                                       i_err   = Drd64_Intel64_DisAsm_AnalyzeOperand_Memory( 
+                                               p_operandstr, p_analyze, w_methodtype, w_size,
+                                               i_size, i_maxstr );
+                                       if( 0x00 != i_err )     { return 0x01; }
+                               }
+                       }
+                       /* Illegal Method */
+                       else    {
+                               return 0x02;
+                       }
+               } else  {
+                       /* A : Direct Address */
+                       if( OPTYPE_DATA_METHOD_A == w_methodtype )      {
+                               Drd64_Intel64_DisAsm_ConvValue2String( p_operandstr,
+                                       &(p_analyze->v_imm), i_maxstr ); 
+                       }
+                       /* I : Immediate Data (NO!!: ModR/M) */
+                       else if( OPTYPE_DATA_METHOD_I == w_methodtype ) {
+                               Drd64_Intel64_DisAsm_ConvValue2String( p_operandstr,
+                                       &(p_analyze->v_imm), i_maxstr ); 
+                       }
+                       /* J : IP relative Address (NO!!: ModR/M) */
+                       else if( OPTYPE_DATA_METHOD_J == w_methodtype ) {
+                               Drd64_Intel64_DisAsm_ConvValue2String( p_operandstr,
+                                       &(p_analyze->v_imm), i_maxstr ); 
+                       }
+                       /* O : Word of DWord Data */
+                       else if( OPTYPE_DATA_METHOD_O == w_methodtype ) {
+                               Drd64_Intel64_DisAsm_ConvValue2String( p_operandstr,
+                                       &(p_analyze->v_imm), i_maxstr ); 
+                       }
+                       /* F : EFLAGS / RFLAGS Reg. (NO!!: ModR/M)  */
+                       /*else if( OPTYPE_DATA_METHOD_F == w_methodtype )       {
+                       }*/
+                       /* X : DS:rSI (Memory Address) */
+                       else if( OPTYPE_DATA_METHOD_X == w_methodtype ) {
+                               strncpy( p_operandstr, "", i_maxstr );
+                       }
+                       /* Y : ES:rDI (Memory Address)*/
+                       else if( OPTYPE_DATA_METHOD_Y == w_methodtype ) {
+                               strncpy( p_operandstr, "", i_maxstr );
+                       }
+                       /* 1 : 0x01 Data (Immediate Data) */
+                       else if( OPTYPE_DATA_METHOD_1 == w_methodtype ) {
+                               strncpy( p_operandstr, "001h", i_maxstr );
+                       }
+                       /* - : Illegal Instruction */
+                       else    {
+                               return 0x01;
+                       }
+               }
+       }
+       /* Register(Direct) */
+       else    {
+               /* ReDefine Register Code */
+               if( isBitFlag(w_methodtype,OPTYPE_BASE_REG_64BIT) )     {
+                       if( 4 == i_size )       {
+                               w_methodtype ^= (OPTYPE_BASE_REG_32BIT|OPTYPE_BASE_REG_64BIT);
+                       } else if( 2 == i_size )        {
+                               w_methodtype ^= (OPTYPE_BASE_REG_16BIT|OPTYPE_BASE_REG_64BIT);
+                       }       
+               } else if( isBitFlag(w_methodtype,OPTYPE_BASE_REG_32BIT) )      {
+                       if( 2 == i_size )       {
+                               w_methodtype ^= (OPTYPE_BASE_REG_16BIT|OPTYPE_BASE_REG_32BIT);
+                       }       
+               }
+               Drd64_Intel64db_GetRegisterString(
+                               p_operandstr, w_methodtype, i_maxstr );
+       }
+       
+       return 0x00;
+} 
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+/*Drd64_Intel64_DisAsm_DisAsmLine(*/
+LIBINTEL64ASM_FUNC     int
+       Drd64_LibIntel64asm_DisAsmLine(
+               char *p_dest,
+               Byte *pb_src,
+               int i_maxdest)
+{
+       Drd64_Intel64_AnalyzePacket             drd64_analyze;
+       Byte    *pb_now;
+       Byte    b_modtype;
+       Byte    b_ret;
+       int             i_err   = 0x00;
+       int             i_length        = 0;
+
+       /* Initialize */
+       pb_now  = pb_src;
+       memset( &drd64_analyze, 0x00, sizeof(Drd64_Intel64_AnalyzePacket) );
+
+       /* Proc. Prefix & REX */
+       pb_now  = Drd64_Intel64_DisAsm_CarvePrefixByte( &drd64_analyze, pb_now );
+
+       /* Proc. Opecodes */
+       pb_now  = Drd64_Intel64_DisAsm_CarveOpecode( &drd64_analyze, pb_now );
+       if( NULL == pb_now )    {
+               /* Data code (Prefix 1Byte) */
+               i_err   = 0xff;
+               goto goto_Drd64_Intel64_DisAsm_DisAsmLine_Output;
+       }
+
+       /* Proc. ModR/M */
+       b_modtype       = drd64_analyze.b_modtype;
+       if(( INTEL64_MODTYPE_NONE !=b_modtype)
+                       && ( INTEL64_MODTYPE_NONE_FPU  != b_modtype ) 
+                       && ( INTEL64_MODTYPE_ESCAPE != b_modtype )
+                       && ( INTEL64_MODTYPE_ERROR != b_modtype ) )     {
+               drd64_analyze.modrm.b_modrm     = *pb_now++;
+               drd64_analyze.i_modrm_bytes     = 1;
+       }
+
+       /* Carve SIB */
+       if(( 0x03 != drd64_analyze.modrm.modrm.mod )
+                       && ( 0x04 == drd64_analyze.modrm.modrm.rm ) )   {
+               drd64_analyze.sib.b_sib = *pb_now++;
+               drd64_analyze.i_sib_bytes       = 1;    
+       }
+                       
+       /* Query Intel64-Instruction DataBase */
+       b_ret = Drd64_Intel64db_GetByteCodeType( &drd64_analyze );
+       if(( INTEL64_CODETYPE_ILLEGAL == b_ret ) ||
+                       ( INTEL64_CODETYPE_NOINSTRUCTION == b_ret ) ||
+                       ( INTEL64_CODETYPE_ERROR == b_ret ) )   {
+               /* Data code (Prefix 1Byte) */
+               i_err   = 0xff;
+               goto goto_Drd64_Intel64_DisAsm_DisAsmLine_Output;
+       }
+
+       Drd64_Intel64_DisAsm_CalcOperandSize( &drd64_analyze );
+       Drd64_Intel64_DisAsm_CalcDefaultAddressSize( &drd64_analyze );
+       drd64_analyze.i_destsize
+                       = Drd64_Intel64_DisAsm_GetSize_SizeID(
+                               drd64_analyze.i_operandsize,
+                               drd64_analyze.w_desttype,
+                               drd64_analyze.w_destsize );
+       drd64_analyze.i_srcsize
+                       = Drd64_Intel64_DisAsm_GetSize_SizeID(
+                               drd64_analyze.i_operandsize,
+                               drd64_analyze.w_srctype,
+                               drd64_analyze.w_srcsize );
+       drd64_analyze.i_optionsize
+                       = Drd64_Intel64_DisAsm_GetSize_SizeID(
+                               drd64_analyze.i_operandsize,
+                               drd64_analyze.w_optiontype,
+                               drd64_analyze.w_optionsize );
+
+       /* Carve Displacement */
+       pb_now  = Drd64_Intel64_DisAsm_CarveDisplacement( &drd64_analyze, pb_now);
+
+       /* Carve Immediate */
+       pb_now  = Drd64_Intel64_DisAsm_CarveImmediate( &drd64_analyze, pb_now );
+
+       /* Analyze Destination Operand */
+       if( OPTYPE_DATA_METHOD_ILLEGAL != drd64_analyze.w_desttype )    {
+               i_err   += Drd64_Intel64_DisAsm_AnalyzeOperand(
+                       drd64_analyze.str_destination, &drd64_analyze,
+                       drd64_analyze.w_desttype, drd64_analyze.w_destsize,
+                       drd64_analyze.i_destsize, MAX_OPERAND );
+       }
+
+       /* Analyze Source Operand */
+       if( OPTYPE_DATA_METHOD_ILLEGAL != drd64_analyze.w_srctype )     {
+               i_err   += Drd64_Intel64_DisAsm_AnalyzeOperand(
+                       drd64_analyze.str_source, &drd64_analyze,
+                       drd64_analyze.w_srctype, drd64_analyze.w_srcsize,
+                       drd64_analyze.i_srcsize, MAX_OPERAND );
+       }
+
+       /* Analyze Option Operand */
+       if( OPTYPE_DATA_METHOD_ILLEGAL != drd64_analyze.w_optiontype )  {
+               i_err   += Drd64_Intel64_DisAsm_AnalyzeOperand(
+                       drd64_analyze.str_option, &drd64_analyze,
+                       drd64_analyze.w_optiontype, drd64_analyze.w_optionsize,
+                       drd64_analyze.i_optionsize, MAX_OPERAND );
+       }
+
+goto_Drd64_Intel64_DisAsm_DisAsmLine_Output:
+       /* Output Assembler Code */
+       if( 0 < i_err ) {
+               snprintf( p_dest, i_maxdest, "DB\t%x", *pb_now );
+               i_length        = pb_now++ - pb_src;
+       } else if( OPTYPE_DATA_METHOD_ILLEGAL != drd64_analyze.w_optiontype )   {
+               snprintf( p_dest, i_maxdest, "%s\t%s,%s,%s",
+                                       drd64_analyze.str_instruction,
+                                       drd64_analyze.str_destination,
+                                       drd64_analyze.str_source,
+                                       drd64_analyze.str_option );
+               i_length        = pb_now - pb_src;
+       } else if( OPTYPE_DATA_METHOD_ILLEGAL != drd64_analyze.w_srctype )      {
+               snprintf( p_dest, i_maxdest, "%s\t%s,%s",
+                                       drd64_analyze.str_instruction,
+                                       drd64_analyze.str_destination,
+                                       drd64_analyze.str_source );
+               i_length        = pb_now - pb_src;
+       } else if( OPTYPE_DATA_METHOD_ILLEGAL != drd64_analyze.w_desttype )     {
+               snprintf( p_dest, i_maxdest, "%s\t%s",
+                                       drd64_analyze.str_instruction,
+                                       drd64_analyze.str_destination );
+               i_length        = pb_now - pb_src;
+       } else if( OPTYPE_DATA_METHOD_ILLEGAL == drd64_analyze.w_desttype )     {
+               snprintf( p_dest, i_maxdest, "%s",
+                                       drd64_analyze.str_instruction );
+               i_length        = pb_now - pb_src;
+       }
+
+       Drd64_Intel64_Debug_PrintAnalyzePacket( &drd64_analyze, "DisAssemble", 2 );
+
+       Drd64_Intel64_Debug_DisAsm_PrintAnswer( p_dest, pb_src, i_length );
+
+       return i_length;
+}
+
+
+
+/* EOF of drd64_intel64_disasm.c ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_disasm.h b/libintel64asm/drd64_intel64_disasm.h
new file mode 100644 (file)
index 0000000..d264b41
--- /dev/null
@@ -0,0 +1,129 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_disasm.h
+Function: Intel64 DisAssembler Main Module Header 
+Comment:  none
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_INTEL64_DISASM
+#define DRD64_HEADER_INTEL64_DISASM
+
+#include"drd64_intel64_dbtype.h"
+#include"drd64_intel64_db.h"
+#include"drd64_intel64_asm.h"
+
+typedef struct {
+       unsigned        rm              : 3;
+       unsigned        reg             : 3;
+       unsigned        mod             : 2;
+} __attribute((packed)) ModRM;
+
+typedef struct {
+       unsigned        base    : 3;
+       unsigned        index   : 3;
+       unsigned        scale   : 2;
+} __attribute((packed)) SIB;
+
+typedef struct {
+       unsigned        b               : 1;
+       unsigned        x               : 1;
+       unsigned        r               : 1;
+       unsigned        w               : 1;
+       unsigned        head    : 4;
+} __attribute((packed)) REX;
+
+
+typedef struct {
+       /* Prefix Data */
+       int             i_prefixes;
+       Byte    b_prefix[4];
+       /* REX Data */
+       union   {
+               REX             rex;
+               Byte    b_rex;
+       } rex;
+       /* Opecode Data */
+       int             i_opcodes;
+       Byte    b_opcode[3];
+       Byte    b_codetype;
+       /* ModR/M Data */       
+       Byte    b_modtype;
+       Byte    b_regtype;
+       Byte    b_rmtype;
+       int             i_modrm_bytes;
+       union   {
+               ModRM   modrm;
+               Byte    b_modrm;
+       } modrm;
+       /* SIB Data */
+       int             i_sib_bytes;
+       union   {
+               SIB             sib;
+               Byte    b_sib;
+       } sib;
+       /* Displacement */
+       Value   v_disp;
+       /* Immediate */
+       Value   v_imm;
+               
+       int             i_num;
+       Byte    b_bits;
+       int             i_operands;
+       /* Instruction */
+       char    str_instruction[MAX_INSTRUCTION];
+       /* Operand Information */
+       int             i_operandsize;
+       int             i_addresssize;
+
+       /* Destination Operand */
+       Word    w_desttype;
+       Word    w_destsize;     
+       int             i_destsize;
+       char    str_destination[MAX_OPERAND];
+       /* Source Operand */
+       Word    w_srctype;
+       Word    w_srcsize;
+       int             i_srcsize;
+       char    str_source[MAX_OPERAND];
+       /* Option Operand */
+       Word    w_optiontype;
+       Word    w_optionsize;
+       int             i_optionsize;
+       char    str_option[MAX_OPERAND];
+       
+       Byte    b_duplicationflag;
+} Drd64_Intel64_AnalyzePacket;
+
+
+#endif /* DRD64_HEADER_INTEL64_DISASM */
+
+/* EOF of drd64_intel64_disasm.h --------------------------------- */
diff --git a/libintel64asm/drd64_intel64_error.c b/libintel64asm/drd64_intel64_error.c
new file mode 100644 (file)
index 0000000..fa9487f
--- /dev/null
@@ -0,0 +1,67 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.c
+Function: 
+Comment: 
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#define DRD64_SRC_INTEL64_ERROR
+#include"drd64_intel64_error.h"
+
+Drd64_Intel64_ErrorUnion       drd64_error;
+
+
+int    
+       Drd64_Intel64_Error_SetErrorStatus(
+               void)
+{
+       return 0x00;
+}
+
+Word
+       Drd64_Intel64_Error_GetErrorStatus(
+               void)
+{
+       return 0x00;
+}
+
+
+char *
+       Drd64_Intel64_Error_GetErrorString(
+               void)
+{
+       return NULL;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_error.h b/libintel64asm/drd64_intel64_error.h
new file mode 100644 (file)
index 0000000..f50123a
--- /dev/null
@@ -0,0 +1,60 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_intel64_error.h
+Function: Intel64 DisAsm/Asm Error Functions Header 
+Comment: none
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_INTEL64_ERROR
+#define DRD64_HEADER_INTEL64_ERROR
+
+#ifndef DRD64_SRC_INTEL64_ERROR
+       #define EXTERN  extern
+#else
+       #define EXTERN
+#endif
+
+typedef struct {
+       unsigned        code            :       8;
+       unsigned        function        :       4;
+       unsigned        type            :       3;
+       unsigned        error           :       1;
+} __attribute((packed)) Drd64_Intel64_Error;
+
+typedef        union   {
+       Word                                    w_error;
+       Drd64_Intel64_Error             drd64_error;
+} Drd64_Intel64_ErrorUnion;
+
+#endif /* DRD64_HEADER_XXX */
+
+/* EOF of drd64_intel64_error.h ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64_function.c b/libintel64asm/drd64_intel64_function.c
new file mode 100644 (file)
index 0000000..baaf5ed
--- /dev/null
@@ -0,0 +1,84 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.c
+Function: 
+Comment: 
+----------------------------------------------------------------------*/
+
+#include"drd64_intel64.h"
+#define DRD64_SRC_LIBINTEL64ASM_FUNC
+#include"../include/libintel64asm.h"
+
+
+LIBINTEL64ASM_FUNC     int
+       Drd64_LibIntel64asm_Initialize(
+               void )
+{
+       int             i_err;
+
+       i_err   = Drd64_Intel64_DB_Initialize();
+
+       i_err   = Drd64_Intel64_InitAssembleSystem();
+       if( 0x00 != i_err )             {
+               Drd64_Intel64_DB_Terminate();
+       }
+       
+       return i_err;
+}
+
+
+int
+       Drd64_LibIntel64asm_Terminate(
+               void )
+{
+       Drd64_Intel64_TermAssembleSystem();
+       Drd64_Intel64_DB_Terminate();
+
+       return 0x00;
+}
+
+
+/*
+int
+       Drd64_LibIntel64asm_SetDebugLevel(
+               int i_debug_level )
+       => drd64_intel64_debug.c 
+*/
+
+/*
+int
+       Drd64_LibIntel64asm_GetDebugLevel(
+               void )
+       => drd64_intel64_debug.c 
+*/
+
+/* EOF of drd64_.c ----------------------------------- */
diff --git a/libintel64asm/drd64_intel64db.bin b/libintel64asm/drd64_intel64db.bin
new file mode 100644 (file)
index 0000000..9aa301c
Binary files /dev/null and b/libintel64asm/drd64_intel64db.bin differ
diff --git a/libintel64asm/intel64asm.c b/libintel64asm/intel64asm.c
new file mode 100644 (file)
index 0000000..d12541f
--- /dev/null
@@ -0,0 +1,181 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+            Copyright(C) Koinec 2007-2008. All Rights Reserved.  
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.c
+Function: 
+Comment: 
+----------------------------------------------------------------------*/
+
+#include<stdio.h>
+#include<string.h>
+#include"../include/drd64_types.h"
+#include"../include/libintel64asm.h"
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+       copyright(
+               void )
+{
+       puts("INTEL64 Line Assembler/DisAssemble Version 1.00");
+       puts("(Dr.Deamon64 SubProject -- LibIntel64asm Test Program)");
+       puts("Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.");
+       puts("");
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+       usage(
+               void )
+{
+       puts(" Usage: intel64asm [option] command data");
+       puts("   command List :");
+       puts("     -a : Assemble File    ex.>  intel64asm -a example.asm");
+       puts("     -l : Assemble Line    ex.>  intel64asm -l mov rax, dword [ rsi + 0005h] ");
+       puts("     -d : DisAssemble File ex.>  intel64asm -d example.bin");
+       /*puts("     -r : DisAssemble Line ex.>  intel64asm -r 412a1200h");*/
+       puts("     -v : [OPTION] Vervose Mode (Put All Debug Message)");
+       puts("              ex. intel64asm -v -a example.asm");
+       puts("   CAUTION!! : This Assembler isn't until support ELF Binary Format!");
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+    asm_file(
+        char *filename )
+{
+    char    str_buf[200];
+    Byte    b_dest[200];
+    FILE    *fp;
+
+    if( NULL == (fp = fopen( filename, "r" )))
+               { return 0x01;  }
+
+
+    while( NULL != fgets( str_buf, 200, fp ))   {
+        Drd64_LibIntel64asm_AsmLine( b_dest, str_buf, sizeof(b_dest));
+    }
+
+    fclose(fp);
+
+    return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+    disasm_file(
+               char *filename )
+{
+    char    ans[300];
+    int     i_length;
+    FILE    *fp;
+    fpos_t  fsize;
+    Byte    *pb_data;
+    Byte    *pb_now;
+    int     i_size;
+
+    if(NULL == (fp = fopen( filename, "rb" )))
+               { return 0x01; }
+
+    fseek(fp, 0, SEEK_END);
+    fgetpos(fp, &fsize);
+    fseek(fp, 0, SEEK_SET);
+
+    pb_data = (Byte *)malloc(fsize);
+       if( NULL == pb_data )   
+               { return 0x02; }
+
+    fread(pb_data, fsize, 1, fp);
+
+    fclose(fp);
+
+    i_size  = fsize;
+    pb_now  = pb_data;
+
+    do  {
+        i_length    = Drd64_LibIntel64asm_DisAsmLine(ans, pb_now, sizeof(ans));
+        pb_now  += i_length;
+
+    }while( pb_now < (pb_data+i_size) );
+
+       free( pb_data );
+
+    return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+       main(
+               int argc,
+               char *argv[] )
+{
+       int             i_debug_level;
+       int             i_pos;
+       int             i_cnt;
+       char    str_option[256];
+       unsigned char   b_dest[256];
+
+       i_debug_level   = 1;
+       str_option[0]   = '\0';
+
+       copyright();
+
+       if( 3 > argc )  {
+               usage();
+               return 0x00;
+       }
+
+       i_pos   = 1;
+       /* Analyze Option Line */
+       if( !strcmp( argv[i_pos], "-v" ))               {
+               i_debug_level   = 4;
+               i_pos++;
+       }
+
+       Drd64_LibIntel64asm_Initialize();
+       Drd64_LibIntel64asm_SetDebugLevel( i_debug_level );
+
+       /* Analyze Command Line */
+       if( !strcmp( argv[i_pos], "-a" ))               {
+               asm_file( argv[i_pos+1]);
+       }
+       else if( !strcmp( argv[i_pos], "-l" ))          {
+               for( i_cnt = i_pos+1; i_cnt < argc; i_cnt++ )   {
+                       strncat( str_option, argv[i_cnt], sizeof( str_option ));
+                       strncat( str_option, " ", sizeof( str_option ));
+               }
+        Drd64_LibIntel64asm_AsmLine( b_dest, str_option, sizeof(b_dest));
+       }
+       else if( !strcmp( argv[i_pos], "-d" ))          {
+       disasm_file( argv[i_pos+1] );
+       }
+       else if( !strcmp( argv[i_pos], "-r" ))          {
+
+       }
+
+       Drd64_LibIntel64asm_Terminate();
+       
+       return 0x00;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */
diff --git a/libintel64asm/test.asm b/libintel64asm/test.asm
new file mode 100644 (file)
index 0000000..d2511b9
--- /dev/null
@@ -0,0 +1,59 @@
+BITS 64
+
+       mov             rax, 01h
+       mov             cr0, rax
+       mov             dr0, r8
+       pushf
+       push    12h
+       push    12345678h
+       mov             rax, 1234567887654321h
+       push    rax
+       cmp             rax,rbx
+       jb              02h
+       sldt    [rbx+02h]       
+       psrlq   mm0, 03h
+       movq    mm1,mm0
+       movd    mm0,[rcx+04h]
+       mov             ds, [rdi+06h]
+       psllw   xmm0, 07h
+       movsd   xmm7, xmm0
+       movsd   xmm0, [rdx+12h]
+       cmps    
+       cmpsw
+       cmpsb
+       orps    xmm1,xmm2
+       movss   xmm2,xmm1
+       mov             rax, [rbx*2+rcx+12345678h]
+       mov             qword [rip+12h], 12h
+       adc             rax,[edx*4+edi]
+       inc             rbp     
+       xchg    rbx,rsi
+       xchg    rax,rsi
+       nop
+       ifence
+       addsd   xmm9,xmm2
+       faddp   st1,st0
+       fld             dword [rbx*4+rdx+17]
+               
+       mov             cr2, rsi
+       mov             dr3, r11
+       sldt    [ebx*8+esp+02h] 
+       movd    mm0,[ecx+04h]
+       movsd   xmm0, [edx+ebx+12h]
+       lss             eax, [12345678h]
+       mov             eax, [ebx*4+ecx+12345678h]
+       inc             ebp     
+       xchg    ebx,esi
+       xchg    eax,esi
+       fld             dword [ebx*4+edx+17]
+
+       mov             r15, qword [r12 * 4 + rbx + 11]
+       jb              04h
+       faddp   st1,st0
+       xchg    eax,esi
+       int3
+
+       mov             rax, qword [r12]
+       mov             rax, [fs:r12]
+       mov             rax, [fs:12345678h]
+       mov             rax, [fs:rdx*4+rcx+55h]
diff --git a/libintel64asm/x8664db.csv b/libintel64asm/x8664db.csv
new file mode 100644 (file)
index 0000000..0012507
--- /dev/null
@@ -0,0 +1,1434 @@
+# Dr.Deamon64 for INTEL64 OpeCode Data Version 2.03,,,,,,,,,,,,,,,,,,,,,,,
+# No,Prefix,REX,Opcodes,Op1,Op2,OP3,Mod,reg,RM,FPU,Bit,Nimonic,Option,Operands,DestType,DestSize,SrcType,SrcSize,OptionType,OptionSize,Dup,AsmPriority,Flag
+# Fmt,x,x,n,x,x,x,n,n,n,x,n,str,n,n,str,str,str,str,str,str,c,n,str
+1,0,0,1,0,0,0,5,8,8,0,86,ADD,0,2,E,b,G,b,-,-,-,64,-
+2,0,0,1,1,0,0,5,8,8,0,86,ADD,0,2,E,v,G,v,-,-,-,64,-
+3,0,0,1,2,0,0,5,8,8,0,86,ADD,0,2,G,b,E,b,-,-,-,64,-
+4,0,0,1,3,0,0,5,8,8,0,86,ADD,0,2,G,v,E,v,-,-,-,64,-
+5,0,0,1,4,0,0,4,8,8,0,86,ADD,0,2,al,b,I,b,-,-,-,128,-
+6,0,0,1,5,0,0,4,8,8,0,86,ADD,0,2,rax,-,I,z,-,-,-,96,-
+7,0,0,1,6,0,0,4,8,8,0,32,PUSH,0,1,es,-,-,-,-,-,-,128,-
+8,0,0,1,7,0,0,4,8,8,0,32,POP,0,1,es,-,-,-,-,-,-,64,-
+9,0,0,1,8,0,0,5,8,8,0,86,OR,0,2,E,b,G,b,-,-,-,96,-
+10,0,0,1,9,0,0,5,8,8,0,86,OR,0,2,E,v,G,v,-,-,-,64,-
+11,0,0,1,0a,0,0,5,8,8,0,86,OR,0,2,G,b,E,b,-,-,-,96,-
+12,0,0,1,0b,0,0,5,8,8,0,86,OR,0,2,G,v,E,v,-,-,-,64,-
+13,0,0,1,0c,0,0,4,8,8,0,86,OR,0,2,al,b,I,b,-,-,-,128,-
+14,0,0,1,0d,0,0,4,8,8,0,86,OR,0,2,rax,-,I,z,-,-,-,120,-
+15,0,0,1,0e,0,0,4,8,8,0,32,PUSH,0,1,cs,-,-,-,-,-,-,128,-
+16,0,0,1,0f,0,0,10,8,8,0,86,**Escape**,2,0,-,-,-,-,-,-,-,64,-
+17,0,0,1,10,0,0,5,8,8,0,86,ADC,0,2,E,b,G,b,-,-,-,64,-
+18,0,0,1,11,0,0,5,8,8,0,86,ADC,0,2,E,v,G,v,-,-,-,64,-
+19,0,0,1,12,0,0,5,8,8,0,86,ADC,0,2,G,b,E,b,-,-,-,64,-
+20,0,0,1,13,0,0,5,8,8,0,86,ADC,0,2,G,v,E,v,-,-,-,64,-
+21,0,0,1,14,0,0,4,8,8,0,86,ADC,0,2,al,b,I,b,-,-,-,128,-
+22,0,0,1,15,0,0,4,8,8,0,86,ADC,0,2,rax,-,I,z,-,-,-,96,-
+23,0,0,1,16,0,0,4,8,8,0,32,PUSH,0,1,ss,-,-,-,-,-,-,128,-
+24,0,0,1,17,0,0,4,8,8,0,32,POP,0,1,ss,-,-,-,-,-,-,64,-
+25,0,0,1,18,0,0,5,8,8,0,86,SBB,0,2,E,b,G,b,-,-,-,64,-
+26,0,0,1,19,0,0,5,8,8,0,86,SBB,0,2,E,v,G,v,-,-,-,64,-
+27,0,0,1,1a,0,0,5,8,8,0,86,SBB,0,2,G,b,E,b,-,-,-,64,-
+28,0,0,1,1b,0,0,5,8,8,0,86,SBB,0,2,G,v,E,v,-,-,-,64,-
+29,0,0,1,1c,0,0,4,8,8,0,86,SBB,0,2,al,b,I,b,-,-,-,96,-
+30,0,0,1,1d,0,0,4,8,8,0,86,SBB,0,2,rax,-,I,z,-,-,-,72,-
+31,0,0,1,1e,0,0,4,8,8,0,32,PUSH,0,1,ds,-,-,-,-,-,-,128,-
+32,0,0,1,1f,0,0,4,8,8,0,32,POP,0,1,ds,-,-,-,-,-,-,64,-
+33,0,0,1,20,0,0,5,8,8,0,86,AND,0,2,E,b,G,b,-,-,-,64,-
+34,0,0,1,21,0,0,5,8,8,0,86,AND,0,2,E,v,G,v,-,-,-,64,-
+35,0,0,1,22,0,0,5,8,8,0,86,AND,0,2,G,b,E,b,-,-,-,64,-
+36,0,0,1,23,0,0,5,8,8,0,86,AND,0,2,G,v,E,v,-,-,-,64,-
+37,0,0,1,24,0,0,4,8,8,0,86,AND,0,2,al,b,I,b,-,-,-,128,-
+38,0,0,1,25,0,0,4,8,8,0,86,AND,0,2,rax,-,I,z,-,-,-,96,-
+39,0,0,1,26,0,0,10,8,8,0,86,**SEG=ES**,3,0,-,-,-,-,-,-,-,64,-
+40,0,0,1,27,0,0,4,8,8,0,32,DAA,0,0,-,-,-,-,-,-,-,64,-
+41,0,0,1,28,0,0,5,8,8,0,86,SUB,0,2,E,b,G,b,-,-,-,64,-
+42,0,0,1,29,0,0,5,8,8,0,86,SUB,0,2,E,v,G,v,-,-,-,64,-
+43,0,0,1,2a,0,0,5,8,8,0,86,SUB,0,2,G,b,E,b,-,-,-,64,-
+44,0,0,1,2b,0,0,5,8,8,0,86,SUB,0,2,G,v,E,v,-,-,-,64,-
+45,0,0,1,2c,0,0,4,8,8,0,86,SUB,0,2,al,b,I,b,-,-,-,96,-
+46,0,0,1,2d,0,0,4,8,8,0,86,SUB,0,2,rax,-,I,z,-,-,-,72,-
+47,0,0,1,2e,0,0,10,8,8,0,86,**SEG=CS**,3,0,-,-,-,-,-,-,-,64,-
+48,0,0,1,2f,0,0,4,8,8,0,32,DAS,0,0,-,-,-,-,-,-,-,64,-
+49,0,0,1,30,0,0,5,8,8,0,86,XOR,0,2,E,b,G,b,-,-,-,64,-
+50,0,0,1,31,0,0,5,8,8,0,86,XOR,0,2,E,v,G,v,-,-,-,64,-
+51,0,0,1,32,0,0,5,8,8,0,86,XOR,0,2,G,b,E,b,-,-,-,64,-
+52,0,0,1,33,0,0,5,8,8,0,86,XOR,0,2,G,v,E,v,-,-,-,64,-
+53,0,0,1,34,0,0,4,8,8,0,86,XOR,0,2,al,b,I,b,-,-,-,128,-
+54,0,0,1,35,0,0,4,8,8,0,86,XOR,0,2,rax,-,I,z,-,-,-,96,-
+55,0,0,1,36,0,0,10,8,8,0,86,**SEG=SS**,3,0,-,-,-,-,-,-,-,64,-
+56,0,0,1,37,0,0,4,8,8,0,32,AAA,0,0,-,-,-,-,-,-,-,64,-
+57,0,0,1,38,0,0,5,8,8,0,86,CMP,0,2,E,b,G,b,-,-,-,64,-
+58,0,0,1,39,0,0,5,8,8,0,86,CMP,0,2,E,v,G,v,-,-,-,64,-
+59,0,0,1,3a,0,0,5,8,8,0,86,CMP,0,2,G,b,E,b,-,-,-,64,-
+60,0,0,1,3b,0,0,5,8,8,0,86,CMP,0,2,G,v,E,v,-,-,-,64,-
+61,0,0,1,3c,0,0,4,8,8,0,86,CMP,0,2,al,b,I,b,-,-,-,96,-
+62,0,0,1,3d,0,0,4,8,8,0,86,CMP,0,2,rax,-,I,z,-,-,-,72,-
+63,0,0,1,3e,0,0,10,8,8,0,86,**SEG=DS**,3,0,-,-,-,-,-,-,-,64,-
+64,0,0,1,3f,0,0,4,8,8,0,32,AAS,0,0,-,-,-,-,-,-,-,64,-
+65,0,0,1,40,0,0,4,8,8,0,32,INC,0,1,eax,-,-,-,-,-,-,128,-
+66,0,0,1,40,0,0,10,8,8,0,64,**REX=REX**,4,0,-,-,-,-,-,-,-,64,-
+67,0,0,1,41,0,0,4,8,8,0,32,INC,0,1,ecx,-,-,-,-,-,-,128,-
+68,0,0,1,41,0,0,10,8,8,0,64,**REX=REX.B**,4,0,-,-,-,-,-,-,-,64,-
+69,0,0,1,42,0,0,4,8,8,0,32,INC,0,1,edx,-,-,-,-,-,-,128,-
+70,0,0,1,42,0,0,10,8,8,0,64,**REX=REX.X**,4,0,-,-,-,-,-,-,-,64,-
+71,0,0,1,43,0,0,4,8,8,0,32,INC,0,1,ebx,-,-,-,-,-,-,128,-
+72,0,0,1,43,0,0,10,8,8,0,64,**REX=REX.XB**,4,0,-,-,-,-,-,-,-,64,-
+73,0,0,1,44,0,0,4,8,8,0,32,INC,0,1,esp,-,-,-,-,-,-,128,-
+74,0,0,1,44,0,0,10,8,8,0,64,**REX=REX.R**,4,0,-,-,-,-,-,-,-,64,-
+75,0,0,1,45,0,0,4,8,8,0,32,INC,0,1,ebp,-,-,-,-,-,-,128,-
+76,0,0,1,45,0,0,10,8,8,0,64,**REX=REX.RB**,4,0,-,-,-,-,-,-,-,64,-
+77,0,0,1,46,0,0,4,8,8,0,32,INC,0,1,esi,-,-,-,-,-,-,128,-
+78,0,0,1,46,0,0,10,8,8,0,64,**REX=REX.RX**,4,0,-,-,-,-,-,-,-,64,-
+79,0,0,1,47,0,0,4,8,8,0,32,INC,0,1,edi,-,-,-,-,-,-,128,-
+80,0,0,1,47,0,0,10,8,8,0,64,**REX=REX.RXB**,4,0,-,-,-,-,-,-,-,64,-
+81,0,0,1,48,0,0,4,8,8,0,32,DEC,0,1,eax,-,-,-,-,-,-,128,-
+82,0,0,1,48,0,0,10,8,8,0,64,**REX=REX.W**,4,0,-,-,-,-,-,-,-,64,-
+83,0,0,1,49,0,0,4,8,8,0,32,DEC,0,1,ecx,-,-,-,-,-,-,128,-
+84,0,0,1,49,0,0,10,8,8,0,64,**REX=REX.WB**,4,0,-,-,-,-,-,-,-,64,-
+85,0,0,1,4a,0,0,4,8,8,0,32,DEC,0,1,edx,-,-,-,-,-,-,128,-
+86,0,0,1,4a,0,0,10,8,8,0,64,**REX=REX.WX**,4,0,-,-,-,-,-,-,-,64,-
+87,0,0,1,4b,0,0,4,8,8,0,32,DEC,0,1,ebx,-,-,-,-,-,-,128,-
+88,0,0,1,4b,0,0,10,8,8,0,64,**REX=REX.WXB**,4,0,-,-,-,-,-,-,-,64,-
+89,0,0,1,4c,0,0,4,8,8,0,32,DEC,0,1,esp,-,-,-,-,-,-,128,-
+90,0,0,1,4c,0,0,10,8,8,0,64,**REX=REX.WR**,4,0,-,-,-,-,-,-,-,64,-
+91,0,0,1,4d,0,0,4,8,8,0,32,DEC,0,1,ebp,-,-,-,-,-,-,128,-
+92,0,0,1,4d,0,0,10,8,8,0,64,**REX=REX.WRB**,4,0,-,-,-,-,-,-,-,64,-
+93,0,0,1,4e,0,0,4,8,8,0,32,DEC,0,1,esi,-,-,-,-,-,-,128,-
+94,0,0,1,4e,0,0,10,8,8,0,64,**REX=REX.WRX**,4,0,-,-,-,-,-,-,-,64,-
+95,0,0,1,4f,0,0,4,8,8,0,32,DEC,0,1,edi,-,-,-,-,-,-,128,-
+96,0,0,1,4f,0,0,10,8,8,0,64,**REX=REX.WRXB**,4,0,-,-,-,-,-,-,-,64,-
+97,0,0,1,50,0,0,4,8,8,0,86,PUSH,0,1,rax,q,-,-,-,-,-,128,d64
+98,0,41,1,50,0,0,4,8,8,0,64,PUSH,0,1,r8,q,-,-,-,-,-,128,d64
+99,0,0,1,51,0,0,4,8,8,0,86,PUSH,0,1,rcx,q,-,-,-,-,-,128,d64
+100,0,41,1,51,0,0,4,8,8,0,64,PUSH,0,1,r9,q,-,-,-,-,-,128,d64
+101,0,0,1,52,0,0,4,8,8,0,86,PUSH,0,1,rdx,q,-,-,-,-,-,128,d64
+102,0,41,1,52,0,0,4,8,8,0,64,PUSH,0,1,r10,q,-,-,-,-,-,128,d64
+103,0,0,1,53,0,0,4,8,8,0,86,PUSH,0,1,rbx,q,-,-,-,-,-,128,d64
+104,0,41,1,53,0,0,4,8,8,0,64,PUSH,0,1,r11,q,-,-,-,-,-,128,d64
+105,0,0,1,54,0,0,4,8,8,0,86,PUSH,0,1,rsp,q,-,-,-,-,-,128,d64
+106,0,41,1,54,0,0,4,8,8,0,64,PUSH,0,1,r12,q,-,-,-,-,-,128,d64
+107,0,0,1,55,0,0,4,8,8,0,86,PUSH,0,1,rbp,q,-,-,-,-,-,128,d64
+108,0,41,1,55,0,0,4,8,8,0,64,PUSH,0,1,r13,q,-,-,-,-,-,128,d64
+109,0,0,1,56,0,0,4,8,8,0,86,PUSH,0,1,rsi,q,-,-,-,-,-,128,d64
+110,0,41,1,56,0,0,4,8,8,0,64,PUSH,0,1,r14,q,-,-,-,-,-,128,d64
+111,0,0,1,57,0,0,4,8,8,0,86,PUSH,0,1,rdi,q,-,-,-,-,-,128,d64
+112,0,41,1,57,0,0,4,8,8,0,64,PUSH,0,1,r15,q,-,-,-,-,-,128,d64
+113,0,0,1,58,0,0,4,8,8,0,86,POP,0,1,rax,q,-,-,-,-,-,128,d64
+114,0,41,1,58,0,0,4,8,8,0,64,POP,0,1,r8,q,-,-,-,-,-,128,d64
+115,0,0,1,59,0,0,4,8,8,0,86,POP,0,1,rcx,q,-,-,-,-,-,128,d64
+116,0,41,1,59,0,0,4,8,8,0,64,POP,0,1,r9,q,-,-,-,-,-,128,d64
+117,0,0,1,5a,0,0,4,8,8,0,86,POP,0,1,rdx,q,-,-,-,-,-,128,d64
+118,0,41,1,5a,0,0,4,8,8,0,64,POP,0,1,r10,q,-,-,-,-,-,128,d64
+119,0,0,1,5b,0,0,4,8,8,0,86,POP,0,1,rbx,q,-,-,-,-,-,128,d64
+120,0,41,1,5b,0,0,4,8,8,0,64,POP,0,1,r11,q,-,-,-,-,-,128,d64
+121,0,0,1,5c,0,0,4,8,8,0,86,POP,0,1,rsp,q,-,-,-,-,-,128,d64
+122,0,41,1,5c,0,0,4,8,8,0,64,POP,0,1,r12,q,-,-,-,-,-,128,d64
+123,0,0,1,5d,0,0,4,8,8,0,86,POP,0,1,rbp,q,-,-,-,-,-,128,d64
+124,0,41,1,5d,0,0,4,8,8,0,64,POP,0,1,r13,q,-,-,-,-,-,128,d64
+125,0,0,1,5e,0,0,4,8,8,0,86,POP,0,1,rsi,q,-,-,-,-,-,128,d64
+126,0,41,1,5e,0,0,4,8,8,0,64,POP,0,1,r14,q,-,-,-,-,-,128,d64
+127,0,0,1,5f,0,0,4,8,8,0,86,POP,0,1,rdi,q,-,-,-,-,-,128,d64
+128,0,41,1,5f,0,0,4,8,8,0,64,POP,0,1,r15,q,-,-,-,-,-,128,d64
+129,0,0,1,60,0,0,4,8,8,0,32,PUSHA,0,0,-,-,-,-,-,-,-,64,-
+130,0,0,1,60,0,0,4,8,8,0,32,PUSHAD,0,0,-,-,-,-,-,-,*,64,-
+131,0,0,1,61,0,0,4,8,8,0,32,POPA,0,0,-,-,-,-,-,-,-,64,-
+132,0,0,1,61,0,0,4,8,8,0,32,POPAD,0,0,-,-,-,-,-,-,*,64,-
+133,0,0,1,62,0,0,5,8,8,0,32,BOUND,0,2,G,v,M,a,-,-,-,64,-
+134,0,0,1,63,0,0,5,8,8,0,32,ARPL,0,2,E,w,G,w,-,-,-,64,-
+135,0,0,1,63,0,0,5,8,8,0,64,MOVSXD,0,2,G,v,E,v,-,-,-,64,-
+136,0,0,1,64,0,0,10,8,8,0,86,**SEG=FS**,3,0,-,-,-,-,-,-,-,64,-
+137,0,0,1,65,0,0,10,8,8,0,86,**SEG=GS**,3,0,-,-,-,-,-,-,-,64,-
+138,0,0,1,66,0,0,10,8,8,0,86,**Operand**,1,0,-,-,-,-,-,-,-,64,-
+139,0,0,1,67,0,0,10,8,8,0,86,**Address**,1,0,-,-,-,-,-,-,-,64,-
+140,0,0,1,68,0,0,4,8,8,0,86,PUSH,0,1,I,z,-,-,-,-,-,64,d64
+141,0,0,1,69,0,0,5,8,8,0,86,IMUL,0,3,G,v,E,v,I,z,-,64,-
+142,0,0,1,6a,0,0,4,8,8,0,86,PUSH,0,1,I,b,-,-,-,-,-,96,d64
+143,0,0,1,6b,0,0,5,8,8,0,86,IMUL,0,3,G,v,E,v,I,b,-,64,-
+144,0,0,1,6c,0,0,4,8,8,0,86,INS,0,0,Y,b,dx,w,-,-,-,64,-
+145,0,0,1,6c,0,0,4,8,8,0,86,INSB,0,0,Y,b,dx,w,-,-,*,64,-
+146,0,0,1,6d,0,0,4,8,8,0,86,INS,0,0,Y,z,dx,w,-,-,-,64,-
+147,0,0,1,6d,0,0,4,8,8,0,86,INSW,0,0,Y,z,dx,w,-,-,*,64,-
+148,0,0,1,6d,0,0,4,8,8,0,86,INSD,0,0,Y,z,dx,w,-,-,*,64,-
+149,0,0,1,6e,0,0,4,8,8,0,86,OUTS,0,0,dx,w,X,b,-,-,-,64,-
+150,0,0,1,6e,0,0,4,8,8,0,86,OUTSB,0,0,dx,w,X,b,-,-,*,64,-
+151,0,0,1,6f,0,0,4,8,8,0,86,OUTS,0,0,dx,w,X,z,-,-,-,64,-
+152,0,0,1,6f,0,0,4,8,8,0,86,OUTSW,0,0,dx,w,X,z,-,-,*,64,-
+153,0,0,1,6f,0,0,4,8,8,0,86,OUTSD,0,0,dx,w,X,z,-,-,*,64,-
+154,0,0,1,70,0,0,4,8,8,0,86,JO,0,1,J,b,-,-,-,-,-,96,f64
+155,0,0,1,71,0,0,4,8,8,0,86,JNO,0,1,J,b,-,-,-,-,-,96,f64
+156,0,0,1,72,0,0,4,8,8,0,86,JB,0,1,J,b,-,-,-,-,-,96,f64
+157,0,0,1,72,0,0,4,8,8,0,86,JNAE,0,1,J,b,-,-,-,-,*,96,f64
+158,0,0,1,72,0,0,4,8,8,0,86,JC,0,1,J,b,-,-,-,-,*,96,f64
+159,0,0,1,73,0,0,4,8,8,0,86,JNB,0,1,J,b,-,-,-,-,-,96,f64
+160,0,0,1,73,0,0,4,8,8,0,86,JAE,0,1,J,b,-,-,-,-,*,96,f64
+161,0,0,1,73,0,0,4,8,8,0,86,JNC,0,1,J,b,-,-,-,-,*,96,f64
+162,0,0,1,74,0,0,4,8,8,0,86,JZ,0,1,J,b,-,-,-,-,-,96,f64
+163,0,0,1,74,0,0,4,8,8,0,86,JE,0,1,J,b,-,-,-,-,*,96,f64
+164,0,0,1,75,0,0,4,8,8,0,86,JNZ,0,1,J,b,-,-,-,-,-,96,f64
+165,0,0,1,75,0,0,4,8,8,0,86,JNE,0,1,J,b,-,-,-,-,*,96,f64
+166,0,0,1,76,0,0,4,8,8,0,86,JBE,0,1,J,b,-,-,-,-,-,96,f64
+167,0,0,1,76,0,0,4,8,8,0,86,JNA,0,1,J,b,-,-,-,-,*,96,f64
+168,0,0,1,77,0,0,4,8,8,0,86,JNBE,0,1,J,b,-,-,-,-,-,96,f64
+169,0,0,1,77,0,0,4,8,8,0,86,JA,0,1,J,b,-,-,-,-,*,96,f64
+170,0,0,1,78,0,0,4,8,8,0,86,JS,0,1,J,b,-,-,-,-,-,96,f64
+171,0,0,1,79,0,0,4,8,8,0,86,JNS,0,1,J,b,-,-,-,-,-,96,f64
+172,0,0,1,7a,0,0,4,8,8,0,86,JP,0,1,J,b,-,-,-,-,-,96,f64
+173,0,0,1,7a,0,0,4,8,8,0,86,JPE,0,1,J,b,-,-,-,-,*,96,f64
+174,0,0,1,7b,0,0,4,8,8,0,86,JNP,0,1,J,b,-,-,-,-,-,96,f64
+175,0,0,1,7b,0,0,4,8,8,0,86,JPO,0,1,J,b,-,-,-,-,*,96,f64
+176,0,0,1,7c,0,0,4,8,8,0,86,JL,0,1,J,b,-,-,-,-,-,96,f64
+177,0,0,1,7c,0,0,4,8,8,0,86,JNGE,0,1,J,b,-,-,-,-,*,96,f64
+178,0,0,1,7d,0,0,4,8,8,0,86,JNL,0,1,J,b,-,-,-,-,-,96,f64
+179,0,0,1,7d,0,0,4,8,8,0,86,JGE,0,1,J,b,-,-,-,-,*,96,f64
+180,0,0,1,7e,0,0,4,8,8,0,86,JLE,0,1,J,b,-,-,-,-,-,96,f64
+181,0,0,1,7e,0,0,4,8,8,0,86,JNG,0,1,J,b,-,-,-,-,*,96,f64
+182,0,0,1,7f,0,0,4,8,8,0,86,JNLE,0,1,J,b,-,-,-,-,-,96,f64
+183,0,0,1,7f,0,0,4,8,8,0,86,JG,0,1,J,b,-,-,-,-,*,96,f64
+184,0,0,1,80,0,0,6,0,8,0,86,ADD,0,2,E,b,I,b,-,-,-,72,-
+185,0,0,1,80,0,0,6,1,8,0,86,OR,0,2,E,b,I,b,-,-,-,96,-
+186,0,0,1,80,0,0,6,2,8,0,86,ADC,0,2,E,b,I,b,-,-,-,72,-
+187,0,0,1,80,0,0,6,3,8,0,86,SBB,0,2,E,b,I,b,-,-,-,72,-
+188,0,0,1,80,0,0,6,4,8,0,86,AND,0,2,E,b,I,b,-,-,-,72,-
+189,0,0,1,80,0,0,6,5,8,0,86,SUB,0,2,E,b,I,b,-,-,-,72,-
+190,0,0,1,80,0,0,6,6,8,0,86,XOR,0,2,E,b,I,b,-,-,-,72,-
+191,0,0,1,80,0,0,6,7,8,0,86,CMP,0,2,E,b,I,b,-,-,-,72,-
+192,0,0,1,81,0,0,6,0,8,0,86,ADD,0,2,E,v,I,z,-,-,-,64,-
+193,0,0,1,81,0,0,6,1,8,0,86,OR,0,2,E,v,I,z,-,-,-,64,-
+194,0,0,1,81,0,0,6,2,8,0,86,ADC,0,2,E,v,I,z,-,-,-,64,-
+195,0,0,1,81,0,0,6,3,8,0,86,SBB,0,2,E,v,I,z,-,-,-,64,-
+196,0,0,1,81,0,0,6,4,8,0,86,AND,0,2,E,v,I,z,-,-,-,64,-
+197,0,0,1,81,0,0,6,5,8,0,86,SUB,0,2,E,v,I,z,-,-,-,64,-
+198,0,0,1,81,0,0,6,6,8,0,86,XOR,0,2,E,v,I,z,-,-,-,64,-
+199,0,0,1,81,0,0,6,7,8,0,86,CMP,0,2,E,v,I,z,-,-,-,64,-
+200,0,0,1,82,0,0,6,0,8,0,32,ADD,0,2,E,b,I,b,-,-,-,96,-
+201,0,0,1,82,0,0,6,1,8,0,32,OR,0,2,E,b,I,b,-,-,-,96,-
+202,0,0,1,82,0,0,6,2,8,0,32,ADC,0,2,E,b,I,b,-,-,-,96,-
+203,0,0,1,82,0,0,6,3,8,0,32,SBB,0,2,E,b,I,b,-,-,-,96,-
+204,0,0,1,82,0,0,6,4,8,0,32,AND,0,2,E,b,I,b,-,-,-,96,-
+205,0,0,1,82,0,0,6,5,8,0,32,SUB,0,2,E,b,I,b,-,-,-,96,-
+206,0,0,1,82,0,0,6,6,8,0,32,XOR,0,2,E,b,I,b,-,-,-,96,-
+207,0,0,1,82,0,0,6,7,8,0,32,CMP,0,2,E,b,I,b,-,-,-,96,-
+208,0,0,1,83,0,0,6,0,8,0,86,ADD,0,2,E,v,I,b,-,-,-,72,-
+209,0,0,1,83,0,0,6,1,8,0,86,OR,0,2,E,v,I,b,-,-,-,72,-
+210,0,0,1,83,0,0,6,2,8,0,86,ADC,0,2,E,v,I,b,-,-,-,72,-
+211,0,0,1,83,0,0,6,3,8,0,86,SBB,0,2,E,v,I,b,-,-,-,72,-
+212,0,0,1,83,0,0,6,4,8,0,86,AND,0,2,E,v,I,b,-,-,-,72,-
+213,0,0,1,83,0,0,6,5,8,0,86,SUB,0,2,E,v,I,b,-,-,-,72,-
+214,0,0,1,83,0,0,6,6,8,0,86,XOR,0,2,E,v,I,b,-,-,-,72,-
+215,0,0,1,83,0,0,6,7,8,0,86,CMP,0,2,E,v,I,b,-,-,-,72,-
+216,0,0,1,84,0,0,5,8,8,0,86,TEST,0,2,E,b,G,b,-,-,-,64,-
+217,0,0,1,85,0,0,5,8,8,0,86,TEST,0,2,E,v,G,v,-,-,-,64,-
+218,0,0,1,86,0,0,5,8,8,0,86,XCHG,0,2,E,b,G,b,-,-,-,64,-
+219,0,0,1,87,0,0,5,8,8,0,86,XCHG,0,2,E,v,G,v,-,-,-,64,-
+220,0,0,1,88,0,0,5,8,8,0,86,MOV,0,2,E,b,G,b,-,-,-,64,-
+221,0,0,1,89,0,0,5,8,8,0,86,MOV,0,2,E,v,G,v,-,-,-,64,-
+222,0,0,1,8a,0,0,5,8,8,0,86,MOV,0,2,G,b,E,b,-,-,-,64,-
+223,0,0,1,8b,0,0,5,8,8,0,86,MOV,0,2,G,v,E,v,-,-,-,64,-
+224,0,0,1,8c,0,0,5,8,8,0,86,MOV,0,2,E,w,S,w,-,-,-,32,-
+225,0,0,1,8d,0,0,5,8,8,0,86,LEA,0,2,G,v,M,-,-,-,-,64,-
+226,0,0,1,8e,0,0,5,8,8,0,86,MOV,0,2,S,w,E,w,-,-,-,32,-
+227,0,0,1,8f,0,0,6,0,8,0,86,POP,0,1,E,v,-,-,-,-,-,96,d64
+228,0,0,1,90,0,0,4,8,8,0,86,NOP,0,0,-,-,-,-,-,-,-,64,-
+229,f3,0,1,90,0,0,4,8,8,0,86,PAUSE,0,0,-,-,-,-,-,-,-,64,-
+230,0,41,1,90,0,0,4,8,8,0,64,XCHG,0,2,r8,v,rax,v,-,-,-,128,-
+231,0,41,1,90,0,0,4,8,8,0,64,XCHG,0,2,rax,v,r8,v,-,-,*,128,-
+232,0,0,1,91,0,0,4,8,8,0,86,XCHG,0,2,rcx,v,rax,v,-,-,-,128,-
+233,0,0,1,91,0,0,4,8,8,0,86,XCHG,0,2,rax,v,rcx,v,-,-,*,128,-
+234,0,41,1,91,0,0,4,8,8,0,64,XCHG,0,2,r9,v,rax,v,-,-,-,128,-
+235,0,41,1,91,0,0,4,8,8,0,64,XCHG,0,2,rax,v,r9,v,-,-,*,128,-
+236,0,0,1,92,0,0,4,8,8,0,86,XCHG,0,2,rdx,v,rax,v,-,-,-,128,-
+237,0,0,1,92,0,0,4,8,8,0,86,XCHG,0,2,rax,v,rdx,v,-,-,*,128,-
+238,0,41,1,92,0,0,4,8,8,0,64,XCHG,0,2,r10,v,rax,v,-,-,-,128,-
+239,0,41,1,92,0,0,4,8,8,0,64,XCHG,0,2,rax,v,r10,v,-,-,*,128,-
+240,0,0,1,93,0,0,4,8,8,0,86,XCHG,0,2,rbx,v,rax,v,-,-,-,128,-
+241,0,0,1,93,0,0,4,8,8,0,86,XCHG,0,2,rax,v,rbx,v,-,-,*,128,-
+242,0,41,1,93,0,0,4,8,8,0,64,XCHG,0,2,r11,v,rax,v,-,-,-,128,-
+243,0,41,1,93,0,0,4,8,8,0,64,XCHG,0,2,rax,v,r11,v,-,-,*,128,-
+244,0,0,1,94,0,0,4,8,8,0,86,XCHG,0,2,rsp,v,rax,v,-,-,-,128,-
+245,0,0,1,94,0,0,4,8,8,0,86,XCHG,0,2,rax,v,rsp,v,-,-,*,128,-
+246,0,41,1,94,0,0,4,8,8,0,64,XCHG,0,2,r12,v,rax,v,-,-,-,128,-
+247,0,41,1,94,0,0,4,8,8,0,64,XCHG,0,2,rax,v,r12,v,-,-,*,128,-
+248,0,0,1,95,0,0,4,8,8,0,86,XCHG,0,2,rbp,v,rax,v,-,-,-,128,-
+249,0,0,1,95,0,0,4,8,8,0,86,XCHG,0,2,rax,v,rbp,v,-,-,*,128,-
+250,0,41,1,95,0,0,4,8,8,0,64,XCHG,0,2,r13,v,rax,v,-,-,-,128,-
+251,0,41,1,95,0,0,4,8,8,0,64,XCHG,0,2,rax,v,r13,v,-,-,*,128,-
+252,0,0,1,96,0,0,4,8,8,0,86,XCHG,0,2,rsi,v,rax,v,-,-,-,128,-
+253,0,0,1,96,0,0,4,8,8,0,86,XCHG,0,2,rax,v,rsi,v,-,-,*,128,-
+254,0,41,1,96,0,0,4,8,8,0,64,XCHG,0,2,r14,v,rax,v,-,-,-,128,-
+255,0,41,1,96,0,0,4,8,8,0,64,XCHG,0,2,rax,v,r14,v,-,-,*,128,-
+256,0,0,1,97,0,0,4,8,8,0,86,XCHG,0,2,rdi,v,rax,v,-,-,-,128,-
+257,0,0,1,97,0,0,4,8,8,0,86,XCHG,0,2,rax,v,rdi,v,-,-,*,128,-
+258,0,41,1,97,0,0,4,8,8,0,64,XCHG,0,2,r15,v,rax,v,-,-,-,128,-
+259,0,41,1,97,0,0,4,8,8,0,64,XCHG,0,2,rax,v,r15,v,-,-,*,128,-
+260,0,0,1,98,0,0,4,8,8,0,86,CBW,0,0,-,-,-,-,-,-,-,64,-
+261,0,0,1,98,0,0,4,8,8,0,86,CWDE,0,0,-,-,-,-,-,-,*,64,-
+262,0,0,1,98,0,0,4,8,8,0,64,CWQE,0,0,-,-,-,-,-,-,*,64,-
+263,0,0,1,99,0,0,4,8,8,0,86,CWD,0,0,-,-,-,-,-,-,-,64,-
+264,0,0,1,99,0,0,4,8,8,0,86,CDQ,0,0,-,-,-,-,-,-,*,64,-
+265,0,0,1,99,0,0,4,8,8,0,64,CQO,0,0,-,-,-,-,-,-,*,64,-
+266,0,0,1,9a,0,0,4,8,8,0,32,CALLF,0,1,A,p,-,-,-,-,-,64,-
+267,0,0,1,9b,0,0,4,8,8,0,86,FWAIT,0,0,-,-,-,-,-,-,-,64,-
+268,0,0,1,9b,0,0,4,8,8,0,86,WAIT,0,0,-,-,-,-,-,-,*,64,-
+269,0,0,1,9c,0,0,4,8,8,0,86,PUSHF,0,0,-,-,-,-,-,-,-,64,d64
+270,0,0,1,9c,0,0,4,8,8,0,86,PUSHFD,0,0,-,-,-,-,-,-,*,64,d64
+271,0,0,1,9c,0,0,4,8,8,0,64,PUSHFQ,0,0,-,-,-,-,-,-,*,64,d64
+272,0,0,1,9d,0,0,4,8,8,0,86,POPF,0,0,-,-,-,-,-,-,-,64,d64
+273,0,0,1,9d,0,0,4,8,8,0,86,POPFD,0,0,-,-,-,-,-,-,*,64,d64
+274,0,0,1,9d,0,0,4,8,8,0,64,POPFQ,0,0,-,-,-,-,-,-,*,64,d64
+275,0,0,1,9e,0,0,4,8,8,0,86,SAHF,0,0,-,-,-,-,-,-,-,64,-
+276,0,0,1,9f,0,0,4,8,8,0,86,LAHF,0,0,-,-,-,-,-,-,-,64,-
+277,0,0,1,a0,0,0,4,8,8,0,86,MOV,0,2,al,b,O,b,-,-,-,80,-
+278,0,0,1,a1,0,0,4,8,8,0,86,MOV,0,2,rax,-,O,v,-,-,-,80,-
+279,0,0,1,a2,0,0,4,8,8,0,86,MOV,0,2,O,b,al,b,-,-,-,80,-
+280,0,0,1,a3,0,0,4,8,8,0,86,MOV,0,2,O,v,rax,-,-,-,-,80,-
+281,0,0,1,a4,0,0,4,8,8,0,86,MOVS,0,0,Y,b,X,b,-,-,-,64,-
+282,0,0,1,a4,0,0,4,8,8,0,86,MOVSB,0,0,Y,b,X,b,-,-,*,64,-
+283,0,0,1,a5,0,0,4,8,8,0,86,MOVS,0,0,Y,v,X,v,-,-,-,64,-
+284,0,0,1,a5,0,0,4,8,8,0,86,MOVSW,0,0,Y,v,X,v,-,-,*,64,-
+285,0,0,1,a5,0,0,4,8,8,0,86,MOVSD,0,0,Y,v,X,v,-,-,*,64,-
+286,0,0,1,a6,0,0,4,8,8,0,86,CMPSB,0,0,-,-,-,-,-,-,-,64,-
+287,66,0,1,a7,0,0,4,8,8,0,86,CMPSW,0,0,-,-,-,-,-,-,-,64,-
+288,0,0,1,a7,0,0,4,8,8,0,86,CMPSD,0,0,-,-,-,-,-,-,-,64,-
+289,0,0,1,a8,0,0,4,8,8,0,86,TEST,0,2,al,b,I,b,-,-,-,96,-
+290,0,0,1,a9,0,0,4,8,8,0,86,TEST,0,2,rax,-,I,z,-,-,-,72,-
+291,0,0,1,aa,0,0,4,8,8,0,86,STOS,0,0,Y,b,al,b,-,-,-,64,-
+292,0,0,1,aa,0,0,4,8,8,0,86,STOSB,0,0,Y,b,al,b,-,-,*,64,-
+293,0,0,1,ab,0,0,4,8,8,0,86,STOS,0,0,Y,v,rax,-,-,-,-,64,-
+294,0,0,1,ab,0,0,4,8,8,0,86,STOSW,0,0,Y,v,rax,-,-,-,*,64,-
+295,0,0,1,ab,0,0,4,8,8,0,86,STOSD,0,0,Y,v,rax,-,-,-,*,64,-
+296,0,0,1,ab,0,0,4,8,8,0,64,STOSQ,0,0,Y,v,rax,-,-,-,*,64,-
+297,0,0,1,ac,0,0,4,8,8,0,86,LODS,0,0,al,b,X,b,-,-,-,64,-
+298,0,0,1,ac,0,0,4,8,8,0,86,LODSB,0,0,al,b,X,b,-,-,*,64,-
+299,0,0,1,ad,0,0,4,8,8,0,86,LODS,0,0,rax,-,X,v,-,-,-,64,-
+300,0,0,1,ad,0,0,4,8,8,0,86,LODSW,0,0,rax,-,X,v,-,-,*,64,-
+301,0,0,1,ad,0,0,4,8,8,0,86,LODSD,0,0,rax,-,X,v,-,-,*,64,-
+302,0,0,1,ad,0,0,4,8,8,0,64,LODSQ,0,0,rax,-,X,v,-,-,*,64,-
+303,0,0,1,ae,0,0,4,8,8,0,86,SCAS,0,0,al,b,Y,b,-,-,-,64,-
+304,0,0,1,ae,0,0,4,8,8,0,86,SCASB,0,0,al,b,Y,b,-,-,*,64,-
+305,0,0,1,af,0,0,4,8,8,0,86,SCAS,0,0,rax,-,Y,v,-,-,-,64,-
+306,0,0,1,af,0,0,4,8,8,0,86,SCASW,0,0,rax,-,Y,v,-,-,*,64,-
+307,0,0,1,af,0,0,4,8,8,0,86,SCASD,0,0,rax,-,Y,v,-,-,*,64,-
+308,0,0,1,b0,0,0,4,8,8,0,86,MOV,0,2,al,b,I,b,-,-,-,128,-
+309,0,41,1,b0,0,0,4,8,8,0,64,MOV,0,2,r8l,b,I,b,-,-,-,128,-
+310,0,0,1,b1,0,0,4,8,8,0,86,MOV,0,2,cl,b,I,b,-,-,-,128,-
+311,0,41,1,b1,0,0,4,8,8,0,64,MOV,0,2,r9l,b,I,b,-,-,-,128,-
+312,0,0,1,b2,0,0,4,8,8,0,86,MOV,0,2,dl,b,I,b,-,-,-,128,-
+313,0,41,1,b2,0,0,4,8,8,0,64,MOV,0,2,r10l,b,I,b,-,-,-,128,-
+314,0,0,1,b3,0,0,4,8,8,0,86,MOV,0,2,bl,b,I,b,-,-,-,128,-
+315,0,41,1,b3,0,0,4,8,8,0,64,MOV,0,2,r11l,b,I,b,-,-,-,128,-
+316,0,0,1,b4,0,0,4,8,8,0,86,MOV,0,2,ah,b,I,b,-,-,-,128,-
+317,0,41,1,b4,0,0,4,8,8,0,64,MOV,0,2,r12l,b,I,b,-,-,-,128,-
+318,0,0,1,b5,0,0,4,8,8,0,86,MOV,0,2,ch,b,I,b,-,-,-,128,-
+319,0,41,1,b5,0,0,4,8,8,0,64,MOV,0,2,r13l,b,I,b,-,-,-,128,-
+320,0,0,1,b6,0,0,4,8,8,0,86,MOV,0,2,dh,b,I,b,-,-,-,128,-
+321,0,41,1,b6,0,0,4,8,8,0,64,MOV,0,2,r14l,b,I,b,-,-,-,128,-
+322,0,0,1,b7,0,0,4,8,8,0,86,MOV,0,2,bh,b,I,b,-,-,-,128,-
+323,0,41,1,b7,0,0,4,8,8,0,64,MOV,0,2,r15l,b,I,b,-,-,-,128,-
+324,0,0,1,b8,0,0,4,8,8,0,86,MOV,0,2,rax,-,I,v,-,-,-,100,-
+325,0,41,1,b8,0,0,4,8,8,0,64,MOV,0,2,r8,-,I,v,-,-,-,100,-
+326,0,0,1,b9,0,0,4,8,8,0,86,MOV,0,2,rcx,-,I,v,-,-,-,100,-
+327,0,41,1,b9,0,0,4,8,8,0,64,MOV,0,2,r9,-,I,v,-,-,-,100,-
+328,0,0,1,ba,0,0,4,8,8,0,86,MOV,0,2,rdx,-,I,v,-,-,-,100,-
+329,0,41,1,ba,0,0,4,8,8,0,64,MOV,0,2,r10,-,I,v,-,-,-,100,-
+330,0,0,1,bb,0,0,4,8,8,0,86,MOV,0,2,rbx,-,I,v,-,-,-,100,-
+331,0,41,1,bb,0,0,4,8,8,0,64,MOV,0,2,r11,-,I,v,-,-,-,100,-
+332,0,0,1,bc,0,0,4,8,8,0,86,MOV,0,2,rsp,-,I,v,-,-,-,100,-
+333,0,41,1,bc,0,0,4,8,8,0,64,MOV,0,2,r12,-,I,v,-,-,-,100,-
+334,0,0,1,bd,0,0,4,8,8,0,86,MOV,0,2,rbp,-,I,v,-,-,-,100,-
+335,0,41,1,bd,0,0,4,8,8,0,64,MOV,0,2,r13,-,I,v,-,-,-,100,-
+336,0,0,1,be,0,0,4,8,8,0,86,MOV,0,2,rsi,-,I,v,-,-,-,100,-
+337,0,41,1,be,0,0,4,8,8,0,64,MOV,0,2,r14,-,I,v,-,-,-,100,-
+338,0,0,1,bf,0,0,4,8,8,0,86,MOV,0,2,rdi,-,I,v,-,-,-,100,-
+339,0,41,1,bf,0,0,4,8,8,0,64,MOV,0,2,r15,-,I,v,-,-,-,100,-
+340,0,0,1,c0,0,0,6,0,8,0,86,ROL,0,2,E,b,I,b,-,-,-,96,-
+341,0,0,1,c0,0,0,6,1,8,0,86,ROR,0,2,E,b,I,b,-,-,-,96,-
+342,0,0,1,c0,0,0,6,2,8,0,86,RCL,0,2,E,b,I,b,-,-,-,96,-
+343,0,0,1,c0,0,0,6,3,8,0,86,RCR,0,2,E,b,I,b,-,-,-,96,-
+344,0,0,1,c0,0,0,6,4,8,0,86,SHL,0,2,E,b,I,b,-,-,-,96,-
+345,0,0,1,c0,0,0,6,4,8,0,86,SAL,0,2,E,b,I,b,-,-,*,96,-
+346,0,0,1,c0,0,0,6,5,8,0,86,SHR,0,2,E,b,I,b,-,-,-,96,-
+347,0,0,1,c0,0,0,6,7,8,0,86,SAR,0,2,E,b,I,b,-,-,-,96,-
+348,0,0,1,c1,0,0,6,0,8,0,86,ROL,0,2,E,v,I,b,-,-,-,72,-
+349,0,0,1,c1,0,0,6,1,8,0,86,ROR,0,2,E,v,I,b,-,-,-,72,-
+350,0,0,1,c1,0,0,6,2,8,0,86,RCL,0,2,E,v,I,b,-,-,-,72,-
+351,0,0,1,c1,0,0,6,3,8,0,86,RCR,0,2,E,v,I,b,-,-,-,72,-
+352,0,0,1,c1,0,0,6,4,8,0,86,SHL,0,2,E,v,I,b,-,-,-,72,-
+353,0,0,1,c1,0,0,6,4,8,0,86,SAL,0,2,E,v,I,b,-,-,*,72,-
+354,0,0,1,c1,0,0,6,5,8,0,86,SHR,0,2,E,v,I,b,-,-,-,72,-
+355,0,0,1,c1,0,0,6,7,8,0,86,SAR,0,2,E,v,I,b,-,-,-,72,-
+356,0,0,1,c2,0,0,4,8,8,0,86,RET,0,1,I,w,-,-,-,-,-,64,f64
+357,0,0,1,c3,0,0,4,8,8,0,86,RET,0,0,-,-,-,-,-,-,-,64,f64
+358,0,0,1,c3,0,0,4,8,8,0,86,RETN,0,0,-,-,-,-,-,-,*,64,f64
+359,0,0,1,c4,0,0,5,8,8,0,32,LES,0,2,G,z,M,p,-,-,-,64,-
+360,0,0,1,c5,0,0,5,8,8,0,32,LDS,0,2,G,z,M,p,-,-,-,64,-
+361,0,0,1,c6,0,0,6,0,8,0,86,MOV,0,2,E,b,I,b,-,-,-,72,-
+362,0,0,1,c7,0,0,6,0,8,0,86,MOV,0,2,E,v,I,z,-,-,-,64,-
+363,0,0,1,c8,0,0,4,8,8,0,86,ENTER,0,2,I,w,I,b,-,-,-,64,-
+364,0,0,1,c9,0,0,4,8,8,0,86,LEAVE,0,0,-,-,-,-,-,-,-,64,d64
+365,0,0,1,ca,0,0,4,8,8,0,86,RETF,0,1,I,w,-,-,-,-,-,64,-
+366,0,0,1,cb,0,0,4,8,8,0,86,RETF,0,0,-,-,-,-,-,-,-,64,-
+367,0,0,1,cc,0,0,4,8,8,0,86,INT3,0,0,-,-,-,-,-,-,-,64,-
+368,0,0,1,cd,0,0,4,8,8,0,86,INT,0,1,I,b,-,-,-,-,-,64,-
+369,0,0,1,ce,0,0,4,8,8,0,32,INTO,0,0,-,-,-,-,-,-,-,64,-
+370,0,0,1,cf,0,0,4,8,8,0,86,IRET,0,0,-,-,-,-,-,-,-,64,-
+371,0,0,1,cf,0,0,4,8,8,0,86,IRETD,0,0,-,-,-,-,-,-,*,64,-
+372,0,0,1,cf,0,0,4,8,8,0,64,IRETQ,0,0,-,-,-,-,-,-,*,64,-
+373,0,0,1,d0,0,0,6,0,8,0,86,ROL,0,2,E,b,1,-,-,-,-,64,-
+374,0,0,1,d0,0,0,6,1,8,0,86,ROR,0,2,E,b,1,-,-,-,-,64,-
+375,0,0,1,d0,0,0,6,2,8,0,86,RCL,0,2,E,b,1,-,-,-,-,64,-
+376,0,0,1,d0,0,0,6,3,8,0,86,RCR,0,2,E,b,1,-,-,-,-,64,-
+377,0,0,1,d0,0,0,6,4,8,0,86,SHL,0,2,E,b,1,-,-,-,-,64,-
+378,0,0,1,d0,0,0,6,4,8,0,86,SAL,0,2,E,b,1,-,-,-,*,64,-
+379,0,0,1,d0,0,0,6,5,8,0,86,SHR,0,2,E,b,1,-,-,-,-,64,-
+380,0,0,1,d0,0,0,6,7,8,0,86,SAR,0,2,E,b,1,-,-,-,-,64,-
+381,0,0,1,d1,0,0,6,0,8,0,86,ROL,0,2,E,v,1,-,-,-,-,64,-
+382,0,0,1,d1,0,0,6,1,8,0,86,ROR,0,2,E,v,1,-,-,-,-,64,-
+383,0,0,1,d1,0,0,6,2,8,0,86,RCL,0,2,E,v,1,-,-,-,-,64,-
+384,0,0,1,d1,0,0,6,3,8,0,86,RCR,0,2,E,v,1,-,-,-,-,64,-
+385,0,0,1,d1,0,0,6,4,8,0,86,SHL,0,2,E,v,1,-,-,-,-,64,-
+386,0,0,1,d1,0,0,6,4,8,0,86,SAL,0,2,E,v,1,-,-,-,*,64,-
+387,0,0,1,d1,0,0,6,5,8,0,86,SHR,0,2,E,v,1,-,-,-,-,64,-
+388,0,0,1,d1,0,0,6,7,8,0,86,SAR,0,2,E,v,1,-,-,-,-,64,-
+389,0,0,1,d2,0,0,6,0,8,0,86,ROL,0,2,E,b,cl,b,-,-,-,64,-
+390,0,0,1,d2,0,0,6,1,8,0,86,ROR,0,2,E,b,cl,b,-,-,-,64,-
+391,0,0,1,d2,0,0,6,2,8,0,86,RCL,0,2,E,b,cl,b,-,-,-,64,-
+392,0,0,1,d2,0,0,6,3,8,0,86,RCR,0,2,E,b,cl,b,-,-,-,64,-
+393,0,0,1,d2,0,0,6,4,8,0,86,SHL,0,2,E,b,cl,b,-,-,-,64,-
+394,0,0,1,d2,0,0,6,4,8,0,86,SAL,0,2,E,b,cl,b,-,-,*,64,-
+395,0,0,1,d2,0,0,6,5,8,0,86,SHR,0,2,E,b,cl,b,-,-,-,64,-
+396,0,0,1,d2,0,0,6,7,8,0,86,SAR,0,2,E,b,cl,b,-,-,-,64,-
+397,0,0,1,d3,0,0,6,0,8,0,86,ROL,0,2,E,v,cl,b,-,-,-,64,-
+398,0,0,1,d3,0,0,6,1,8,0,86,ROR,0,2,E,v,cl,b,-,-,-,64,-
+399,0,0,1,d3,0,0,6,2,8,0,86,RCL,0,2,E,v,cl,b,-,-,-,64,-
+400,0,0,1,d3,0,0,6,3,8,0,86,RCR,0,2,E,v,cl,b,-,-,-,64,-
+401,0,0,1,d3,0,0,6,4,8,0,86,SHL,0,2,E,v,cl,b,-,-,-,64,-
+402,0,0,1,d3,0,0,6,4,8,0,86,SAL,0,2,E,v,cl,b,-,-,*,64,-
+403,0,0,1,d3,0,0,6,5,8,0,86,SHR,0,2,E,v,cl,b,-,-,-,64,-
+404,0,0,1,d3,0,0,6,7,8,0,86,SAR,0,2,E,v,cl,b,-,-,-,64,-
+405,0,0,1,d4,0,0,4,8,8,0,32,AMM,0,1,I,b,-,-,-,-,-,64,-
+406,0,0,1,d5,0,0,4,8,8,0,32,AAD,0,1,I,b,-,-,-,-,-,64,-
+407,0,0,1,d6,0,0,4,8,8,0,32,SALC,0,0,-,-,-,-,-,-,-,64,-
+408,0,0,1,d7,0,0,4,8,8,0,86,XLAT,0,0,-,-,-,-,-,-,-,64,-
+409,0,0,1,d7,0,0,4,8,8,0,86,XLATB,0,0,-,-,-,-,-,-,*,64,-
+410,0,0,1,d8,0,0,10,8,8,0,86,**FPU=d8**,5,0,-,-,-,-,-,-,-,64,-
+411,0,0,4,d8,0,0,8,0,8,0,86,FADD,7,1,M,d,-,-,-,-,-,64,-
+412,0,0,4,d8,0,0,8,1,8,0,86,FMUL,7,1,M,d,-,-,-,-,-,64,-
+413,0,0,4,d8,0,0,8,2,8,0,86,FCOM,7,1,M,d,-,-,-,-,-,64,-
+414,0,0,4,d8,0,0,8,3,8,0,86,FCOMP,7,1,M,d,-,-,-,-,-,64,-
+415,0,0,4,d8,0,0,8,4,8,0,86,FSUB,7,1,M,d,-,-,-,-,-,64,-
+416,0,0,4,d8,0,0,8,5,8,0,86,FSUBR,7,1,M,d,-,-,-,-,-,64,-
+417,0,0,4,d8,0,0,8,6,8,0,86,FDIV,7,1,M,d,-,-,-,-,-,64,-
+418,0,0,4,d8,0,0,8,7,8,0,86,FDIVR,7,1,M,d,-,-,-,-,-,64,-
+419,0,0,4,d8,0,0,9,8,8,c0,86,FADD,8,2,st0,-,st0,-,-,-,-,64,-
+420,0,0,4,d8,0,0,9,8,8,c1,86,FADD,8,2,st1,-,st0,-,-,-,-,64,-
+421,0,0,4,d8,0,0,9,8,8,c2,86,FADD,8,2,st2,-,st0,-,-,-,-,64,-
+422,0,0,4,d8,0,0,9,8,8,c3,86,FADD,8,2,st3,-,st0,-,-,-,-,64,-
+423,0,0,4,d8,0,0,9,8,8,c4,86,FADD,8,2,st4,-,st0,-,-,-,-,64,-
+424,0,0,4,d8,0,0,9,8,8,c5,86,FADD,8,2,st5,-,st0,-,-,-,-,64,-
+425,0,0,4,d8,0,0,9,8,8,c6,86,FADD,8,2,st6,-,st0,-,-,-,-,64,-
+426,0,0,4,d8,0,0,9,8,8,c7,86,FADD,8,2,st7,-,st0,-,-,-,-,64,-
+427,0,0,4,d8,0,0,9,8,8,c8,86,FMUL,8,2,st0,-,st0,-,-,-,-,64,-
+428,0,0,4,d8,0,0,9,8,8,c9,86,FMUL,8,2,st1,-,st0,-,-,-,-,64,-
+429,0,0,4,d8,0,0,9,8,8,ca,86,FMUL,8,2,st2,-,st0,-,-,-,-,64,-
+430,0,0,4,d8,0,0,9,8,8,cb,86,FMUL,8,2,st3,-,st0,-,-,-,-,64,-
+431,0,0,4,d8,0,0,9,8,8,cc,86,FMUL,8,2,st4,-,st0,-,-,-,-,64,-
+432,0,0,4,d8,0,0,9,8,8,cd,86,FMUL,8,2,st5,-,st0,-,-,-,-,64,-
+433,0,0,4,d8,0,0,9,8,8,ce,86,FMUL,8,2,st6,-,st0,-,-,-,-,64,-
+434,0,0,4,d8,0,0,9,8,8,cf,86,FMUL,8,2,st7,-,st0,-,-,-,-,64,-
+435,0,0,4,d8,0,0,9,8,8,d0,86,FCOM,8,2,st0,-,st0,-,-,-,-,64,-
+436,0,0,4,d8,0,0,9,8,8,d1,86,FCOM,8,2,st1,-,st0,-,-,-,-,64,-
+437,0,0,4,d8,0,0,9,8,8,d2,86,FCOM,8,2,st2,-,st0,-,-,-,-,64,-
+438,0,0,4,d8,0,0,9,8,8,d3,86,FCOM,8,2,st3,-,st0,-,-,-,-,64,-
+439,0,0,4,d8,0,0,9,8,8,d4,86,FCOM,8,2,st4,-,st0,-,-,-,-,64,-
+440,0,0,4,d8,0,0,9,8,8,d5,86,FCOM,8,2,st5,-,st0,-,-,-,-,64,-
+441,0,0,4,d8,0,0,9,8,8,d6,86,FCOM,8,2,st6,-,st0,-,-,-,-,64,-
+442,0,0,4,d8,0,0,9,8,8,d7,86,FCOM,8,2,st7,-,st0,-,-,-,-,64,-
+443,0,0,4,d8,0,0,9,8,8,d8,86,FCOMP,8,2,st0,-,st0,-,-,-,-,64,-
+444,0,0,4,d8,0,0,9,8,8,d9,86,FCOMP,8,2,st1,-,st0,-,-,-,-,64,-
+445,0,0,4,d8,0,0,9,8,8,da,86,FCOMP,8,2,st2,-,st0,-,-,-,-,64,-
+446,0,0,4,d8,0,0,9,8,8,db,86,FCOMP,8,2,st3,-,st0,-,-,-,-,64,-
+447,0,0,4,d8,0,0,9,8,8,dc,86,FCOMP,8,2,st4,-,st0,-,-,-,-,64,-
+448,0,0,4,d8,0,0,9,8,8,dd,86,FCOMP,8,2,st5,-,st0,-,-,-,-,64,-
+449,0,0,4,d8,0,0,9,8,8,de,86,FCOMP,8,2,st6,-,st0,-,-,-,-,64,-
+450,0,0,4,d8,0,0,9,8,8,df,86,FCOMP,8,2,st7,-,st0,-,-,-,-,64,-
+451,0,0,4,d8,0,0,9,8,8,e0,86,FSUB,8,2,st0,-,st0,-,-,-,-,64,-
+452,0,0,4,d8,0,0,9,8,8,e1,86,FSUB,8,2,st1,-,st0,-,-,-,-,64,-
+453,0,0,4,d8,0,0,9,8,8,e2,86,FSUB,8,2,st2,-,st0,-,-,-,-,64,-
+454,0,0,4,d8,0,0,9,8,8,e3,86,FSUB,8,2,st3,-,st0,-,-,-,-,64,-
+455,0,0,4,d8,0,0,9,8,8,e4,86,FSUB,8,2,st4,-,st0,-,-,-,-,64,-
+456,0,0,4,d8,0,0,9,8,8,e5,86,FSUB,8,2,st5,-,st0,-,-,-,-,64,-
+457,0,0,4,d8,0,0,9,8,8,e6,86,FSUB,8,2,st6,-,st0,-,-,-,-,64,-
+458,0,0,4,d8,0,0,9,8,8,e7,86,FSUB,8,2,st7,-,st0,-,-,-,-,64,-
+459,0,0,4,d8,0,0,9,8,8,e8,86,FSUBR,8,2,st0,-,st0,-,-,-,-,64,-
+460,0,0,4,d8,0,0,9,8,8,e9,86,FSUBR,8,2,st1,-,st0,-,-,-,-,64,-
+461,0,0,4,d8,0,0,9,8,8,ea,86,FSUBR,8,2,st2,-,st0,-,-,-,-,64,-
+462,0,0,4,d8,0,0,9,8,8,eb,86,FSUBR,8,2,st3,-,st0,-,-,-,-,64,-
+463,0,0,4,d8,0,0,9,8,8,ec,86,FSUBR,8,2,st4,-,st0,-,-,-,-,64,-
+464,0,0,4,d8,0,0,9,8,8,ed,86,FSUBR,8,2,st5,-,st0,-,-,-,-,64,-
+465,0,0,4,d8,0,0,9,8,8,ee,86,FSUBR,8,2,st6,-,st0,-,-,-,-,64,-
+466,0,0,4,d8,0,0,9,8,8,ef,86,FSUBR,8,2,st7,-,st0,-,-,-,-,64,-
+467,0,0,4,d8,0,0,9,8,8,f0,86,FDIV,8,2,st0,-,st0,-,-,-,-,64,-
+468,0,0,4,d8,0,0,9,8,8,f1,86,FDIV,8,2,st1,-,st0,-,-,-,-,64,-
+469,0,0,4,d8,0,0,9,8,8,f2,86,FDIV,8,2,st2,-,st0,-,-,-,-,64,-
+470,0,0,4,d8,0,0,9,8,8,f3,86,FDIV,8,2,st3,-,st0,-,-,-,-,64,-
+471,0,0,4,d8,0,0,9,8,8,f4,86,FDIV,8,2,st4,-,st0,-,-,-,-,64,-
+472,0,0,4,d8,0,0,9,8,8,f5,86,FDIV,8,2,st5,-,st0,-,-,-,-,64,-
+473,0,0,4,d8,0,0,9,8,8,f6,86,FDIV,8,2,st6,-,st0,-,-,-,-,64,-
+474,0,0,4,d8,0,0,9,8,8,f7,86,FDIV,8,2,st7,-,st0,-,-,-,-,64,-
+475,0,0,4,d8,0,0,9,8,8,f8,86,FDIVR,8,2,st0,-,st0,-,-,-,-,64,-
+476,0,0,4,d8,0,0,9,8,8,f9,86,FDIVR,8,2,st1,-,st0,-,-,-,-,64,-
+477,0,0,4,d8,0,0,9,8,8,fa,86,FDIVR,8,2,st2,-,st0,-,-,-,-,64,-
+478,0,0,4,d8,0,0,9,8,8,fb,86,FDIVR,8,2,st3,-,st0,-,-,-,-,64,-
+479,0,0,4,d8,0,0,9,8,8,fc,86,FDIVR,8,2,st4,-,st0,-,-,-,-,64,-
+480,0,0,4,d8,0,0,9,8,8,fd,86,FDIVR,8,2,st5,-,st0,-,-,-,-,64,-
+481,0,0,4,d8,0,0,9,8,8,fe,86,FDIVR,8,2,st6,-,st0,-,-,-,-,64,-
+482,0,0,4,d8,0,0,9,8,8,ff,86,FDIVR,8,2,st7,-,st0,-,-,-,-,64,-
+483,0,0,1,d9,0,0,10,8,8,0,86,**FPU=d9**,5,0,-,-,-,-,-,-,-,64,-
+484,0,0,4,d9,0,0,8,0,8,0,86,FLD,7,1,M,d,-,-,-,-,-,64,-
+485,0,0,4,d9,0,0,15,1,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+486,0,0,4,d9,0,0,8,2,8,0,86,FST,7,1,M,d,-,-,-,-,-,64,-
+487,0,0,4,d9,0,0,8,3,8,0,86,FSTP,7,1,M,d,-,-,-,-,-,64,-
+488,0,0,4,d9,0,0,8,4,8,0,86,FLDENV,7,1,M,r,-,-,-,-,-,64,-
+489,0,0,4,d9,0,0,8,5,8,0,86,FLDCW,7,1,M,w,-,-,-,-,-,64,-
+490,0,0,4,d9,0,0,8,6,8,0,86,FSTENV,7,1,M,r,-,-,-,-,-,64,-
+491,0,0,4,d9,0,0,8,7,8,0,86,FSTCW,7,1,M,w,-,-,-,-,-,64,-
+492,0,0,4,d9,0,0,9,8,8,c0,86,FLD,8,2,st0,-,st0,-,-,-,-,64,-
+493,0,0,4,d9,0,0,9,8,8,c1,86,FLD,8,2,st1,-,st0,-,-,-,-,64,-
+494,0,0,4,d9,0,0,9,8,8,c2,86,FLD,8,2,st2,-,st0,-,-,-,-,64,-
+495,0,0,4,d9,0,0,9,8,8,c3,86,FLD,8,2,st3,-,st0,-,-,-,-,64,-
+496,0,0,4,d9,0,0,9,8,8,c4,86,FLD,8,2,st4,-,st0,-,-,-,-,64,-
+497,0,0,4,d9,0,0,9,8,8,c5,86,FLD,8,2,st5,-,st0,-,-,-,-,64,-
+498,0,0,4,d9,0,0,9,8,8,c6,86,FLD,8,2,st6,-,st0,-,-,-,-,64,-
+499,0,0,4,d9,0,0,9,8,8,c7,86,FLD,8,2,st7,-,st0,-,-,-,-,64,-
+500,0,0,4,d9,0,0,9,8,8,c8,86,FXCH,8,2,st0,-,st0,-,-,-,-,64,-
+501,0,0,4,d9,0,0,9,8,8,c9,86,FXCH,8,2,st1,-,st0,-,-,-,-,64,-
+502,0,0,4,d9,0,0,9,8,8,ca,86,FXCH,8,2,st2,-,st0,-,-,-,-,64,-
+503,0,0,4,d9,0,0,9,8,8,cb,86,FXCH,8,2,st3,-,st0,-,-,-,-,64,-
+504,0,0,4,d9,0,0,9,8,8,cc,86,FXCH,8,2,st4,-,st0,-,-,-,-,64,-
+505,0,0,4,d9,0,0,9,8,8,cd,86,FXCH,8,2,st5,-,st0,-,-,-,-,64,-
+506,0,0,4,d9,0,0,9,8,8,ce,86,FXCH,8,2,st6,-,st0,-,-,-,-,64,-
+507,0,0,4,d9,0,0,9,8,8,cf,86,FXCH,8,2,st7,-,st0,-,-,-,-,64,-
+508,0,0,4,d9,0,0,9,8,8,d0,86,FNOP,8,0,-,-,-,-,-,-,-,64,-
+509,0,0,4,d9,0,0,9,8,8,e0,86,FCHS,8,0,-,-,-,-,-,-,-,64,-
+510,0,0,4,d9,0,0,9,8,8,e1,86,FABS,8,0,-,-,-,-,-,-,-,64,-
+511,0,0,4,d9,0,0,9,8,8,e4,86,FTST,8,0,-,-,-,-,-,-,-,64,-
+512,0,0,4,d9,0,0,9,8,8,e5,86,FXAM,8,0,-,-,-,-,-,-,-,64,-
+513,0,0,4,d9,0,0,9,8,8,e8,86,FLD1,8,0,-,-,-,-,-,-,-,64,-
+514,0,0,4,d9,0,0,9,8,8,e9,86,FLDL2T,8,0,-,-,-,-,-,-,-,64,-
+515,0,0,4,d9,0,0,9,8,8,ea,86,FLDL2E,8,0,-,-,-,-,-,-,-,64,-
+516,0,0,4,d9,0,0,9,8,8,eb,86,FLDPI,8,0,-,-,-,-,-,-,-,64,-
+517,0,0,4,d9,0,0,9,8,8,ec,86,FLDLG2,8,0,-,-,-,-,-,-,-,64,-
+518,0,0,4,d9,0,0,9,8,8,ed,86,FLDLN2,8,0,-,-,-,-,-,-,-,64,-
+519,0,0,4,d9,0,0,9,8,8,ee,86,FLDZ,8,0,-,-,-,-,-,-,-,64,-
+520,0,0,4,d9,0,0,9,8,8,f0,86,F2XMI,8,0,-,-,-,-,-,-,-,64,-
+521,0,0,4,d9,0,0,9,8,8,f1,86,FYL2X,8,0,-,-,-,-,-,-,-,64,-
+522,0,0,4,d9,0,0,9,8,8,f2,86,FPTAN,8,0,-,-,-,-,-,-,-,64,-
+523,0,0,4,d9,0,0,9,8,8,f3,86,FPATAN,8,0,-,-,-,-,-,-,-,64,-
+524,0,0,4,d9,0,0,9,8,8,f4,86,FXTRACT,8,0,-,-,-,-,-,-,-,64,-
+525,0,0,4,d9,0,0,9,8,8,f5,86,FPREMI,8,0,-,-,-,-,-,-,-,64,-
+526,0,0,4,d9,0,0,9,8,8,f6,86,FDECSTP,8,0,-,-,-,-,-,-,-,64,-
+527,0,0,4,d9,0,0,9,8,8,f7,86,FINCSTP,8,0,-,-,-,-,-,-,-,64,-
+528,0,0,4,d9,0,0,9,8,8,f8,86,FPREM,8,0,-,-,-,-,-,-,-,64,-
+529,0,0,4,d9,0,0,9,8,8,f9,86,FYL2XPI,8,0,-,-,-,-,-,-,-,64,-
+530,0,0,4,d9,0,0,9,8,8,fa,86,FSQRT,8,0,-,-,-,-,-,-,-,64,-
+531,0,0,4,d9,0,0,9,8,8,fb,86,FSINCOS,8,0,-,-,-,-,-,-,-,64,-
+532,0,0,4,d9,0,0,9,8,8,fc,86,FRNDINT,8,0,-,-,-,-,-,-,-,64,-
+533,0,0,4,d9,0,0,9,8,8,fd,86,FSCALE,8,0,-,-,-,-,-,-,-,64,-
+534,0,0,4,d9,0,0,9,8,8,fe,86,FSIN,8,0,-,-,-,-,-,-,-,64,-
+535,0,0,4,d9,0,0,9,8,8,ff,86,FCOS,8,0,-,-,-,-,-,-,-,64,-
+536,0,0,1,da,0,0,10,8,8,0,86,**FPU=da**,5,0,-,-,-,-,-,-,-,64,-
+537,0,0,4,da,0,0,8,0,8,0,86,FIADD,7,1,M,d,-,-,-,-,-,64,-
+538,0,0,4,da,0,0,8,1,8,0,86,FIMUL,7,1,M,d,-,-,-,-,-,64,-
+539,0,0,4,da,0,0,8,2,8,0,86,FICOM,7,1,M,d,-,-,-,-,-,64,-
+540,0,0,4,da,0,0,8,3,8,0,86,FICOMP,7,1,M,d,-,-,-,-,-,64,-
+541,0,0,4,da,0,0,8,4,8,0,86,FISUB,7,1,M,d,-,-,-,-,-,64,-
+542,0,0,4,da,0,0,8,5,8,0,86,FISUBR,7,1,M,d,-,-,-,-,-,64,-
+543,0,0,4,da,0,0,8,6,8,0,86,FIDIV,7,1,M,d,-,-,-,-,-,64,-
+544,0,0,4,da,0,0,8,7,8,0,86,FIDIVR,7,1,M,d,-,-,-,-,-,64,-
+545,0,0,4,da,0,0,9,8,8,c0,86,FCMOVB,8,2,st0,-,st0,-,-,-,-,64,-
+546,0,0,4,da,0,0,9,8,8,c1,86,FCMOVB,8,2,st1,-,st0,-,-,-,-,64,-
+547,0,0,4,da,0,0,9,8,8,c2,86,FCMOVB,8,2,st2,-,st0,-,-,-,-,64,-
+548,0,0,4,da,0,0,9,8,8,c3,86,FCMOVB,8,2,st3,-,st0,-,-,-,-,64,-
+549,0,0,4,da,0,0,9,8,8,c4,86,FCMOVB,8,2,st4,-,st0,-,-,-,-,64,-
+550,0,0,4,da,0,0,9,8,8,c5,86,FCMOVB,8,2,st5,-,st0,-,-,-,-,64,-
+551,0,0,4,da,0,0,9,8,8,c6,86,FCMOVB,8,2,st6,-,st0,-,-,-,-,64,-
+552,0,0,4,da,0,0,9,8,8,c7,86,FCMOVB,8,2,st7,-,st0,-,-,-,-,64,-
+553,0,0,4,da,0,0,9,8,8,c8,86,FCMOVE,8,2,st0,-,st0,-,-,-,-,64,-
+554,0,0,4,da,0,0,9,8,8,c9,86,FCMOVE,8,2,st1,-,st0,-,-,-,-,64,-
+555,0,0,4,da,0,0,9,8,8,ca,86,FCMOVE,8,2,st2,-,st0,-,-,-,-,64,-
+556,0,0,4,da,0,0,9,8,8,cb,86,FCMOVE,8,2,st3,-,st0,-,-,-,-,64,-
+557,0,0,4,da,0,0,9,8,8,cc,86,FCMOVE,8,2,st4,-,st0,-,-,-,-,64,-
+558,0,0,4,da,0,0,9,8,8,cd,86,FCMOVE,8,2,st5,-,st0,-,-,-,-,64,-
+559,0,0,4,da,0,0,9,8,8,ce,86,FCMOVE,8,2,st6,-,st0,-,-,-,-,64,-
+560,0,0,4,da,0,0,9,8,8,cf,86,FCMOVE,8,2,st7,-,st0,-,-,-,-,64,-
+561,0,0,4,da,0,0,9,8,8,d0,86,FCMOVBE,8,2,st0,-,st0,-,-,-,-,64,-
+562,0,0,4,da,0,0,9,8,8,d1,86,FCMOVBE,8,2,st1,-,st0,-,-,-,-,64,-
+563,0,0,4,da,0,0,9,8,8,d2,86,FCMOVBE,8,2,st2,-,st0,-,-,-,-,64,-
+564,0,0,4,da,0,0,9,8,8,d3,86,FCMOVBE,8,2,st3,-,st0,-,-,-,-,64,-
+565,0,0,4,da,0,0,9,8,8,d4,86,FCMOVBE,8,2,st4,-,st0,-,-,-,-,64,-
+566,0,0,4,da,0,0,9,8,8,d5,86,FCMOVBE,8,2,st5,-,st0,-,-,-,-,64,-
+567,0,0,4,da,0,0,9,8,8,d6,86,FCMOVBE,8,2,st6,-,st0,-,-,-,-,64,-
+568,0,0,4,da,0,0,9,8,8,d7,86,FCMOVBE,8,2,st7,-,st0,-,-,-,-,64,-
+569,0,0,4,da,0,0,9,8,8,d8,86,FCMOVU,8,2,st0,-,st0,-,-,-,-,64,-
+570,0,0,4,da,0,0,9,8,8,d9,86,FCMOVU,8,2,st1,-,st0,-,-,-,-,64,-
+571,0,0,4,da,0,0,9,8,8,da,86,FCMOVU,8,2,st2,-,st0,-,-,-,-,64,-
+572,0,0,4,da,0,0,9,8,8,db,86,FCMOVU,8,2,st3,-,st0,-,-,-,-,64,-
+573,0,0,4,da,0,0,9,8,8,dc,86,FCMOVU,8,2,st4,-,st0,-,-,-,-,64,-
+574,0,0,4,da,0,0,9,8,8,dd,86,FCMOVU,8,2,st5,-,st0,-,-,-,-,64,-
+575,0,0,4,da,0,0,9,8,8,de,86,FCMOVU,8,2,st6,-,st0,-,-,-,-,64,-
+576,0,0,4,da,0,0,9,8,8,df,86,FCMOVU,8,2,st7,-,st0,-,-,-,-,64,-
+577,0,0,4,da,0,0,9,8,8,e9,86,FUCOMPP,8,0,-,-,-,-,-,-,-,64,-
+578,0,0,1,db,0,0,10,8,8,0,86,**FPU=db**,5,0,-,-,-,-,-,-,-,64,-
+579,0,0,4,db,0,0,8,0,8,0,86,FILD,7,1,M,d,-,-,-,-,-,64,-
+580,0,0,4,db,0,0,8,1,8,0,86,FISTTP,7,1,M,d,-,-,-,-,-,64,-
+581,0,0,4,db,0,0,8,2,8,0,86,FIST,7,1,M,d,-,-,-,-,-,64,-
+582,0,0,4,db,0,0,8,3,8,0,86,FISTP,7,1,M,d,-,-,-,-,-,64,-
+583,0,0,4,db,0,0,15,4,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+584,0,0,4,db,0,0,8,5,8,0,86,FLD,7,1,M,t,-,-,-,-,-,64,-
+585,0,0,4,db,0,0,15,6,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+586,0,0,4,db,0,0,8,7,8,0,86,FSTP,7,1,M,t,-,-,-,-,-,64,-
+587,0,0,4,db,0,0,9,8,8,c0,86,FCMOVNB,8,2,st0,-,st0,-,-,-,-,64,-
+588,0,0,4,db,0,0,9,8,8,c1,86,FCMOVNB,8,2,st1,-,st0,-,-,-,-,64,-
+589,0,0,4,db,0,0,9,8,8,c2,86,FCMOVNB,8,2,st2,-,st0,-,-,-,-,64,-
+590,0,0,4,db,0,0,9,8,8,c3,86,FCMOVNB,8,2,st3,-,st0,-,-,-,-,64,-
+591,0,0,4,db,0,0,9,8,8,c4,86,FCMOVNB,8,2,st4,-,st0,-,-,-,-,64,-
+592,0,0,4,db,0,0,9,8,8,c5,86,FCMOVNB,8,2,st5,-,st0,-,-,-,-,64,-
+593,0,0,4,db,0,0,9,8,8,c6,86,FCMOVNB,8,2,st6,-,st0,-,-,-,-,64,-
+594,0,0,4,db,0,0,9,8,8,c7,86,FCMOVNB,8,2,st7,-,st0,-,-,-,-,64,-
+595,0,0,4,db,0,0,9,8,8,c8,86,FCMOVNE,8,2,st0,-,st0,-,-,-,-,64,-
+596,0,0,4,db,0,0,9,8,8,c9,86,FCMOVNE,8,2,st1,-,st0,-,-,-,-,64,-
+597,0,0,4,db,0,0,9,8,8,ca,86,FCMOVNE,8,2,st2,-,st0,-,-,-,-,64,-
+598,0,0,4,db,0,0,9,8,8,cb,86,FCMOVNE,8,2,st3,-,st0,-,-,-,-,64,-
+599,0,0,4,db,0,0,9,8,8,cc,86,FCMOVNE,8,2,st4,-,st0,-,-,-,-,64,-
+600,0,0,4,db,0,0,9,8,8,cd,86,FCMOVNE,8,2,st5,-,st0,-,-,-,-,64,-
+601,0,0,4,db,0,0,9,8,8,ce,86,FCMOVNE,8,2,st6,-,st0,-,-,-,-,64,-
+602,0,0,4,db,0,0,9,8,8,cf,86,FCMOVNE,8,2,st7,-,st0,-,-,-,-,64,-
+603,0,0,4,db,0,0,9,8,8,d0,86,FCMOVNBE,8,2,st0,-,st0,-,-,-,-,64,-
+604,0,0,4,db,0,0,9,8,8,d1,86,FCMOVNBE,8,2,st1,-,st0,-,-,-,-,64,-
+605,0,0,4,db,0,0,9,8,8,d2,86,FCMOVNBE,8,2,st2,-,st0,-,-,-,-,64,-
+606,0,0,4,db,0,0,9,8,8,d3,86,FCMOVNBE,8,2,st3,-,st0,-,-,-,-,64,-
+607,0,0,4,db,0,0,9,8,8,d4,86,FCMOVNBE,8,2,st4,-,st0,-,-,-,-,64,-
+608,0,0,4,db,0,0,9,8,8,d5,86,FCMOVNBE,8,2,st5,-,st0,-,-,-,-,64,-
+609,0,0,4,db,0,0,9,8,8,d6,86,FCMOVNBE,8,2,st6,-,st0,-,-,-,-,64,-
+610,0,0,4,db,0,0,9,8,8,d7,86,FCMOVNBE,8,2,st7,-,st0,-,-,-,-,64,-
+611,0,0,4,db,0,0,9,8,8,d8,86,FCMOVNU,8,2,st0,-,st0,-,-,-,-,64,-
+612,0,0,4,db,0,0,9,8,8,d9,86,FCMOVNU,8,2,st1,-,st0,-,-,-,-,64,-
+613,0,0,4,db,0,0,9,8,8,da,86,FCMOVNU,8,2,st2,-,st0,-,-,-,-,64,-
+614,0,0,4,db,0,0,9,8,8,db,86,FCMOVNU,8,2,st3,-,st0,-,-,-,-,64,-
+615,0,0,4,db,0,0,9,8,8,dc,86,FCMOVNU,8,2,st4,-,st0,-,-,-,-,64,-
+616,0,0,4,db,0,0,9,8,8,dd,86,FCMOVNU,8,2,st5,-,st0,-,-,-,-,64,-
+617,0,0,4,db,0,0,9,8,8,de,86,FCMOVNU,8,2,st6,-,st0,-,-,-,-,64,-
+618,0,0,4,db,0,0,9,8,8,df,86,FCMOVNU,8,2,st7,-,st0,-,-,-,-,64,-
+619,0,0,4,db,0,0,9,8,8,e2,86,FNCLEX,8,0,-,-,-,-,-,-,-,64,-
+620,0,0,4,db,0,0,9,8,8,e3,86,FNINIT,8,0,-,-,-,-,-,-,-,64,-
+621,0,0,4,db,0,0,9,8,8,e8,86,FUCOMI,8,2,st0,-,st0,-,-,-,-,64,-
+622,0,0,4,db,0,0,9,8,8,e9,86,FUCOMI,8,2,st1,-,st0,-,-,-,-,64,-
+623,0,0,4,db,0,0,9,8,8,ea,86,FUCOMI,8,2,st2,-,st0,-,-,-,-,64,-
+624,0,0,4,db,0,0,9,8,8,eb,86,FUCOMI,8,2,st3,-,st0,-,-,-,-,64,-
+625,0,0,4,db,0,0,9,8,8,ec,86,FUCOMI,8,2,st4,-,st0,-,-,-,-,64,-
+626,0,0,4,db,0,0,9,8,8,ed,86,FUCOMI,8,2,st5,-,st0,-,-,-,-,64,-
+627,0,0,4,db,0,0,9,8,8,ee,86,FUCOMI,8,2,st6,-,st0,-,-,-,-,64,-
+628,0,0,4,db,0,0,9,8,8,ef,86,FUCOMI,8,2,st7,-,st0,-,-,-,-,64,-
+629,0,0,4,db,0,0,9,8,8,f0,86,FCOMI,8,2,st0,-,st0,-,-,-,-,64,-
+630,0,0,4,db,0,0,9,8,8,f1,86,FCOMI,8,2,st1,-,st0,-,-,-,-,64,-
+631,0,0,4,db,0,0,9,8,8,f2,86,FCOMI,8,2,st2,-,st0,-,-,-,-,64,-
+632,0,0,4,db,0,0,9,8,8,f3,86,FCOMI,8,2,st3,-,st0,-,-,-,-,64,-
+633,0,0,4,db,0,0,9,8,8,f4,86,FCOMI,8,2,st4,-,st0,-,-,-,-,64,-
+634,0,0,4,db,0,0,9,8,8,f5,86,FCOMI,8,2,st5,-,st0,-,-,-,-,64,-
+635,0,0,4,db,0,0,9,8,8,f6,86,FCOMI,8,2,st6,-,st0,-,-,-,-,64,-
+636,0,0,4,db,0,0,9,8,8,f7,86,FCOMI,8,2,st7,-,st0,-,-,-,-,64,-
+637,0,0,1,dc,0,0,10,8,8,0,86,**FPU=dc**,5,0,-,-,-,-,-,-,-,64,-
+638,0,0,4,dc,0,0,8,0,8,0,86,FADD,7,1,M,q,-,-,-,-,-,64,-
+639,0,0,4,dc,0,0,8,1,8,0,86,FMUL,7,1,M,q,-,-,-,-,-,64,-
+640,0,0,4,dc,0,0,8,2,8,0,86,FCOM,7,1,M,q,-,-,-,-,-,64,-
+641,0,0,4,dc,0,0,8,3,8,0,86,FCOMP,7,1,M,q,-,-,-,-,-,64,-
+642,0,0,4,dc,0,0,8,4,8,0,86,FSUB,7,1,M,q,-,-,-,-,-,64,-
+643,0,0,4,dc,0,0,8,5,8,0,86,FSUBR,7,1,M,q,-,-,-,-,-,64,-
+644,0,0,4,dc,0,0,8,6,8,0,86,FDIV,7,1,M,q,-,-,-,-,-,64,-
+645,0,0,4,dc,0,0,8,7,8,0,86,FDIVR,7,1,M,q,-,-,-,-,-,64,-
+646,0,0,4,dc,0,0,9,8,8,c0,86,FADD,8,2,st0,-,st0,-,-,-,-,64,-
+647,0,0,4,dc,0,0,9,8,8,c1,86,FADD,8,2,st1,-,st0,-,-,-,-,64,-
+648,0,0,4,dc,0,0,9,8,8,c2,86,FADD,8,2,st2,-,st0,-,-,-,-,64,-
+649,0,0,4,dc,0,0,9,8,8,c3,86,FADD,8,2,st3,-,st0,-,-,-,-,64,-
+650,0,0,4,dc,0,0,9,8,8,c4,86,FADD,8,2,st4,-,st0,-,-,-,-,64,-
+651,0,0,4,dc,0,0,9,8,8,c5,86,FADD,8,2,st5,-,st0,-,-,-,-,64,-
+652,0,0,4,dc,0,0,9,8,8,c6,86,FADD,8,2,st6,-,st0,-,-,-,-,64,-
+653,0,0,4,dc,0,0,9,8,8,c7,86,FADD,8,2,st7,-,st0,-,-,-,-,64,-
+654,0,0,4,dc,0,0,9,8,8,c8,86,FMUL,8,2,st0,-,st0,-,-,-,-,64,-
+655,0,0,4,dc,0,0,9,8,8,c9,86,FMUL,8,2,st1,-,st0,-,-,-,-,64,-
+656,0,0,4,dc,0,0,9,8,8,ca,86,FMUL,8,2,st2,-,st0,-,-,-,-,64,-
+657,0,0,4,dc,0,0,9,8,8,cb,86,FMUL,8,2,st3,-,st0,-,-,-,-,64,-
+658,0,0,4,dc,0,0,9,8,8,cc,86,FMUL,8,2,st4,-,st0,-,-,-,-,64,-
+659,0,0,4,dc,0,0,9,8,8,cd,86,FMUL,8,2,st5,-,st0,-,-,-,-,64,-
+660,0,0,4,dc,0,0,9,8,8,ce,86,FMUL,8,2,st6,-,st0,-,-,-,-,64,-
+661,0,0,4,dc,0,0,9,8,8,cf,86,FMUL,8,2,st7,-,st0,-,-,-,-,64,-
+662,0,0,4,dc,0,0,9,8,8,e0,86,FSUBR,8,2,st0,-,st0,-,-,-,-,64,-
+663,0,0,4,dc,0,0,9,8,8,e1,86,FSUBR,8,2,st1,-,st0,-,-,-,-,64,-
+664,0,0,4,dc,0,0,9,8,8,e2,86,FSUBR,8,2,st2,-,st0,-,-,-,-,64,-
+665,0,0,4,dc,0,0,9,8,8,e3,86,FSUBR,8,2,st3,-,st0,-,-,-,-,64,-
+666,0,0,4,dc,0,0,9,8,8,e4,86,FSUBR,8,2,st4,-,st0,-,-,-,-,64,-
+667,0,0,4,dc,0,0,9,8,8,e5,86,FSUBR,8,2,st5,-,st0,-,-,-,-,64,-
+668,0,0,4,dc,0,0,9,8,8,e6,86,FSUBR,8,2,st6,-,st0,-,-,-,-,64,-
+669,0,0,4,dc,0,0,9,8,8,e7,86,FSUBR,8,2,st7,-,st0,-,-,-,-,64,-
+670,0,0,4,dc,0,0,9,8,8,e8,86,FSUB,8,2,st0,-,st0,-,-,-,-,64,-
+671,0,0,4,dc,0,0,9,8,8,e9,86,FSUB,8,2,st1,-,st0,-,-,-,-,64,-
+672,0,0,4,dc,0,0,9,8,8,ea,86,FSUB,8,2,st2,-,st0,-,-,-,-,64,-
+673,0,0,4,dc,0,0,9,8,8,eb,86,FSUB,8,2,st3,-,st0,-,-,-,-,64,-
+674,0,0,4,dc,0,0,9,8,8,ec,86,FSUB,8,2,st4,-,st0,-,-,-,-,64,-
+675,0,0,4,dc,0,0,9,8,8,ed,86,FSUB,8,2,st5,-,st0,-,-,-,-,64,-
+676,0,0,4,dc,0,0,9,8,8,ee,86,FSUB,8,2,st6,-,st0,-,-,-,-,64,-
+677,0,0,4,dc,0,0,9,8,8,ef,86,FSUB,8,2,st7,-,st0,-,-,-,-,64,-
+678,0,0,4,dc,0,0,9,8,8,f0,86,FDIVR,8,2,st0,-,st0,-,-,-,-,64,-
+679,0,0,4,dc,0,0,9,8,8,f1,86,FDIVR,8,2,st1,-,st0,-,-,-,-,64,-
+680,0,0,4,dc,0,0,9,8,8,f2,86,FDIVR,8,2,st2,-,st0,-,-,-,-,64,-
+681,0,0,4,dc,0,0,9,8,8,f3,86,FDIVR,8,2,st3,-,st0,-,-,-,-,64,-
+682,0,0,4,dc,0,0,9,8,8,f4,86,FDIVR,8,2,st4,-,st0,-,-,-,-,64,-
+683,0,0,4,dc,0,0,9,8,8,f5,86,FDIVR,8,2,st5,-,st0,-,-,-,-,64,-
+684,0,0,4,dc,0,0,9,8,8,f6,86,FDIVR,8,2,st6,-,st0,-,-,-,-,64,-
+685,0,0,4,dc,0,0,9,8,8,f7,86,FDIVR,8,2,st7,-,st0,-,-,-,-,64,-
+686,0,0,4,dc,0,0,9,8,8,f8,86,FDIV,8,2,st0,-,st0,-,-,-,-,64,-
+687,0,0,4,dc,0,0,9,8,8,f9,86,FDIV,8,2,st1,-,st0,-,-,-,-,64,-
+688,0,0,4,dc,0,0,9,8,8,fa,86,FDIV,8,2,st2,-,st0,-,-,-,-,64,-
+689,0,0,4,dc,0,0,9,8,8,fb,86,FDIV,8,2,st3,-,st0,-,-,-,-,64,-
+690,0,0,4,dc,0,0,9,8,8,fc,86,FDIV,8,2,st4,-,st0,-,-,-,-,64,-
+691,0,0,4,dc,0,0,9,8,8,fd,86,FDIV,8,2,st5,-,st0,-,-,-,-,64,-
+692,0,0,4,dc,0,0,9,8,8,fe,86,FDIV,8,2,st6,-,st0,-,-,-,-,64,-
+693,0,0,4,dc,0,0,9,8,8,ff,86,FDIV,8,2,st7,-,st0,-,-,-,-,64,-
+694,0,0,1,dd,0,0,10,8,8,0,86,**FPU=dd**,5,0,-,-,-,-,-,-,-,64,-
+695,0,0,4,dd,0,0,8,0,8,0,86,FLD,7,1,M,q,-,-,-,-,-,64,-
+696,0,0,4,dd,0,0,8,1,8,0,86,FISTTP,7,1,M,q,-,-,-,-,-,64,-
+697,0,0,4,dd,0,0,8,2,8,0,86,FST,7,1,M,q,-,-,-,-,-,64,-
+698,0,0,4,dd,0,0,8,3,8,0,86,FSTP,7,1,M,q,-,-,-,-,-,64,-
+699,0,0,4,dd,0,0,8,4,8,0,86,FRSTOR,7,1,M,h,-,-,-,-,-,64,-
+700,0,0,4,dd,0,0,15,5,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+701,0,0,4,dd,0,0,8,6,8,0,86,FSAVE,7,1,M,h,-,-,-,-,-,64,-
+702,0,0,4,dd,0,0,8,6,8,0,86,FNSAVE,7,1,M,h,-,-,-,-,*,64,-
+703,0,0,4,dd,0,0,8,7,8,0,86,FSTSW,7,1,M,w,-,-,-,-,-,64,-
+704,0,0,4,dd,0,0,8,7,8,0,86,FNSTSW,7,1,M,w,-,-,-,-,*,64,-
+705,0,0,4,dd,0,0,9,8,8,c0,86,FFREE,8,1,st0,-,-,-,-,-,-,64,-
+706,0,0,4,dd,0,0,9,8,8,c1,86,FFREE,8,1,st1,-,-,-,-,-,-,64,-
+707,0,0,4,dd,0,0,9,8,8,c2,86,FFREE,8,1,st2,-,-,-,-,-,-,64,-
+708,0,0,4,dd,0,0,9,8,8,c3,86,FFREE,8,1,st3,-,-,-,-,-,-,64,-
+709,0,0,4,dd,0,0,9,8,8,c4,86,FFREE,8,1,st4,-,-,-,-,-,-,64,-
+710,0,0,4,dd,0,0,9,8,8,c5,86,FFREE,8,1,st5,-,-,-,-,-,-,64,-
+711,0,0,4,dd,0,0,9,8,8,c6,86,FFREE,8,1,st6,-,-,-,-,-,-,64,-
+712,0,0,4,dd,0,0,9,8,8,c7,86,FFREE,8,1,st7,-,-,-,-,-,-,64,-
+713,0,0,4,dd,0,0,9,8,8,d0,86,FST,8,1,st0,-,-,-,-,-,-,64,-
+714,0,0,4,dd,0,0,9,8,8,d1,86,FST,8,1,st1,-,-,-,-,-,-,64,-
+715,0,0,4,dd,0,0,9,8,8,d2,86,FST,8,1,st2,-,-,-,-,-,-,64,-
+716,0,0,4,dd,0,0,9,8,8,d3,86,FST,8,1,st3,-,-,-,-,-,-,64,-
+717,0,0,4,dd,0,0,9,8,8,d4,86,FST,8,1,st4,-,-,-,-,-,-,64,-
+718,0,0,4,dd,0,0,9,8,8,d5,86,FST,8,1,st5,-,-,-,-,-,-,64,-
+719,0,0,4,dd,0,0,9,8,8,d6,86,FST,8,1,st6,-,-,-,-,-,-,64,-
+720,0,0,4,dd,0,0,9,8,8,d7,86,FST,8,1,st7,-,-,-,-,-,-,64,-
+721,0,0,4,dd,0,0,9,8,8,d8,86,FSTP,8,1,st0,-,-,-,-,-,-,64,-
+722,0,0,4,dd,0,0,9,8,8,d9,86,FSTP,8,1,st1,-,-,-,-,-,-,64,-
+723,0,0,4,dd,0,0,9,8,8,da,86,FSTP,8,1,st2,-,-,-,-,-,-,64,-
+724,0,0,4,dd,0,0,9,8,8,db,86,FSTP,8,1,st3,-,-,-,-,-,-,64,-
+725,0,0,4,dd,0,0,9,8,8,dc,86,FSTP,8,1,st4,-,-,-,-,-,-,64,-
+726,0,0,4,dd,0,0,9,8,8,dd,86,FSTP,8,1,st5,-,-,-,-,-,-,64,-
+727,0,0,4,dd,0,0,9,8,8,de,86,FSTP,8,1,st6,-,-,-,-,-,-,64,-
+728,0,0,4,dd,0,0,9,8,8,df,86,FSTP,8,1,st7,-,-,-,-,-,-,64,-
+729,0,0,4,dd,0,0,9,8,8,e0,86,FUCOM,8,2,st0,-,st0,-,-,-,-,64,-
+730,0,0,4,dd,0,0,9,8,8,e1,86,FUCOM,8,2,st1,-,st0,-,-,-,-,64,-
+731,0,0,4,dd,0,0,9,8,8,e2,86,FUCOM,8,2,st2,-,st0,-,-,-,-,64,-
+732,0,0,4,dd,0,0,9,8,8,e3,86,FUCOM,8,2,st3,-,st0,-,-,-,-,64,-
+733,0,0,4,dd,0,0,9,8,8,e4,86,FUCOM,8,2,st4,-,st0,-,-,-,-,64,-
+734,0,0,4,dd,0,0,9,8,8,e5,86,FUCOM,8,2,st5,-,st0,-,-,-,-,64,-
+735,0,0,4,dd,0,0,9,8,8,e6,86,FUCOM,8,2,st6,-,st0,-,-,-,-,64,-
+736,0,0,4,dd,0,0,9,8,8,e7,86,FUCOM,8,2,st7,-,st0,-,-,-,-,64,-
+737,0,0,4,dd,0,0,9,8,8,e8,86,FUCOMPP,8,1,st0,-,-,-,-,-,-,64,-
+738,0,0,4,dd,0,0,9,8,8,e9,86,FUCOMPP,8,1,st1,-,-,-,-,-,-,64,-
+739,0,0,4,dd,0,0,9,8,8,ea,86,FUCOMPP,8,1,st2,-,-,-,-,-,-,64,-
+740,0,0,4,dd,0,0,9,8,8,eb,86,FUCOMPP,8,1,st3,-,-,-,-,-,-,64,-
+741,0,0,4,dd,0,0,9,8,8,ec,86,FUCOMPP,8,1,st4,-,-,-,-,-,-,64,-
+742,0,0,4,dd,0,0,9,8,8,ed,86,FUCOMPP,8,1,st5,-,-,-,-,-,-,64,-
+743,0,0,4,dd,0,0,9,8,8,ee,86,FUCOMPP,8,1,st6,-,-,-,-,-,-,64,-
+744,0,0,4,dd,0,0,9,8,8,ef,86,FUCOMPP,8,1,st7,-,-,-,-,-,-,64,-
+745,0,0,1,de,0,0,10,8,8,0,86,**FPU=de**,5,0,-,-,-,-,-,-,-,64,-
+746,0,0,4,de,0,0,8,0,8,0,86,FIADD,7,1,M,w,-,-,-,-,-,64,-
+747,0,0,4,de,0,0,8,1,8,0,86,FIMUL,7,1,M,w,-,-,-,-,-,64,-
+748,0,0,4,de,0,0,8,2,8,0,86,FICOM,7,1,M,w,-,-,-,-,-,64,-
+749,0,0,4,de,0,0,8,3,8,0,86,FICOMP,7,1,M,w,-,-,-,-,-,64,-
+750,0,0,4,de,0,0,8,4,8,0,86,FISUB,7,1,M,w,-,-,-,-,-,64,-
+751,0,0,4,de,0,0,8,5,8,0,86,FISUBR,7,1,M,w,-,-,-,-,-,64,-
+752,0,0,4,de,0,0,8,6,8,0,86,FIDIV,7,1,M,w,-,-,-,-,-,64,-
+753,0,0,4,de,0,0,8,7,8,0,86,FIDIVR,7,1,M,w,-,-,-,-,-,64,-
+754,0,0,4,de,0,0,9,8,8,c0,86,FADDP,8,2,st0,-,st0,-,-,-,-,64,-
+755,0,0,4,de,0,0,9,8,8,c1,86,FADDP,8,2,st1,-,st0,-,-,-,-,64,-
+756,0,0,4,de,0,0,9,8,8,c2,86,FADDP,8,2,st2,-,st0,-,-,-,-,64,-
+757,0,0,4,de,0,0,9,8,8,c3,86,FADDP,8,2,st3,-,st0,-,-,-,-,64,-
+758,0,0,4,de,0,0,9,8,8,c4,86,FADDP,8,2,st4,-,st0,-,-,-,-,64,-
+759,0,0,4,de,0,0,9,8,8,c5,86,FADDP,8,2,st5,-,st0,-,-,-,-,64,-
+760,0,0,4,de,0,0,9,8,8,c6,86,FADDP,8,2,st6,-,st0,-,-,-,-,64,-
+761,0,0,4,de,0,0,9,8,8,c7,86,FADDP,8,2,st7,-,st0,-,-,-,-,64,-
+762,0,0,4,de,0,0,9,8,8,c8,86,FMULP,8,2,st0,-,st0,-,-,-,-,64,-
+763,0,0,4,de,0,0,9,8,8,c9,86,FMULP,8,2,st1,-,st0,-,-,-,-,64,-
+764,0,0,4,de,0,0,9,8,8,ca,86,FMULP,8,2,st2,-,st0,-,-,-,-,64,-
+765,0,0,4,de,0,0,9,8,8,cb,86,FMULP,8,2,st3,-,st0,-,-,-,-,64,-
+766,0,0,4,de,0,0,9,8,8,cc,86,FMULP,8,2,st4,-,st0,-,-,-,-,64,-
+767,0,0,4,de,0,0,9,8,8,cd,86,FMULP,8,2,st5,-,st0,-,-,-,-,64,-
+768,0,0,4,de,0,0,9,8,8,ce,86,FMULP,8,2,st6,-,st0,-,-,-,-,64,-
+769,0,0,4,de,0,0,9,8,8,cf,86,FMULP,8,2,st7,-,st0,-,-,-,-,64,-
+770,0,0,4,de,0,0,9,8,8,d9,86,FCOMPP,8,0,-,-,-,-,-,-,-,64,-
+771,0,0,4,de,0,0,9,8,8,e0,86,FSUBRP,8,2,st0,-,st0,-,-,-,-,64,-
+772,0,0,4,de,0,0,9,8,8,e1,86,FSUBRP,8,2,st1,-,st0,-,-,-,-,64,-
+773,0,0,4,de,0,0,9,8,8,e2,86,FSUBRP,8,2,st2,-,st0,-,-,-,-,64,-
+774,0,0,4,de,0,0,9,8,8,e3,86,FSUBRP,8,2,st3,-,st0,-,-,-,-,64,-
+775,0,0,4,de,0,0,9,8,8,e4,86,FSUBRP,8,2,st4,-,st0,-,-,-,-,64,-
+776,0,0,4,de,0,0,9,8,8,e5,86,FSUBRP,8,2,st5,-,st0,-,-,-,-,64,-
+777,0,0,4,de,0,0,9,8,8,e6,86,FSUBRP,8,2,st6,-,st0,-,-,-,-,64,-
+778,0,0,4,de,0,0,9,8,8,e7,86,FSUBRP,8,2,st7,-,st0,-,-,-,-,64,-
+779,0,0,4,de,0,0,9,8,8,e8,86,FSUBP,8,2,st0,-,st0,-,-,-,-,64,-
+780,0,0,4,de,0,0,9,8,8,e9,86,FSUBP,8,2,st1,-,st0,-,-,-,-,64,-
+781,0,0,4,de,0,0,9,8,8,ea,86,FSUBP,8,2,st2,-,st0,-,-,-,-,64,-
+782,0,0,4,de,0,0,9,8,8,eb,86,FSUBP,8,2,st3,-,st0,-,-,-,-,64,-
+783,0,0,4,de,0,0,9,8,8,ec,86,FSUBP,8,2,st4,-,st0,-,-,-,-,64,-
+784,0,0,4,de,0,0,9,8,8,ed,86,FSUBP,8,2,st5,-,st0,-,-,-,-,64,-
+785,0,0,4,de,0,0,9,8,8,ee,86,FSUBP,8,2,st6,-,st0,-,-,-,-,64,-
+786,0,0,4,de,0,0,9,8,8,ef,86,FSUBP,8,2,st7,-,st0,-,-,-,-,64,-
+787,0,0,4,de,0,0,9,8,8,f0,86,FDIVRP,8,2,st0,-,st0,-,-,-,-,64,-
+788,0,0,4,de,0,0,9,8,8,f1,86,FDIVRP,8,2,st1,-,st0,-,-,-,-,64,-
+789,0,0,4,de,0,0,9,8,8,f2,86,FDIVRP,8,2,st2,-,st0,-,-,-,-,64,-
+790,0,0,4,de,0,0,9,8,8,f3,86,FDIVRP,8,2,st3,-,st0,-,-,-,-,64,-
+791,0,0,4,de,0,0,9,8,8,f4,86,FDIVRP,8,2,st4,-,st0,-,-,-,-,64,-
+792,0,0,4,de,0,0,9,8,8,f5,86,FDIVRP,8,2,st5,-,st0,-,-,-,-,64,-
+793,0,0,4,de,0,0,9,8,8,f6,86,FDIVRP,8,2,st6,-,st0,-,-,-,-,64,-
+794,0,0,4,de,0,0,9,8,8,f7,86,FDIVRP,8,2,st7,-,st0,-,-,-,-,64,-
+795,0,0,4,de,0,0,9,8,8,f8,86,FDIVP,8,2,st0,-,st0,-,-,-,-,64,-
+796,0,0,4,de,0,0,9,8,8,f9,86,FDIVP,8,2,st1,-,st0,-,-,-,-,64,-
+797,0,0,4,de,0,0,9,8,8,fa,86,FDIVP,8,2,st2,-,st0,-,-,-,-,64,-
+798,0,0,4,de,0,0,9,8,8,fb,86,FDIVP,8,2,st3,-,st0,-,-,-,-,64,-
+799,0,0,4,de,0,0,9,8,8,fc,86,FDIVP,8,2,st4,-,st0,-,-,-,-,64,-
+800,0,0,4,de,0,0,9,8,8,fd,86,FDIVP,8,2,st5,-,st0,-,-,-,-,64,-
+801,0,0,4,de,0,0,9,8,8,fe,86,FDIVP,8,2,st6,-,st0,-,-,-,-,64,-
+802,0,0,4,de,0,0,9,8,8,ff,86,FDIVP,8,2,st7,-,st0,-,-,-,-,64,-
+803,0,0,1,df,0,0,10,8,8,0,86,**FPU=df**,5,0,-,-,-,-,-,-,-,64,-
+804,0,0,4,df,0,0,8,0,8,0,86,FILD,7,1,M,w,-,-,-,-,-,64,-
+805,0,0,4,df,0,0,8,1,8,0,86,FISTTP,7,1,M,w,-,-,-,-,-,64,-
+806,0,0,4,df,0,0,8,2,8,0,86,FIST,7,1,M,w,-,-,-,-,-,64,-
+807,0,0,4,df,0,0,8,3,8,0,86,FISTP,7,1,M,w,-,-,-,-,-,64,-
+808,0,0,4,df,0,0,8,4,8,0,86,FBLD,7,1,M,t,-,-,-,-,-,64,-
+809,0,0,4,df,0,0,8,5,8,0,86,FILD,7,1,M,q,-,-,-,-,-,64,-
+810,0,0,4,df,0,0,8,6,8,0,86,FBSTP,7,1,M,t,-,-,-,-,-,64,-
+811,0,0,4,df,0,0,8,7,8,0,86,FISTP,7,1,M,q,-,-,-,-,-,64,-
+812,0,0,4,df,0,0,9,8,8,e0,86,FSTSW,8,1,ax,w,-,-,-,-,-,64,-
+813,0,0,4,df,0,0,9,8,8,e8,86,FUCOMIP,8,2,st0,-,st0,-,-,-,-,64,-
+814,0,0,4,df,0,0,9,8,8,e9,86,FUCOMIP,8,2,st1,-,st0,-,-,-,-,64,-
+815,0,0,4,df,0,0,9,8,8,ea,86,FUCOMIP,8,2,st2,-,st0,-,-,-,-,64,-
+816,0,0,4,df,0,0,9,8,8,eb,86,FUCOMIP,8,2,st3,-,st0,-,-,-,-,64,-
+817,0,0,4,df,0,0,9,8,8,ec,86,FUCOMIP,8,2,st4,-,st0,-,-,-,-,64,-
+818,0,0,4,df,0,0,9,8,8,ed,86,FUCOMIP,8,2,st5,-,st0,-,-,-,-,64,-
+819,0,0,4,df,0,0,9,8,8,ee,86,FUCOMIP,8,2,st6,-,st0,-,-,-,-,64,-
+820,0,0,4,df,0,0,9,8,8,ef,86,FUCOMIP,8,2,st7,-,st0,-,-,-,-,64,-
+821,0,0,4,df,0,0,9,8,8,f0,86,FCOMIP,8,2,st0,-,st0,-,-,-,-,64,-
+822,0,0,4,df,0,0,9,8,8,f1,86,FCOMIP,8,2,st1,-,st0,-,-,-,-,64,-
+823,0,0,4,df,0,0,9,8,8,f2,86,FCOMIP,8,2,st2,-,st0,-,-,-,-,64,-
+824,0,0,4,df,0,0,9,8,8,f3,86,FCOMIP,8,2,st3,-,st0,-,-,-,-,64,-
+825,0,0,4,df,0,0,9,8,8,f4,86,FCOMIP,8,2,st4,-,st0,-,-,-,-,64,-
+826,0,0,4,df,0,0,9,8,8,f5,86,FCOMIP,8,2,st5,-,st0,-,-,-,-,64,-
+827,0,0,4,df,0,0,9,8,8,f6,86,FCOMIP,8,2,st6,-,st0,-,-,-,-,64,-
+828,0,0,4,df,0,0,9,8,8,f7,86,FCOMIP,8,2,st7,-,st0,-,-,-,-,64,-
+829,0,0,1,e0,0,0,4,8,8,0,86,LOOPNE,0,1,J,b,-,-,-,-,-,64,f64
+830,0,0,1,e0,0,0,4,8,8,0,86,LOOPNZ,0,1,J,b,-,-,-,-,*,64,f64
+831,0,0,1,e1,0,0,4,8,8,0,86,LOOPE,0,1,J,b,-,-,-,-,-,64,f64
+832,0,0,1,e1,0,0,4,8,8,0,86,LOOPZ,0,1,J,b,-,-,-,-,*,64,f64
+833,0,0,1,e2,0,0,4,8,8,0,86,LOOP,0,1,J,b,-,-,-,-,-,64,f64
+834,0,0,1,e3,0,0,4,8,8,0,86,JCXZ,0,1,J,b,-,-,-,-,-,96,f64
+835,0,0,1,e3,0,0,4,8,8,0,86,JECXZ,0,1,J,b,-,-,-,-,*,96,f64
+836,0,0,1,e3,0,0,4,8,8,0,64,JRCXZ,0,1,J,b,-,-,-,-,*,96,f64
+837,0,0,1,e4,0,0,4,8,8,0,86,IN,0,2,al,b,I,b,-,-,-,64,-
+838,0,0,1,e5,0,0,4,8,8,0,86,IN,0,2,eax,-,I,b,-,-,-,64,-
+839,0,0,1,e6,0,0,4,8,8,0,86,OUT,0,2,I,b,al,b,-,-,-,64,-
+840,0,0,1,e7,0,0,4,8,8,0,86,OUT,0,2,I,b,eax,-,-,-,-,64,-
+841,0,0,1,e8,0,0,4,8,8,0,86,CALL,0,1,J,z,-,-,-,-,-,64,f64
+842,0,0,1,e9,0,0,4,8,8,0,86,JMP,0,1,J,z,-,-,-,-,-,64,f64
+843,0,0,1,ea,0,0,4,8,8,0,32,JMP,0,1,A,p,-,-,-,-,-,64,-
+844,0,0,1,eb,0,0,4,8,8,0,86,JMP,0,1,J,b,-,-,-,-,-,64,f64
+845,0,0,1,ec,0,0,4,8,8,0,86,IN,0,0,al,b,dx,w,-,-,-,64,-
+846,0,0,1,ed,0,0,4,8,8,0,86,IN,0,0,eax,-,dx,w,-,-,-,64,-
+847,0,0,1,ee,0,0,4,8,8,0,86,OUT,0,0,dx,w,al,b,-,-,-,64,-
+848,0,0,1,ef,0,0,4,8,8,0,86,OUT,0,0,dx,w,eax,-,-,-,-,64,-
+849,0,0,1,f0,0,0,10,8,8,0,86,**LOCK**,1,0,-,-,-,-,-,-,-,64,-
+850,0,0,1,f1,0,0,4,8,8,0,86,INT1,0,0,-,-,-,-,-,-,-,64,-
+851,0,0,1,f2,0,0,10,8,8,0,86,**REPNE**,1,0,-,-,-,-,-,-,-,64,-
+852,0,0,1,f3,0,0,10,8,8,0,86,**REP**,1,0,-,-,-,-,-,-,-,64,-
+853,0,0,1,f3,0,0,10,8,8,0,86,**REPE**,1,0,-,-,-,-,-,-,*,64,-
+854,0,0,1,f4,0,0,4,8,8,0,86,HLT,0,0,-,-,-,-,-,-,-,64,-
+855,0,0,1,f5,0,0,4,8,8,0,86,CMC,0,0,-,-,-,-,-,-,-,64,-
+856,0,0,1,f6,0,0,6,0,8,0,86,TEST,0,2,E,b,I,b,-,-,-,64,-
+857,0,0,1,f6,0,0,6,2,8,0,86,NOT,0,1,E,b,-,-,-,-,-,64,-
+858,0,0,1,f6,0,0,6,3,8,0,86,NEG,0,1,E,b,-,-,-,-,-,64,-
+859,0,0,1,f6,0,0,6,4,8,0,86,MUL,0,2,E,b,al,b,-,-,-,64,-
+860,0,0,1,f6,0,0,6,5,8,0,86,IMUL,0,2,E,b,al,b,-,-,-,64,-
+861,0,0,1,f6,0,0,6,6,8,0,86,DIV,0,2,E,b,al,b,-,-,-,64,-
+862,0,0,1,f6,0,0,6,7,8,0,86,IDIV,0,2,E,b,al,b,-,-,-,64,-
+863,0,0,1,f7,0,0,6,0,8,0,86,TEST,0,2,E,v,I,z,-,-,-,64,-
+864,0,0,1,f7,0,0,6,2,8,0,86,NOT,0,1,E,v,-,-,-,-,-,64,-
+865,0,0,1,f7,0,0,6,3,8,0,86,NEG,0,1,E,v,-,-,-,-,-,64,-
+866,0,0,1,f7,0,0,6,4,8,0,86,MUL,0,2,E,v,rax,-,-,-,-,64,-
+867,0,0,1,f7,0,0,6,5,8,0,86,IMUL,0,2,E,v,rax,-,-,-,-,64,-
+868,0,0,1,f7,0,0,6,6,8,0,86,DIV,0,2,E,v,rax,-,-,-,-,64,-
+869,0,0,1,f7,0,0,6,7,8,0,86,IDIV,0,2,E,v,rax,-,-,-,-,64,-
+870,0,0,1,f8,0,0,4,8,8,0,86,CLC,0,0,-,-,-,-,-,-,-,64,-
+871,0,0,1,f9,0,0,4,8,8,0,86,STC,0,0,-,-,-,-,-,-,-,64,-
+872,0,0,1,fa,0,0,4,8,8,0,86,CLI,0,0,-,-,-,-,-,-,-,64,-
+873,0,0,1,fb,0,0,4,8,8,0,86,STI,0,0,-,-,-,-,-,-,-,64,-
+874,0,0,1,fc,0,0,4,8,8,0,86,CLD,0,0,-,-,-,-,-,-,-,64,-
+875,0,0,1,fd,0,0,4,8,8,0,86,STD,0,0,-,-,-,-,-,-,-,64,-
+876,0,0,1,fe,0,0,6,0,8,0,86,INC,0,1,E,b,-,-,-,-,-,96,-
+877,0,0,1,fe,0,0,6,1,8,0,86,DEC,0,1,E,b,-,-,-,-,-,96,-
+878,0,0,1,ff,0,0,6,0,8,0,86,INC,0,1,E,v,-,-,-,-,-,64,-
+879,0,0,1,ff,0,0,6,1,8,0,86,DEC,0,1,E,v,-,-,-,-,-,64,-
+880,0,0,1,ff,0,0,6,2,8,0,86,CALLN,0,1,E,v,-,-,-,-,-,64,-
+881,0,0,1,ff,0,0,6,3,8,0,86,CALLF,0,1,E,p,-,-,-,-,-,64,-
+882,0,0,1,ff,0,0,6,4,8,0,86,JMPN,0,1,E,v,-,-,-,-,-,64,-
+883,0,0,1,ff,0,0,6,5,8,0,86,JMPF,0,1,E,p,-,-,-,-,-,64,-
+884,0,0,1,ff,0,0,6,6,8,0,86,PUSH,0,1,E,v,-,-,-,-,-,64,-
+885,0,0,2,0f,0,0,6,0,8,0,86,SLDT,0,1,E,w,-,-,-,-,-,64,-
+886,0,0,2,0f,0,0,6,1,8,0,86,STR,0,1,R,v,-,-,-,-,-,64,-
+887,0,0,2,0f,0,0,6,1,8,0,86,STR,0,1,M,w,-,-,-,-,-,64,-
+888,0,0,2,0f,0,0,6,2,8,0,86,LLDT,0,1,E,w,-,-,-,-,-,64,-
+889,0,0,2,0f,0,0,6,3,8,0,86,LTR,0,1,E,w,-,-,-,-,-,64,-
+890,0,0,2,0f,0,0,6,4,8,0,86,VERR,0,1,E,w,-,-,-,-,-,64,-
+891,0,0,2,0f,0,0,6,5,8,0,86,VERW,0,1,E,w,-,-,-,-,-,64,-
+892,0,0,2,0f,1,0,7,0,8,0,86,SGDT,0,1,M,s,-,-,-,-,-,64,-
+893,0,0,2,0f,1,0,7,1,8,0,86,SIDT,0,1,M,s,-,-,-,-,-,64,-
+894,0,0,2,0f,1,0,7,2,8,0,86,LGDT,0,1,M,s,-,-,-,-,-,64,-
+895,0,0,2,0f,1,0,7,3,8,0,86,LIDT,0,1,M,s,-,-,-,-,-,64,-
+896,0,0,2,0f,1,0,6,4,8,0,86,SMSW,0,1,R,v,-,-,-,-,-,64,-
+897,0,0,2,0f,1,0,6,4,8,0,86,SMSW,0,1,M,w,-,-,-,-,-,64,-
+898,0,0,2,0f,1,0,6,6,8,0,86,LMSW,0,1,E,w,-,-,-,-,-,64,-
+899,0,0,2,0f,1,0,7,7,8,0,86,INVLPG,0,1,M,b,-,-,-,-,-,64,-
+900,0,0,2,0f,1,0,3,0,1,0,86,VMCALL,0,0,-,-,-,-,-,-,-,64,-
+901,0,0,2,0f,1,0,3,0,2,0,86,VMLAUNCH,0,0,-,-,-,-,-,-,-,64,-
+902,0,0,2,0f,1,0,3,0,3,0,86,VMRESUME,0,0,-,-,-,-,-,-,-,64,-
+903,0,0,2,0f,1,0,3,0,4,0,86,VMXOFF,0,0,-,-,-,-,-,-,-,64,-
+904,0,0,2,0f,1,0,3,1,0,0,86,MONITOR,0,3,eax,-,ecx,-,edx,-,-,64,-
+905,0,0,2,0f,1,0,3,1,1,0,86,MWAIT,0,0,eax,-,ecx,-,-,-,-,64,-
+906,0,0,2,0f,1,0,3,7,0,0,86,SWAPGS,0,0,-,-,-,-,-,-,-,64,-
+907,0,0,2,0f,2,0,5,8,8,0,86,LAR,0,2,G,v,E,w,-,-,-,64,-
+908,0,0,2,0f,3,0,5,8,8,0,86,LSL,0,2,G,v,E,w,-,-,-,64,-
+909,0,0,2,0f,4,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+910,0,0,2,0f,5,0,4,8,8,0,64,SYSCALL,0,0,-,-,-,-,-,-,-,64,-
+911,0,0,2,0f,6,0,4,8,8,0,86,CLTS,0,0,-,-,-,-,-,-,-,64,-
+912,0,0,2,0f,7,0,4,8,8,0,64,SYSRET,0,0,-,-,-,-,-,-,-,64,-
+913,0,0,2,0f,8,0,4,8,8,0,86,INVD,0,0,-,-,-,-,-,-,-,64,-
+914,0,0,2,0f,9,0,4,8,8,0,86,WBINVD,0,0,-,-,-,-,-,-,-,64,-
+915,0,0,2,0f,0a,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+916,0,0,2,0f,0b,0,4,8,8,0,86,UD2,0,0,-,-,-,-,-,-,-,64,-
+917,0,0,2,0f,0c,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+918,0,0,2,0f,0d,0,5,8,8,0,86,NOP,0,1,E,v,-,-,-,-,-,64,-
+919,0,0,2,0f,0e,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+920,0,0,2,0f,0f,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+921,f3,0,2,0f,10,0,5,8,8,0,86,MOVSS,0,2,V,ss,W,ss,-,-,-,64,-
+922,66,0,2,0f,10,0,5,8,8,0,86,MOVUPD,0,2,V,pd,W,pd,-,-,-,64,-
+923,f2,0,2,0f,10,0,5,8,8,0,86,MOVSD,0,2,V,sd,W,sd,-,-,-,64,-
+924,0,0,2,0f,10,0,5,8,8,0,86,MOVUPS,0,2,V,ps,W,ps,-,-,-,64,-
+925,f3,0,2,0f,11,0,5,8,8,0,86,MOVSS,0,2,W,ss,V,ss,-,-,-,64,-
+926,66,0,2,0f,11,0,5,8,8,0,86,MOVUPD,0,2,W,pd,V,pd,-,-,-,64,-
+927,f2,0,2,0f,11,0,5,8,8,0,86,MOVSD,0,2,W,sd,V,sd,-,-,-,64,-
+928,0,0,2,0f,11,0,5,8,8,0,86,MOVUPS,0,2,W,ps,V,ps,-,-,-,64,-
+929,66,0,2,0f,12,0,5,8,8,0,86,MOVLPD,0,2,V,q,M,q,-,-,-,64,-
+930,f2,0,2,0f,12,0,5,8,8,0,86,MOVDDUP,0,2,V,q,W,q,-,-,-,64,-
+931,f3,0,2,0f,12,0,5,8,8,0,86,MOVSLDUP,0,2,V,q,W,q,-,-,-,64,-
+932,0,0,2,0f,12,0,5,8,8,0,86,MOVLPS,0,2,V,q,M,q,-,-,-,64,-
+933,0,0,2,0f,12,0,5,8,8,0,86,MOVHLPS,0,2,V,q,U,q,-,-,-,64,-
+934,66,0,2,0f,13,0,5,8,8,0,86,MOVLPD,0,2,M,q,V,q,-,-,-,64,-
+935,0,0,2,0f,13,0,5,8,8,0,86,MOVLPS,0,2,M,q,V,q,-,-,-,64,-
+936,66,0,2,0f,14,0,5,8,8,0,86,UNPCKLPD,0,2,V,pd,W,q,-,-,-,64,-
+937,0,0,2,0f,14,0,5,8,8,0,86,UNPCKLPS,0,2,V,ps,W,q,-,-,-,64,-
+938,66,0,2,0f,15,0,5,8,8,0,86,UNPCKHPD,0,2,V,pd,W,q,-,-,-,64,-
+939,0,0,2,0f,15,0,5,8,8,0,86,UNPCKHPS,0,2,V,ps,W,q,-,-,-,64,-
+940,66,0,2,0f,16,0,5,8,8,0,86,MOVHPD,0,2,V,q,M,q,-,-,-,64,-
+941,f3,0,2,0f,16,0,5,8,8,0,86,MOVSHDUP,0,2,V,q,W,q,-,-,-,64,-
+942,0,0,2,0f,16,0,5,8,8,0,86,MOVHPS,0,2,V,q,M,q,-,-,-,64,-
+943,0,0,2,0f,16,0,5,8,8,0,86,MOVLHPS,0,2,V,q,U,q,-,-,-,64,-
+944,66,0,2,0f,17,0,5,8,8,0,86,MOVHPD,0,2,M,q,V,q,-,-,-,64,-
+945,0,0,2,0f,17,0,5,8,8,0,86,MOVHPS,0,2,M,q,V,q,-,-,-,64,-
+946,0,0,2,0f,18,0,7,0,8,0,86,PREFETCHNTA,0,0,-,-,-,-,-,-,-,64,-
+947,0,0,2,0f,18,0,7,1,8,0,86,PREFETCHT0,0,0,-,-,-,-,-,-,-,64,-
+948,0,0,2,0f,18,0,7,2,8,0,86,PREFETCHT1,0,0,-,-,-,-,-,-,-,64,-
+949,0,0,2,0f,18,0,7,3,8,0,86,PREFETCHT2,0,0,-,-,-,-,-,-,-,64,-
+950,0,0,2,0f,19,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+951,0,0,2,0f,1a,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+952,0,0,2,0f,1b,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+953,0,0,2,0f,1c,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+954,0,0,2,0f,1d,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+955,0,0,2,0f,1e,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+956,0,0,2,0f,1f,0,5,8,8,0,86,NOP,0,1,E,v,-,-,-,-,-,64,-
+957,0,0,2,0f,20,0,5,8,8,0,86,MOV,0,2,R,q,C,q,-,-,-,20,-
+958,0,0,2,0f,21,0,5,8,8,0,86,MOV,0,2,R,q,D,q,-,-,-,20,-
+959,0,0,2,0f,22,0,5,8,8,0,86,MOV,0,2,C,q,R,q,-,-,-,20,-
+960,0,0,2,0f,23,0,5,8,8,0,86,MOV,0,2,D,q,R,q,-,-,-,20,-
+961,0,0,2,0f,24,0,5,8,8,0,86,MOV,0,2,R,q,T,q,-,-,-,10,-
+962,0,0,2,0f,25,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+963,0,0,2,0f,26,0,5,8,8,0,86,MOV,0,2,T,q,R,q,-,-,-,10,-
+964,0,0,2,0f,27,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+965,66,0,2,0f,28,0,5,8,8,0,86,MOVAPD,0,2,V,pd,W,pd,-,-,-,64,-
+966,0,0,2,0f,28,0,5,8,8,0,86,MOVAPS,0,2,V,ps,W,ps,-,-,-,64,-
+967,66,0,2,0f,29,0,5,8,8,0,86,MOVAPD,0,2,W,pd,V,pd,-,-,-,64,-
+968,0,0,2,0f,29,0,5,8,8,0,86,MOVAPS,0,2,W,ps,V,ps,-,-,-,64,-
+969,f3,0,2,0f,2a,0,5,8,8,0,86,CVTSI2SS,0,2,V,ss,E,d,-,-,-,64,-
+970,f3,0,2,0f,2a,0,5,8,8,0,86,CVTSI2SS,0,2,V,ss,E,q,-,-,-,64,-
+971,66,0,2,0f,2a,0,5,8,8,0,86,CVTPI2PD,0,2,V,pd,Q,q,-,-,-,64,-
+972,f2,0,2,0f,2a,0,5,8,8,0,86,CVTSI2SD,0,2,V,sd,E,d,-,-,-,64,-
+973,f2,0,2,0f,2a,0,5,8,8,0,86,CVTSI2SD,0,2,V,sd,E,q,-,-,-,64,-
+974,0,0,2,0f,2a,0,5,8,8,0,86,CVTPI2PS,0,2,V,ps,Q,q,-,-,-,64,-
+975,66,0,2,0f,2b,0,5,8,8,0,86,MOVNTPD,0,2,M,pd,V,pd,-,-,-,64,-
+976,0,0,2,0f,2b,0,5,8,8,0,86,MOVNTPS,0,2,M,ps,V,ps,-,-,-,64,-
+977,f3,0,2,0f,2c,0,5,8,8,0,86,CVTTSS2SI,0,2,G,d,W,ss,-,-,-,64,-
+978,66,0,2,0f,2c,0,5,8,8,0,86,CVTTPD2PI,0,2,Q,dq,W,pd,-,-,-,64,-
+979,f2,0,2,0f,2c,0,5,8,8,0,86,CVTTSD2SI,0,2,G,d,W,sd,-,-,-,64,-
+980,0,0,2,0f,2c,0,5,8,8,0,86,CVTTPS2PI,0,2,Q,q,W,ps,-,-,-,64,-
+981,f3,0,2,0f,2d,0,5,8,8,0,86,CVTSS2SI,0,2,G,d,W,ss,-,-,-,64,-
+982,f3,0,2,0f,2d,0,5,8,8,0,86,CVTSS2SI,0,2,G,q,W,ss,-,-,-,64,-
+983,66,0,2,0f,2d,0,5,8,8,0,86,CVTPD2PI,0,2,Q,dq,W,pd,-,-,-,64,-
+984,f2,0,2,0f,2d,0,5,8,8,0,86,CVTSD2SI,0,2,G,d,W,sd,-,-,-,64,-
+985,f2,0,2,0f,2d,0,5,8,8,0,86,CVTSD2SI,0,2,G,q,W,sd,-,-,-,64,-
+986,0,0,2,0f,2d,0,5,8,8,0,86,CVTPS2PI,0,2,Q,q,W,ps,-,-,-,64,-
+987,66,0,2,0f,2e,0,5,8,8,0,86,UCOMISD,0,2,V,sd,W,sd,-,-,-,64,-
+988,0,0,2,0f,2e,0,5,8,8,0,86,UCOMISS,0,2,V,ss,W,ss,-,-,-,64,-
+989,66,0,2,0f,2f,0,5,8,8,0,86,COMISD,0,2,V,sd,W,sd,-,-,-,64,-
+990,0,0,2,0f,2f,0,5,8,8,0,86,COMISS,0,2,V,ps,W,ps,-,-,-,64,-
+991,0,0,2,0f,30,0,4,8,8,0,86,WRMSR,0,0,-,-,-,-,-,-,-,64,-
+992,0,0,2,0f,31,0,4,8,8,0,86,RDTSC,0,0,-,-,-,-,-,-,-,64,-
+993,0,0,2,0f,32,0,4,8,8,0,86,RDMSR,0,0,-,-,-,-,-,-,-,64,-
+994,0,0,2,0f,33,0,4,8,8,0,86,RDPMC,0,0,-,-,-,-,-,-,-,64,-
+995,0,0,2,0f,34,0,4,8,8,0,86,SYSENTER,0,0,-,-,-,-,-,-,-,64,-
+996,0,0,2,0f,35,0,4,8,8,0,86,SYSEXIT,0,0,-,-,-,-,-,-,-,64,-
+997,0,0,2,0f,36,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+998,0,0,2,0f,37,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+999,0,0,2,0f,38,0,10,8,8,0,86,++ESCAPE2++,6,0,-,-,-,-,-,-,-,64,-
+1000,0,0,2,0f,39,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1001,0,0,2,0f,3a,0,10,8,8,0,86,++ESCAPE2++,6,0,-,-,-,-,-,-,-,64,-
+1002,0,0,2,0f,3b,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1003,0,0,2,0f,3c,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1004,0,0,2,0f,3d,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1005,0,0,2,0f,3e,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1006,0,0,2,0f,3f,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1007,0,0,2,0f,40,0,5,8,8,0,86,CMOVO,0,2,G,v,E,v,-,-,-,64,-
+1008,0,0,2,0f,41,0,5,8,8,0,86,CMOVNO,0,2,G,v,E,v,-,-,-,64,-
+1009,0,0,2,0f,42,0,5,8,8,0,86,CMOVB,0,2,G,v,E,v,-,-,-,64,-
+1010,0,0,2,0f,42,0,5,8,8,0,86,CMOVC,0,2,G,v,E,v,-,-,*,64,-
+1011,0,0,2,0f,42,0,5,8,8,0,86,CMOVNAE,0,2,G,v,E,v,-,-,*,64,-
+1012,0,0,2,0f,43,0,5,8,8,0,86,CMOVAE,0,2,G,v,E,v,-,-,-,64,-
+1013,0,0,2,0f,43,0,5,8,8,0,86,CMOVNB,0,2,G,v,E,v,-,-,*,64,-
+1014,0,0,2,0f,43,0,5,8,8,0,86,CMOVNC,0,2,G,v,E,v,-,-,*,64,-
+1015,0,0,2,0f,44,0,5,8,8,0,86,CMOVE,0,2,G,v,E,v,-,-,-,64,-
+1016,0,0,2,0f,44,0,5,8,8,0,86,CMOVZ,0,2,G,v,E,v,-,-,*,64,-
+1017,0,0,2,0f,45,0,5,8,8,0,86,CMOVNE,0,2,G,v,E,v,-,-,-,64,-
+1018,0,0,2,0f,45,0,5,8,8,0,86,CMOVNZ,0,2,G,v,E,v,-,-,*,64,-
+1019,0,0,2,0f,46,0,5,8,8,0,86,CMOVBE,0,2,G,v,E,v,-,-,-,64,-
+1020,0,0,2,0f,46,0,5,8,8,0,86,CMOVNA,0,2,G,v,E,v,-,-,*,64,-
+1021,0,0,2,0f,47,0,5,8,8,0,86,CMOVA,0,2,G,v,E,v,-,-,-,64,-
+1022,0,0,2,0f,47,0,5,8,8,0,86,CMOVNBE,0,2,G,v,E,v,-,-,*,64,-
+1023,0,0,2,0f,48,0,5,8,8,0,86,CMOVS,0,2,G,v,E,v,-,-,-,64,-
+1024,0,0,2,0f,49,0,5,8,8,0,86,CMOVNS,0,2,G,v,E,v,-,-,-,64,-
+1025,0,0,2,0f,4a,0,5,8,8,0,86,CMOVP,0,2,G,v,E,v,-,-,-,64,-
+1026,0,0,2,0f,4a,0,5,8,8,0,86,CMOVPE,0,2,G,v,E,v,-,-,*,64,-
+1027,0,0,2,0f,4b,0,5,8,8,0,86,CMOVNP,0,2,G,v,E,v,-,-,-,64,-
+1028,0,0,2,0f,4b,0,5,8,8,0,86,CMOVPO,0,2,G,v,E,v,-,-,*,64,-
+1029,0,0,2,0f,4c,0,5,8,8,0,86,CMOVL,0,2,G,v,E,v,-,-,-,64,-
+1030,0,0,2,0f,4c,0,5,8,8,0,86,CMOVNGE,0,2,G,v,E,v,-,-,*,64,-
+1031,0,0,2,0f,4d,0,5,8,8,0,86,CMOVNL,0,2,G,v,E,v,-,-,-,64,-
+1032,0,0,2,0f,4d,0,5,8,8,0,86,CMOVGE,0,2,G,v,E,v,-,-,*,64,-
+1033,0,0,2,0f,4e,0,5,8,8,0,86,CMOVLE,0,2,G,v,E,v,-,-,-,64,-
+1034,0,0,2,0f,4e,0,5,8,8,0,86,CMOVNG,0,2,G,v,E,v,-,-,*,64,-
+1035,0,0,2,0f,4f,0,5,8,8,0,86,CMOVNLE,0,2,G,v,E,v,-,-,-,64,-
+1036,0,0,2,0f,4f,0,5,8,8,0,86,CMOVG,0,2,G,v,E,v,-,-,*,64,-
+1037,66,0,2,0f,50,0,5,8,8,0,86,MOVMSKPD,0,2,G,d,U,pd,-,-,-,64,-
+1038,0,0,2,0f,50,0,5,8,8,0,86,MOVMSKPS,0,2,G,d,U,ps,-,-,-,64,-
+1039,f3,0,2,0f,51,0,5,8,8,0,86,SQRTSS,0,2,V,ss,W,ss,-,-,-,64,-
+1040,66,0,2,0f,51,0,5,8,8,0,86,SQRTPD,0,2,V,pd,W,pd,-,-,-,64,-
+1041,f2,0,2,0f,51,0,5,8,8,0,86,SQRTSD,0,2,V,sd,W,sd,-,-,-,64,-
+1042,0,0,2,0f,51,0,5,8,8,0,86,SQRTPS,0,2,V,ps,W,ps,-,-,-,64,-
+1043,f3,0,2,0f,52,0,5,8,8,0,86,RSQRTSS,0,2,V,ss,W,ss,-,-,-,64,-
+1044,0,0,2,0f,52,0,5,8,8,0,86,RSQRTPS,0,2,V,ps,W,ps,-,-,-,64,-
+1045,f3,0,2,0f,53,0,5,8,8,0,86,RCPSS,0,2,V,ss,W,ss,-,-,-,64,-
+1046,0,0,2,0f,53,0,5,8,8,0,86,RCPPS,0,2,V,ps,W,ps,-,-,-,64,-
+1047,66,0,2,0f,54,0,5,8,8,0,86,ANDPD,0,2,V,pd,W,pd,-,-,-,64,-
+1048,0,0,2,0f,54,0,5,8,8,0,86,ANDPS,0,2,V,ps,W,ps,-,-,-,64,-
+1049,66,0,2,0f,55,0,5,8,8,0,86,ANDNPD,0,2,V,pd,W,pd,-,-,-,64,-
+1050,0,0,2,0f,55,0,5,8,8,0,86,ANDNPS,0,2,V,ps,W,ps,-,-,-,64,-
+1051,66,0,2,0f,56,0,5,8,8,0,86,ORPD,0,2,V,pd,W,pd,-,-,-,64,-
+1052,0,0,2,0f,56,0,5,8,8,0,86,ORPS,0,2,V,ps,W,ps,-,-,-,64,-
+1053,66,0,2,0f,57,0,5,8,8,0,86,XORPD,0,2,V,pd,W,pd,-,-,-,64,-
+1054,0,0,2,0f,57,0,5,8,8,0,86,XORPS,0,2,V,ps,W,ps,-,-,-,64,-
+1055,f3,0,2,0f,58,0,5,8,8,0,86,ADDSS,0,2,V,ss,W,ss,-,-,-,64,-
+1056,66,0,2,0f,58,0,5,8,8,0,86,ADDPD,0,2,V,pd,W,pd,-,-,-,64,-
+1057,f2,0,2,0f,58,0,5,8,8,0,86,ADDSD,0,2,V,sd,W,sd,-,-,-,64,-
+1058,0,0,2,0f,58,0,5,8,8,0,86,ADDPS,0,2,V,ps,W,ps,-,-,-,64,-
+1059,f3,0,2,0f,59,0,5,8,8,0,86,MULSS,0,2,V,ss,W,ss,-,-,-,64,-
+1060,66,0,2,0f,59,0,5,8,8,0,86,MULPD,0,2,V,pd,W,pd,-,-,-,64,-
+1061,f2,0,2,0f,59,0,5,8,8,0,86,MULSD,0,2,V,sd,W,sd,-,-,-,64,-
+1062,0,0,2,0f,59,0,5,8,8,0,86,MULPS,0,2,V,ps,W,ps,-,-,-,64,-
+1063,f3,0,2,0f,5a,0,5,8,8,0,86,CVTSS2SD,0,2,V,ss,W,ss,-,-,-,64,-
+1064,66,0,2,0f,5a,0,5,8,8,0,86,CVTPD2PS,0,2,V,ps,W,pd,-,-,-,64,-
+1065,f2,0,2,0f,5a,0,5,8,8,0,86,CVTSD2SS,0,2,V,sd,W,sd,-,-,-,64,-
+1066,0,0,2,0f,5a,0,5,8,8,0,86,CVTPS2PD,0,2,V,ps,W,ps,-,-,-,64,-
+1067,66,0,2,0f,5b,0,5,8,8,0,86,CVTPS2DQ,0,2,V,dq,W,ps,-,-,-,64,-
+1068,f3,0,2,0f,5b,0,5,8,8,0,86,CVTTPS2DQ,0,2,V,dq,W,ps,-,-,-,64,-
+1069,0,0,2,0f,5b,0,5,8,8,0,86,CVTDQ2PS,0,2,V,ps,W,dq,-,-,-,64,-
+1070,f3,0,2,0f,5c,0,5,8,8,0,86,SUBSS,0,2,V,ss,W,ss,-,-,-,64,-
+1071,66,0,2,0f,5c,0,5,8,8,0,86,SUBPD,0,2,V,pd,W,pd,-,-,-,64,-
+1072,f2,0,2,0f,5c,0,5,8,8,0,86,SUBSD,0,2,V,sd,W,sd,-,-,-,64,-
+1073,0,0,2,0f,5c,0,5,8,8,0,86,SUBPS,0,2,V,ps,W,ps,-,-,-,64,-
+1074,f3,0,2,0f,5d,0,5,8,8,0,86,MINSS,0,2,V,ss,W,ss,-,-,-,64,-
+1075,66,0,2,0f,5d,0,5,8,8,0,86,MINPD,0,2,V,pd,W,pd,-,-,-,64,-
+1076,f2,0,2,0f,5d,0,5,8,8,0,86,MINSD,0,2,V,sd,W,sd,-,-,-,64,-
+1077,0,0,2,0f,5d,0,5,8,8,0,86,MINPS,0,2,V,ps,W,ps,-,-,-,64,-
+1078,f3,0,2,0f,5e,0,5,8,8,0,86,DIVSS,0,2,V,ss,W,ss,-,-,-,64,-
+1079,66,0,2,0f,5e,0,5,8,8,0,86,DIVPD,0,2,V,pd,W,pd,-,-,-,64,-
+1080,f2,0,2,0f,5e,0,5,8,8,0,86,DIVSD,0,2,V,sd,W,sd,-,-,-,64,-
+1081,0,0,2,0f,5e,0,5,8,8,0,86,DIVPS,0,2,V,ps,W,ps,-,-,-,64,-
+1082,f3,0,2,0f,5f,0,5,8,8,0,86,MAXSS,0,2,V,ss,W,ss,-,-,-,64,-
+1083,66,0,2,0f,5f,0,5,8,8,0,86,MAXPD,0,2,V,pd,W,pd,-,-,-,64,-
+1084,f2,0,2,0f,5f,0,5,8,8,0,86,MAXSD,0,2,V,sd,W,sd,-,-,-,64,-
+1085,0,0,2,0f,5f,0,5,8,8,0,86,MAXPS,0,2,V,ps,W,ps,-,-,-,64,-
+1086,66,0,2,0f,60,0,5,8,8,0,86,PUNPCKLBW,0,2,V,dq,W,dq,-,-,-,64,-
+1087,0,0,2,0f,60,0,5,8,8,0,86,PUNPCKLBW,0,2,P,q,Q,d,-,-,-,64,-
+1088,66,0,2,0f,61,0,5,8,8,0,86,PUNPCKLWD,0,2,V,dq,W,dq,-,-,-,64,-
+1089,0,0,2,0f,61,0,5,8,8,0,86,PUNPCKLWD,0,2,P,q,Q,d,-,-,-,64,-
+1090,66,0,2,0f,62,0,5,8,8,0,86,PUNPCKLDQ,0,2,V,dq,W,dq,-,-,-,64,-
+1091,0,0,2,0f,62,0,5,8,8,0,86,PUNPCKLDQ,0,2,P,q,Q,d,-,-,-,64,-
+1092,66,0,2,0f,63,0,5,8,8,0,86,PACKSSWB,0,2,V,dq,W,dq,-,-,-,64,-
+1093,0,0,2,0f,63,0,5,8,8,0,86,PACKSSWB,0,2,P,q,Q,q,-,-,-,64,-
+1094,66,0,2,0f,64,0,5,8,8,0,86,PCMPGTB,0,2,V,dq,W,dq,-,-,-,64,-
+1095,0,0,2,0f,64,0,5,8,8,0,86,PCMPGTB,0,2,P,q,Q,q,-,-,-,64,-
+1096,66,0,2,0f,65,0,5,8,8,0,86,PCMPGTW,0,2,V,dq,W,dq,-,-,-,64,-
+1097,0,0,2,0f,65,0,5,8,8,0,86,PCMPGTW,0,2,P,q,Q,q,-,-,-,64,-
+1098,66,0,2,0f,66,0,5,8,8,0,86,PCMPGTD,0,2,V,dq,W,dq,-,-,-,64,-
+1099,0,0,2,0f,66,0,5,8,8,0,86,PCMPGTD,0,2,P,q,Q,q,-,-,-,64,-
+1100,66,0,2,0f,67,0,5,8,8,0,86,PACKUSWB,0,2,V,dq,W,dq,-,-,-,64,-
+1101,0,0,2,0f,67,0,5,8,8,0,86,PACKUSWB,0,2,P,q,Q,q,-,-,-,64,-
+1102,66,0,2,0f,68,0,5,8,8,0,86,PUNPCKHBW,0,2,V,dq,Q,dq,-,-,-,64,-
+1103,0,0,2,0f,68,0,5,8,8,0,86,PUNPCKHBW,0,2,P,q,Q,d,-,-,-,64,-
+1104,66,0,2,0f,69,0,5,8,8,0,86,PUNPCKHWD,0,2,V,dq,Q,dq,-,-,-,64,-
+1105,0,0,2,0f,69,0,5,8,8,0,86,PUNPCKHWD,0,2,P,q,Q,d,-,-,-,64,-
+1106,66,0,2,0f,6a,0,5,8,8,0,86,PUNPCKHDQ,0,2,V,dq,Q,dq,-,-,-,64,-
+1107,0,0,2,0f,6a,0,5,8,8,0,86,PUNPCKHDQ,0,2,P,q,Q,d,-,-,-,64,-
+1108,66,0,2,0f,6b,0,5,8,8,0,86,PACKSSDW,0,2,V,dq,Q,dq,-,-,-,64,-
+1109,0,0,2,0f,6b,0,5,8,8,0,86,PACKSSDW,0,2,P,q,Q,d,-,-,-,64,-
+1110,66,0,2,0f,6c,0,5,8,8,0,86,PUNPCKLQDQ,0,2,V,dq,W,dq,-,-,-,64,-
+1111,66,0,2,0f,6d,0,5,8,8,0,86,PUNPCKHQDQ,0,2,V,dq,W,dq,-,-,-,64,-
+1112,66,0,2,0f,6e,0,5,8,8,0,86,MOVD,0,2,V,dq,E,d,-,-,-,64,-
+1113,66,0,2,0f,6e,0,5,8,8,0,86,MOVQ,0,2,V,dq,E,q,-,-,-,64,-
+1114,0,0,2,0f,6e,0,5,8,8,0,86,MOVD,0,2,P,q,E,d,-,-,-,64,-
+1115,0,0,2,0f,6e,0,5,8,8,0,86,MOVQ,0,2,P,q,E,q,-,-,-,64,-
+1116,66,0,2,0f,6f,0,5,8,8,0,86,MOVDQA,0,2,V,dq,W,dq,-,-,-,64,-
+1117,f3,0,2,0f,6f,0,5,8,8,0,86,MOVDQU,0,2,V,dq,W,dq,-,-,-,64,-
+1118,0,0,2,0f,6f,0,5,8,8,0,86,MOVQ,0,2,P,q,Q,q,-,-,-,64,-
+1119,66,0,2,0f,70,0,5,8,8,0,86,PSHUFD,0,3,V,dq,W,dq,I,b,-,64,-
+1120,f3,0,2,0f,70,0,5,8,8,0,86,PSHUFHW,0,3,V,dq,W,dq,I,b,-,64,-
+1121,f2,0,2,0f,70,0,5,8,8,0,86,PSHUFLW,0,3,V,dq,W,dq,I,b,-,64,-
+1122,0,0,2,0f,70,0,5,8,8,0,86,PSHUFW,0,3,P,q,Q,q,I,b,-,64,-
+1123,66,0,2,0f,71,0,3,2,8,0,86,PSRLW,0,2,U,dq,I,b,-,-,-,64,-
+1124,66,0,2,0f,71,0,3,4,8,0,86,PSRAW,0,2,U,dq,I,b,-,-,-,64,-
+1125,66,0,2,0f,71,0,3,6,8,0,86,PSLLW,0,2,U,dq,I,b,-,-,-,64,-
+1126,0,0,2,0f,71,0,3,6,8,0,86,PSLLW,0,2,N,q,I,b,-,-,-,64,-
+1127,0,0,2,0f,71,0,3,2,8,0,86,PSRLW,0,2,N,q,I,b,-,-,-,64,-
+1128,0,0,2,0f,71,0,3,4,8,0,86,PSRAW,0,2,N,q,I,b,-,-,-,64,-
+1129,66,0,2,0f,72,0,3,2,8,0,86,PSRLD,0,2,U,dq,I,b,-,-,-,64,-
+1130,66,0,2,0f,72,0,3,4,8,0,86,PSRAD,0,2,U,dq,I,b,-,-,-,64,-
+1131,66,0,2,0f,72,0,3,6,8,0,86,PSRLLD,0,2,U,dq,I,b,-,-,-,64,-
+1132,0,0,2,0f,72,0,3,2,8,0,86,PSRLD,0,2,N,q,I,b,-,-,-,64,-
+1133,0,0,2,0f,72,0,3,4,8,0,86,PSRAD,0,2,N,q,I,b,-,-,-,64,-
+1134,0,0,2,0f,72,0,3,6,8,0,86,PSRLLD,0,2,N,q,I,b,-,-,-,64,-
+1135,66,0,2,0f,73,0,3,2,8,0,86,PSRLQ,0,2,U,dq,I,b,-,-,-,64,-
+1136,66,0,2,0f,73,0,3,3,8,0,86,PSRLDQ,0,2,U,dq,I,b,-,-,-,64,-
+1137,66,0,2,0f,73,0,3,6,8,0,86,PSLLQ,0,2,U,dq,I,b,-,-,-,64,-
+1138,66,0,2,0f,73,0,3,7,8,0,86,PSLLDQ,0,2,U,dq,I,b,-,-,-,64,-
+1139,0,0,2,0f,73,0,3,2,8,0,86,PSRLQ,0,2,N,q,I,b,-,-,-,64,-
+1140,0,0,2,0f,73,0,3,6,8,0,86,PSLLQ,0,2,N,q,I,b,-,-,-,64,-
+1141,66,0,2,0f,74,0,5,8,8,0,86,PCMPEQB,0,2,V,dq,W,dq,-,-,-,64,-
+1142,0,0,2,0f,74,0,5,8,8,0,86,PCMPEQB,0,2,P,q,Q,q,-,-,-,64,-
+1143,66,0,2,0f,75,0,5,8,8,0,86,PCMPEQW,0,2,V,dq,W,dq,-,-,-,64,-
+1144,0,0,2,0f,75,0,5,8,8,0,86,PCMPEQW,0,2,P,q,Q,q,-,-,-,64,-
+1145,66,0,2,0f,76,0,5,8,8,0,86,PCMPEQD,0,2,V,dq,W,dq,-,-,-,64,-
+1146,0,0,2,0f,76,0,5,8,8,0,86,PCMPEQD,0,2,P,q,Q,q,-,-,-,64,-
+1147,0,0,2,0f,77,0,4,8,8,0,86,EMMS,0,0,-,-,-,-,-,-,-,64,-
+1148,0,0,2,0f,78,0,5,8,8,0,86,VMREAD,0,2,E,d,G,d,-,-,-,64,-
+1149,0,0,2,0f,78,0,5,8,8,0,86,VMREAD,0,2,E,q,G,q,-,-,-,64,-
+1150,0,0,2,0f,79,0,5,8,8,0,86,VMWRITE,0,2,G,d,E,d,-,-,-,64,-
+1151,0,0,2,0f,79,0,5,8,8,0,86,VMWRITE,0,2,G,q,E,q,-,-,-,64,-
+1152,0,0,2,0f,7a,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1153,0,0,2,0f,7b,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1154,66,0,2,0f,7c,0,5,8,8,0,86,HADDPD,0,2,V,pd,W,pd,-,-,-,64,-
+1155,f2,0,2,0f,7c,0,5,8,8,0,86,HADDPS,0,2,V,ps,W,ps,-,-,-,64,-
+1156,66,0,2,0f,7d,0,5,8,8,0,86,HSUBPD,0,2,V,pd,W,pd,-,-,-,64,-
+1157,f2,0,2,0f,7d,0,5,8,8,0,86,HSUBPS,0,2,V,ps,W,ps,-,-,-,64,-
+1158,66,0,2,0f,7e,0,5,8,8,0,86,MOVD,0,2,E,d,V,d,-,-,-,64,-
+1159,66,0,2,0f,7e,0,5,8,8,0,86,MOVQ,0,2,E,q,V,dq,-,-,-,64,-
+1160,f3,0,2,0f,7e,0,5,8,8,0,86,MOVQ,0,2,V,q,W,q,-,-,-,64,-
+1161,0,0,2,0f,7e,0,5,8,8,0,86,MOVD,0,2,E,d,P,d,-,-,-,64,-
+1162,0,0,2,0f,7e,0,5,8,8,0,86,MOVQ,0,2,E,q,P,d,-,-,-,64,-
+1163,66,0,2,0f,7f,0,5,8,8,0,86,MOVDQA,0,2,W,dq,V,dq,-,-,-,64,-
+1164,f3,0,2,0f,7f,0,5,8,8,0,86,MOVDQU,0,2,W,dq,V,dq,-,-,-,64,-
+1165,0,0,2,0f,7f,0,5,8,8,0,86,MOVQ,0,2,Q,q,P,q,-,-,-,64,-
+1166,0,0,2,0f,80,0,4,8,8,0,86,JO,0,1,J,z,-,-,-,-,-,64,f64
+1167,0,0,2,0f,81,0,4,8,8,0,86,JNO,0,1,J,z,-,-,-,-,-,64,f64
+1168,0,0,2,0f,82,0,4,8,8,0,86,JB,0,1,J,z,-,-,-,-,-,64,f64
+1169,0,0,2,0f,82,0,4,8,8,0,86,JC,0,1,J,z,-,-,-,-,*,64,f64
+1170,0,0,2,0f,82,0,4,8,8,0,86,JNAE,0,1,J,z,-,-,-,-,*,64,f64
+1171,0,0,2,0f,83,0,4,8,8,0,86,JAE,0,1,J,z,-,-,-,-,-,64,f64
+1172,0,0,2,0f,83,0,4,8,8,0,86,JNB,0,1,J,z,-,-,-,-,*,64,f64
+1173,0,0,2,0f,83,0,4,8,8,0,86,JNC,0,1,J,z,-,-,-,-,*,64,f64
+1174,0,0,2,0f,84,0,4,8,8,0,86,JE,0,1,J,z,-,-,-,-,-,64,f64
+1175,0,0,2,0f,84,0,4,8,8,0,86,JZ,0,1,J,z,-,-,-,-,*,64,f64
+1176,0,0,2,0f,85,0,4,8,8,0,86,JNE,0,1,J,z,-,-,-,-,-,64,f64
+1177,0,0,2,0f,85,0,4,8,8,0,86,JNZ,0,1,J,z,-,-,-,-,*,64,f64
+1178,0,0,2,0f,86,0,4,8,8,0,86,JBE,0,1,J,z,-,-,-,-,-,64,f64
+1179,0,0,2,0f,86,0,4,8,8,0,86,JNA,0,1,J,z,-,-,-,-,*,64,f64
+1180,0,0,2,0f,87,0,4,8,8,0,86,JA,0,1,J,z,-,-,-,-,-,64,f64
+1181,0,0,2,0f,87,0,4,8,8,0,86,JNBE,0,1,J,z,-,-,-,-,*,64,f64
+1182,0,0,2,0f,88,0,4,8,8,0,86,JS,0,1,J,z,-,-,-,-,-,64,f64
+1183,0,0,2,0f,89,0,4,8,8,0,86,JNS,0,1,J,z,-,-,-,-,-,64,f64
+1184,0,0,2,0f,8a,0,4,8,8,0,86,JP,0,1,J,z,-,-,-,-,-,64,f64
+1185,0,0,2,0f,8a,0,4,8,8,0,86,JPE,0,1,J,z,-,-,-,-,*,64,f64
+1186,0,0,2,0f,8b,0,4,8,8,0,86,JNP,0,1,J,z,-,-,-,-,-,64,f64
+1187,0,0,2,0f,8b,0,4,8,8,0,86,JPO,0,1,J,z,-,-,-,-,*,64,f64
+1188,0,0,2,0f,8c,0,4,8,8,0,86,JL,0,1,J,z,-,-,-,-,-,64,f64
+1189,0,0,2,0f,8c,0,4,8,8,0,86,JNGE,0,1,J,z,-,-,-,-,*,64,f64
+1190,0,0,2,0f,8d,0,4,8,8,0,86,JNL,0,1,J,z,-,-,-,-,-,64,f64
+1191,0,0,2,0f,8d,0,4,8,8,0,86,JGE,0,1,J,z,-,-,-,-,*,64,f64
+1192,0,0,2,0f,8e,0,4,8,8,0,86,JLE,0,1,J,z,-,-,-,-,-,64,f64
+1193,0,0,2,0f,8e,0,4,8,8,0,86,JNG,0,1,J,z,-,-,-,-,*,64,f64
+1194,0,0,2,0f,8f,0,4,8,8,0,86,JNLE,0,1,J,z,-,-,-,-,-,64,f64
+1195,0,0,2,0f,8f,0,4,8,8,0,86,JG,0,1,J,z,-,-,-,-,*,64,f64
+1196,0,0,2,0f,90,0,5,0,8,0,86,SETO,0,1,E,b,-,-,-,-,-,64,-
+1197,0,0,2,0f,91,0,5,0,8,0,86,SETNO,0,1,E,b,-,-,-,-,-,64,-
+1198,0,0,2,0f,92,0,5,0,8,0,86,SETB,0,1,E,b,-,-,-,-,-,64,-
+1199,0,0,2,0f,92,0,5,0,8,0,86,SETC,0,1,E,b,-,-,-,-,*,64,-
+1200,0,0,2,0f,92,0,5,0,8,0,86,SETNAE,0,1,E,b,-,-,-,-,*,64,-
+1201,0,0,2,0f,93,0,5,0,8,0,86,SETAE,0,1,E,b,-,-,-,-,-,64,-
+1202,0,0,2,0f,93,0,5,0,8,0,86,SETNB,0,1,E,b,-,-,-,-,*,64,-
+1203,0,0,2,0f,93,0,5,0,8,0,86,SETNC,0,1,E,b,-,-,-,-,*,64,-
+1204,0,0,2,0f,94,0,5,0,8,0,86,SETE,0,1,E,b,-,-,-,-,-,64,-
+1205,0,0,2,0f,94,0,5,0,8,0,86,SETZ,0,1,E,b,-,-,-,-,*,64,-
+1206,0,0,2,0f,95,0,5,0,8,0,86,SETNE,0,1,E,b,-,-,-,-,-,64,-
+1207,0,0,2,0f,95,0,5,0,8,0,86,SETNZ,0,1,E,b,-,-,-,-,*,64,-
+1208,0,0,2,0f,96,0,5,0,8,0,86,SETBE,0,1,E,b,-,-,-,-,-,64,-
+1209,0,0,2,0f,96,0,5,0,8,0,86,SETNA,0,1,E,b,-,-,-,-,*,64,-
+1210,0,0,2,0f,97,0,5,0,8,0,86,SETA,0,1,E,b,-,-,-,-,-,64,-
+1211,0,0,2,0f,97,0,5,0,8,0,86,SETNBE,0,1,E,b,-,-,-,-,*,64,-
+1212,0,0,2,0f,98,0,5,0,8,0,86,SETS,0,1,E,b,-,-,-,-,-,64,-
+1213,0,0,2,0f,99,0,5,0,8,0,86,SETNS,0,1,E,b,-,-,-,-,-,64,-
+1214,0,0,2,0f,9a,0,5,0,8,0,86,SETP,0,1,E,b,-,-,-,-,-,64,-
+1215,0,0,2,0f,9a,0,5,0,8,0,86,SETPE,0,1,E,b,-,-,-,-,*,64,-
+1216,0,0,2,0f,9b,0,5,0,8,0,86,SETNP,0,1,E,b,-,-,-,-,-,64,-
+1217,0,0,2,0f,9b,0,5,0,8,0,86,SETPO,0,1,E,b,-,-,-,-,*,64,-
+1218,0,0,2,0f,9c,0,5,0,8,0,86,SETL,0,1,E,b,-,-,-,-,-,64,-
+1219,0,0,2,0f,9c,0,5,0,8,0,86,SETNGE,0,1,E,b,-,-,-,-,*,64,-
+1220,0,0,2,0f,9d,0,5,0,8,0,86,SETNL,0,1,E,b,-,-,-,-,-,64,-
+1221,0,0,2,0f,9d,0,5,0,8,0,86,SETGE,0,1,E,b,-,-,-,-,*,64,-
+1222,0,0,2,0f,9e,0,5,0,8,0,86,SETLE,0,1,E,b,-,-,-,-,-,64,-
+1223,0,0,2,0f,9e,0,5,0,8,0,86,SETNG,0,1,E,b,-,-,-,-,*,64,-
+1224,0,0,2,0f,9f,0,5,0,8,0,86,SETNLE,0,1,E,b,-,-,-,-,-,64,-
+1225,0,0,2,0f,9f,0,5,0,8,0,86,SETG,0,1,E,b,-,-,-,-,*,64,-
+1226,0,0,2,0f,a0,0,4,8,8,0,86,PUSH,0,1,fs,-,-,-,-,-,-,128,d64
+1227,0,0,2,0f,a1,0,4,8,8,0,86,POP,0,1,fs,-,-,-,-,-,-,64,d64
+1228,0,0,2,0f,a2,0,4,8,8,0,86,CPUID,0,0,-,-,-,-,-,-,-,64,-
+1229,0,0,2,0f,a3,0,5,8,8,0,86,BT,0,2,E,v,G,v,-,-,-,64,-
+1230,0,0,2,0f,a4,0,5,8,8,0,86,SHLD,0,3,E,v,G,v,I,b,-,64,-
+1231,0,0,2,0f,a5,0,5,8,8,0,86,SHLD,0,3,E,v,G,v,cl,-,-,64,-
+1232,0,0,2,0f,a6,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1233,0,0,2,0f,a7,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1234,0,0,2,0f,a8,0,4,8,8,0,86,PUSH,0,1,gs,-,-,-,-,-,-,128,d64
+1235,0,0,2,0f,a9,0,4,8,8,0,86,POP,0,1,gs,-,-,-,-,-,-,64,d64
+1236,0,0,2,0f,aa,0,4,8,8,0,86,RSM,0,0,-,-,-,-,-,-,-,64,-
+1237,0,0,2,0f,ab,0,5,8,8,0,86,BTS,0,2,E,v,G,v,-,-,-,64,-
+1238,0,0,2,0f,ac,0,5,8,8,0,86,SHRD,0,3,E,v,G,v,I,b,-,64,-
+1239,0,0,2,0f,ad,0,5,8,8,0,86,SHRD,0,3,E,v,G,v,cl,-,-,64,-
+1240,0,0,2,0f,ae,0,7,0,8,0,86,FXSAVE,0,0,-,-,-,-,-,-,-,64,-
+1241,0,0,2,0f,ae,0,7,1,8,0,86,FXRSTOR,0,0,-,-,-,-,-,-,-,64,-
+1242,0,0,2,0f,ae,0,7,2,8,0,86,LDMXCSR,0,0,-,-,-,-,-,-,-,64,-
+1243,0,0,2,0f,ae,0,7,3,8,0,86,STMXCSR,0,0,-,-,-,-,-,-,-,64,-
+1244,0,0,2,0f,ae,0,7,7,8,0,86,CLFLUSH,0,0,-,-,-,-,-,-,-,64,-
+1245,0,0,2,0f,ae,0,3,5,8,0,86,LFENCE,0,0,-,-,-,-,-,-,-,64,-
+1246,0,0,2,0f,ae,0,3,6,8,0,86,MFENCE,0,0,-,-,-,-,-,-,-,64,-
+1247,0,0,2,0f,ae,0,3,7,8,0,86,SFENCE,0,0,-,-,-,-,-,-,-,64,-
+1248,0,0,2,0f,af,0,5,8,8,0,86,IMUL,0,2,G,v,E,v,-,-,-,64,-
+1249,0,0,2,0f,b0,0,5,8,8,0,86,CMPXCHG,0,2,E,b,G,b,-,-,-,64,-
+1250,0,0,2,0f,b1,0,5,8,8,0,86,CMPXCHG,0,2,E,v,G,v,-,-,-,64,-
+1251,0,0,2,0f,b2,0,5,8,8,0,86,LSS,0,2,G,z,M,p,-,-,-,64,-
+1252,0,0,2,0f,b3,0,5,8,8,0,86,BTR,0,2,E,v,G,v,-,-,-,64,-
+1253,0,0,2,0f,b4,0,5,8,8,0,86,LFS,0,2,G,z,M,p,-,-,-,64,-
+1254,0,0,2,0f,b5,0,5,8,8,0,86,LGS,0,2,G,z,M,p,-,-,-,64,-
+1255,0,0,2,0f,b6,0,5,8,8,0,86,MOVZX,0,2,G,v,E,b,-,-,-,64,-
+1256,0,0,2,0f,b7,0,5,8,8,0,86,MOVZX,0,2,G,v,E,w,-,-,-,64,-
+1257,0,0,2,0f,b8,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1258,0,0,2,0f,b9,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1259,0,0,2,0f,ba,0,5,4,8,0,86,BT,0,2,E,v,I,b,-,-,-,64,-
+1260,0,0,2,0f,ba,0,5,5,8,0,86,BTS,0,2,E,v,I,b,-,-,-,64,-
+1261,0,0,2,0f,ba,0,5,6,8,0,86,BTR,0,2,E,v,I,b,-,-,-,64,-
+1262,0,0,2,0f,ba,0,5,7,8,0,86,BTC,0,2,E,v,I,b,-,-,-,64,-
+1263,0,0,2,0f,bb,0,5,8,8,0,86,BTC,0,2,E,v,G,v,-,-,-,64,-
+1264,0,0,2,0f,bc,0,5,8,8,0,86,BSF,0,2,G,v,E,v,-,-,-,64,-
+1265,0,0,2,0f,bd,0,5,8,8,0,86,BSR,0,2,G,v,E,v,-,-,-,64,-
+1266,0,0,2,0f,be,0,5,8,8,0,86,MOVSX,0,2,G,v,E,b,-,-,-,64,-
+1267,0,0,2,0f,bf,0,5,8,8,0,86,MOVSX,0,2,G,v,E,w,-,-,-,64,-
+1268,0,0,2,0f,c0,0,5,8,8,0,86,XADD,0,2,E,b,G,b,-,-,-,64,-
+1269,0,0,2,0f,c1,0,5,8,8,0,86,XADD,0,2,E,v,G,v,-,-,-,64,-
+1270,f3,0,2,0f,c2,0,5,8,8,0,86,CMPSS,0,3,V,ss,W,ss,I,b,-,64,-
+1271,66,0,2,0f,c2,0,5,8,8,0,86,CMPPD,0,3,V,pd,W,pd,I,b,-,64,-
+1272,f2,0,2,0f,c2,0,5,8,8,0,86,CMPSD,0,3,V,sd,W,sd,I,b,-,64,-
+1273,0,0,2,0f,c2,0,5,8,8,0,86,CMPPS,0,3,V,ps,W,ps,I,b,-,64,-
+1274,0,0,2,0f,c3,0,5,8,8,0,86,MOVNTI,0,2,M,d,G,d,-,-,-,64,-
+1275,0,0,2,0f,c3,0,5,8,8,0,86,MOVNTI,0,2,M,q,G,q,-,-,-,64,-
+1276,66,0,2,0f,c4,0,5,8,8,0,86,PINSRW,0,3,V,dq,E,w,I,b,-,64,-
+1277,0,0,2,0f,c4,0,5,8,8,0,86,PINSRW,0,3,P,w,E,w,I,b,-,64,-
+1278,66,0,2,0f,c5,0,5,8,8,0,86,PEXTRW,0,3,G,d,U,dq,I,b,-,64,-
+1279,0,0,2,0f,c5,0,5,8,8,0,86,PEXTRW,0,3,G,d,N,q,I,b,-,64,-
+1280,66,0,2,0f,c6,0,5,8,8,0,86,SHUFPD,0,3,V,pd,W,pd,I,b,-,64,-
+1281,0,0,2,0f,c6,0,5,8,8,0,86,SHUFPS,0,3,V,ps,W,ps,I,b,-,64,-
+1282,66,0,2,0f,c7,0,7,6,8,0,86,VMCLEAR,0,1,M,q,-,-,-,-,-,64,-
+1283,f3,0,2,0f,c7,0,7,6,8,0,86,VMXON,0,1,M,q,-,-,-,-,-,64,-
+1284,0,0,2,0f,c7,0,7,1,8,0,86,CMPXCH8B,0,1,M,q,-,-,-,-,-,64,-
+1285,0,0,2,0f,c7,0,7,1,8,0,86,CMPXCHG16B,0,1,M,dq,-,-,-,-,-,64,-
+1286,0,0,2,0f,c7,0,7,6,8,0,86,VMPTRLD,0,1,M,q,-,-,-,-,-,64,-
+1287,0,0,2,0f,c7,0,7,7,8,0,86,VMPTRST,0,1,M,q,-,-,-,-,-,64,-
+1288,0,41,2,0f,c8,0,4,8,8,0,64,BSWAP,0,1,r8,q,-,-,-,-,-,128,-
+1289,0,0,2,0f,c8,0,4,8,8,0,86,BSWAP,0,1,rax,q,-,-,-,-,-,128,-
+1290,0,41,2,0f,c9,0,4,8,8,0,64,BSWAP,0,1,r9,q,-,-,-,-,-,128,-
+1291,0,0,2,0f,c9,0,4,8,8,0,86,BSWAP,0,1,rcx,q,-,-,-,-,-,128,-
+1292,0,41,2,0f,ca,0,4,8,8,0,64,BSWAP,0,1,r10,q,-,-,-,-,-,128,-
+1293,0,0,2,0f,ca,0,4,8,8,0,86,BSWAP,0,1,rdx,q,-,-,-,-,-,128,-
+1294,0,41,2,0f,cb,0,4,8,8,0,64,BSWAP,0,1,r11,q,-,-,-,-,-,128,-
+1295,0,0,2,0f,cb,0,4,8,8,0,86,BSWAP,0,1,rbx,q,-,-,-,-,-,128,-
+1296,0,41,2,0f,cc,0,4,8,8,0,64,BSWAP,0,1,r12,q,-,-,-,-,-,128,-
+1297,0,0,2,0f,cc,0,4,8,8,0,86,BSWAP,0,1,rsp,q,-,-,-,-,-,128,-
+1298,0,41,2,0f,cd,0,4,8,8,0,64,BSWAP,0,1,r13,q,-,-,-,-,-,128,-
+1299,0,0,2,0f,cd,0,4,8,8,0,86,BSWAP,0,1,rbp,q,-,-,-,-,-,128,-
+1300,0,41,2,0f,ce,0,4,8,8,0,64,BSWAP,0,1,r14,q,-,-,-,-,-,128,-
+1301,0,0,2,0f,ce,0,4,8,8,0,86,BSWAP,0,1,rsi,q,-,-,-,-,-,128,-
+1302,0,41,2,0f,cf,0,4,8,8,0,64,BSWAP,0,1,r15,q,-,-,-,-,-,128,-
+1303,0,0,2,0f,cf,0,4,8,8,0,86,BSWAP,0,1,rdi,q,-,-,-,-,-,128,-
+1304,66,0,2,0f,d0,0,5,8,8,0,86,ADDSUBPD,0,2,V,pd,W,pd,-,-,-,64,-
+1305,f2,0,2,0f,d0,0,5,8,8,0,86,ADDSUBPS,0,2,V,ps,W,ps,-,-,-,64,-
+1306,66,0,2,0f,d1,0,5,8,8,0,86,PSRLW,0,2,V,dq,W,dq,-,-,-,64,-
+1307,0,0,2,0f,d1,0,5,8,8,0,86,PSRLW,0,2,P,q,Q,q,-,-,-,64,-
+1308,66,0,2,0f,d2,0,5,8,8,0,86,PSRLD,0,2,V,dq,W,dq,-,-,-,64,-
+1309,0,0,2,0f,d2,0,5,8,8,0,86,PSRLD,0,2,P,q,Q,q,-,-,-,64,-
+1310,66,0,2,0f,d3,0,5,8,8,0,86,PSRLQ,0,2,V,dq,W,dq,-,-,-,64,-
+1311,0,0,2,0f,d3,0,5,8,8,0,86,PSRLQ,0,2,P,q,Q,q,-,-,-,64,-
+1312,66,0,2,0f,d4,0,5,8,8,0,86,PADDQ,0,2,V,dq,W,dq,-,-,-,64,-
+1313,0,0,2,0f,d4,0,5,8,8,0,86,PADDQ,0,2,P,q,Q,q,-,-,-,64,-
+1314,66,0,2,0f,d5,0,5,8,8,0,86,PMULLW,0,2,V,dq,W,dq,-,-,-,64,-
+1315,0,0,2,0f,d5,0,5,8,8,0,86,PMULLW,0,2,P,q,Q,q,-,-,-,64,-
+1316,66,0,2,0f,d6,0,5,8,8,0,86,MOVQ,0,2,W,q,V,q,-,-,-,64,-
+1317,f3,0,2,0f,d6,0,5,8,8,0,86,MOVQ2DQ,0,2,V,dq,N,q,-,-,-,64,-
+1318,f2,0,2,0f,d6,0,5,8,8,0,86,MOVDQ2Q,0,2,P,q,U,q,-,-,-,64,-
+1319,66,0,2,0f,d7,0,5,8,8,0,86,PMOVMSKB,0,2,G,d,U,dq,-,-,-,64,-
+1320,0,0,2,0f,d7,0,5,8,8,0,86,PMOVMSKB,0,2,G,d,N,q,-,-,-,64,-
+1321,66,0,2,0f,d8,0,5,8,8,0,86,PSUBSB,0,2,V,dq,W,dq,-,-,-,64,-
+1322,0,0,2,0f,d8,0,5,8,8,0,86,PSUBSB,0,2,P,q,Q,q,-,-,-,64,-
+1323,66,0,2,0f,d9,0,5,8,8,0,86,PSUBUSW,0,2,V,dq,W,dq,-,-,-,64,-
+1324,0,0,2,0f,d9,0,5,8,8,0,86,PSUBUSW,0,2,P,q,Q,q,-,-,-,64,-
+1325,66,0,2,0f,da,0,5,8,8,0,86,PMINUB,0,2,V,dq,W,dq,-,-,-,64,-
+1326,0,0,2,0f,da,0,5,8,8,0,86,PMINUB,0,2,P,q,Q,q,-,-,-,64,-
+1327,66,0,2,0f,db,0,5,8,8,0,86,PAND,0,2,V,dq,W,dq,-,-,-,64,-
+1328,0,0,2,0f,db,0,5,8,8,0,86,PAND,0,2,P,q,Q,q,-,-,-,64,-
+1329,66,0,2,0f,dc,0,5,8,8,0,86,PADDUSB,0,2,V,dq,W,dq,-,-,-,64,-
+1330,0,0,2,0f,dc,0,5,8,8,0,86,PADDUSB,0,2,P,q,Q,q,-,-,-,64,-
+1331,66,0,2,0f,dd,0,5,8,8,0,86,PADDUSW,0,2,V,dq,W,dq,-,-,-,64,-
+1332,0,0,2,0f,dd,0,5,8,8,0,86,PADDUSW,0,2,P,q,Q,q,-,-,-,64,-
+1333,66,0,2,0f,de,0,5,8,8,0,86,PMAXUB,0,2,V,dq,W,dq,-,-,-,64,-
+1334,0,0,2,0f,de,0,5,8,8,0,86,PMAXUB,0,2,P,q,Q,q,-,-,-,64,-
+1335,66,0,2,0f,df,0,5,8,8,0,86,PANDN,0,2,V,dq,W,dq,-,-,-,64,-
+1336,0,0,2,0f,df,0,5,8,8,0,86,PANDN,0,2,P,q,Q,q,-,-,-,64,-
+1337,66,0,2,0f,e0,0,5,8,8,0,86,PAVGB,0,2,V,dq,W,dq,-,-,-,64,-
+1338,0,0,2,0f,e0,0,5,8,8,0,86,PAVGB,0,2,P,q,Q,q,-,-,-,64,-
+1339,66,0,2,0f,e1,0,5,8,8,0,86,PSRAW,0,2,V,dq,W,dq,-,-,-,64,-
+1340,0,0,2,0f,e1,0,5,8,8,0,86,PSRAW,0,2,P,q,Q,q,-,-,-,64,-
+1341,66,0,2,0f,e2,0,5,8,8,0,86,PSRAD,0,2,V,dq,W,dq,-,-,-,64,-
+1342,0,0,2,0f,e2,0,5,8,8,0,86,PSRAD,0,2,P,q,Q,q,-,-,-,64,-
+1343,66,0,2,0f,e3,0,5,8,8,0,86,PAVGW,0,2,V,dq,W,dq,-,-,-,64,-
+1344,0,0,2,0f,e3,0,5,8,8,0,86,PAVGW,0,2,P,q,Q,q,-,-,-,64,-
+1345,66,0,2,0f,e4,0,5,8,8,0,86,PMULHUW,0,2,V,dq,W,dq,-,-,-,64,-
+1346,0,0,2,0f,e4,0,5,8,8,0,86,PMULHUW,0,2,P,q,Q,q,-,-,-,64,-
+1347,66,0,2,0f,e5,0,5,8,8,0,86,PMULHW,0,2,V,dq,W,dq,-,-,-,64,-
+1348,0,0,2,0f,e5,0,5,8,8,0,86,PMULHW,0,2,P,q,Q,q,-,-,-,64,-
+1349,f2,0,2,0f,e6,0,5,8,8,0,86,CVTPD2DQ,0,2,V,dq,W,pd,-,-,-,64,-
+1350,66,0,2,0f,e6,0,5,8,8,0,86,CVTTPD2DQ,0,2,V,dq,W,pd,-,-,-,64,-
+1351,f3,0,2,0f,e6,0,5,8,8,0,86,CVTDQ2PQ,0,2,V,pd,W,dq,-,-,-,64,-
+1352,66,0,2,0f,e7,0,5,8,8,0,86,MOVNTDQ,0,2,M,dq,V,dq,-,-,-,64,-
+1353,0,0,2,0f,e7,0,5,8,8,0,86,MOVNTQ,0,2,M,q,P,q,-,-,-,64,-
+1354,66,0,2,0f,e8,0,5,8,8,0,86,PSUBSB,0,2,V,dq,W,dq,-,-,-,64,-
+1355,0,0,2,0f,e8,0,5,8,8,0,86,PSUBSB,0,2,P,q,Q,q,-,-,-,64,-
+1356,66,0,2,0f,e9,0,5,8,8,0,86,PSUBSW,0,2,V,dq,W,dq,-,-,-,64,-
+1357,0,0,2,0f,e9,0,5,8,8,0,86,PSUBSW,0,2,P,q,Q,q,-,-,-,64,-
+1358,66,0,2,0f,ea,0,5,8,8,0,86,PMINSW,0,2,V,dq,W,dq,-,-,-,64,-
+1359,0,0,2,0f,ea,0,5,8,8,0,86,PMINSW,0,2,P,q,Q,q,-,-,-,64,-
+1360,66,0,2,0f,eb,0,5,8,8,0,86,POR,0,2,V,dq,W,dq,-,-,-,64,-
+1361,0,0,2,0f,eb,0,5,8,8,0,86,POR,0,2,P,q,Q,q,-,-,-,64,-
+1362,66,0,2,0f,ec,0,5,8,8,0,86,PADDSB,0,2,V,dq,W,dq,-,-,-,64,-
+1363,0,0,2,0f,ec,0,5,8,8,0,86,PADDSB,0,2,P,q,Q,q,-,-,-,64,-
+1364,66,0,2,0f,ed,0,5,8,8,0,86,PADDSW,0,2,V,dq,W,dq,-,-,-,64,-
+1365,0,0,2,0f,ed,0,5,8,8,0,86,PADDSW,0,2,P,q,Q,q,-,-,-,64,-
+1366,66,0,2,0f,ee,0,5,8,8,0,86,PMAXSW,0,2,V,dq,W,dq,-,-,-,64,-
+1367,0,0,2,0f,ee,0,5,8,8,0,86,PMAXSW,0,2,P,q,Q,q,-,-,-,64,-
+1368,66,0,2,0f,ef,0,5,8,8,0,86,PXOR,0,2,V,dq,W,dq,-,-,-,64,-
+1369,0,0,2,0f,ef,0,5,8,8,0,86,PXOR,0,2,P,q,Q,q,-,-,-,64,-
+1370,0,0,2,0f,f0,0,5,8,8,0,86,LDDQU,0,2,V,dq,M,dq,-,-,-,64,-
+1371,66,0,2,0f,f1,0,5,8,8,0,86,PSLLW,0,2,V,dq,W,dq,-,-,-,64,-
+1372,0,0,2,0f,f1,0,5,8,8,0,86,PSLLW,0,2,P,q,Q,q,-,-,-,64,-
+1373,66,0,2,0f,f2,0,5,8,8,0,86,PSLLD,0,2,V,dq,W,dq,-,-,-,64,-
+1374,0,0,2,0f,f2,0,5,8,8,0,86,PSLLD,0,2,P,q,Q,q,-,-,-,64,-
+1375,66,0,2,0f,f3,0,5,8,8,0,86,PSLLQ,0,2,V,dq,W,dq,-,-,-,64,-
+1376,0,0,2,0f,f3,0,5,8,8,0,86,PSLLQ,0,2,P,q,Q,q,-,-,-,64,-
+1377,66,0,2,0f,f4,0,5,8,8,0,86,PMULUDQ,0,2,V,dq,W,dq,-,-,-,64,-
+1378,0,0,2,0f,f4,0,5,8,8,0,86,PMULUDQ,0,2,P,q,Q,q,-,-,-,64,-
+1379,66,0,2,0f,f5,0,5,8,8,0,86,PMADDWD,0,2,V,dq,W,dq,-,-,-,64,-
+1380,0,0,2,0f,f5,0,5,8,8,0,86,PMADDWD,0,2,P,q,Q,q,-,-,-,64,-
+1381,66,0,2,0f,f6,0,5,8,8,0,86,PSADBW,0,2,V,dq,W,dq,-,-,-,64,-
+1382,0,0,2,0f,f6,0,5,8,8,0,86,PSADBW,0,2,P,q,Q,q,-,-,-,64,-
+1383,66,0,2,0f,f7,0,5,8,8,0,86,MASKMOVDQU,0,2,V,dq,V,dq,-,-,-,64,-
+1384,0,0,2,0f,f7,0,5,8,8,0,86,MASKMOVQ,0,2,P,q,P,q,-,-,-,64,-
+1385,66,0,2,0f,f8,0,5,8,8,0,86,PSUBB,0,2,V,dq,W,dq,-,-,-,64,-
+1386,0,0,2,0f,f8,0,5,8,8,0,86,PSUBB,0,2,P,q,Q,q,-,-,-,64,-
+1387,66,0,2,0f,f9,0,5,8,8,0,86,PSUBW,0,2,V,dq,W,dq,-,-,-,64,-
+1388,0,0,2,0f,f9,0,5,8,8,0,86,PSUBW,0,2,P,q,Q,q,-,-,-,64,-
+1389,66,0,2,0f,fa,0,5,8,8,0,86,PSUBD,0,2,V,dq,W,dq,-,-,-,64,-
+1390,0,0,2,0f,fa,0,5,8,8,0,86,PSUBD,0,2,P,q,Q,q,-,-,-,64,-
+1391,66,0,2,0f,fb,0,5,8,8,0,86,PSUBQ,0,2,V,dq,W,dq,-,-,-,64,-
+1392,0,0,2,0f,fb,0,5,8,8,0,86,PSUBQ,0,2,P,q,Q,q,-,-,-,64,-
+1393,66,0,2,0f,fc,0,5,8,8,0,86,PADDB,0,2,V,dq,W,dq,-,-,-,64,-
+1394,0,0,2,0f,fc,0,5,8,8,0,86,PADDB,0,2,P,q,Q,q,-,-,-,64,-
+1395,66,0,2,0f,fd,0,5,8,8,0,86,PADDW,0,2,V,dq,W,dq,-,-,-,64,-
+1396,0,0,2,0f,fd,0,5,8,8,0,86,PADDW,0,2,P,q,Q,q,-,-,-,64,-
+1397,66,0,2,0f,fe,0,5,8,8,0,86,PADDD,0,2,V,dq,W,dq,-,-,-,64,-
+1398,0,0,2,0f,fe,0,5,8,8,0,86,PADDD,0,2,P,q,Q,q,-,-,-,64,-
+1399,0,0,2,0f,ff,0,15,8,8,0,-,-,9,0,-,-,-,-,-,-,-,64,-
+1400,66,0,3,0f,38,0,5,8,8,0,86,PSHUFB,0,2,V,dq,W,dq,-,-,-,64,-
+1401,0,0,3,0f,38,0,5,8,8,0,86,PSHUFB,0,2,P,q,Q,q,-,-,-,64,-
+1402,66,0,3,0f,38,1,5,8,8,0,86,PHADDW,0,2,V,dq,W,dq,-,-,-,64,-
+1403,0,0,3,0f,38,1,5,8,8,0,86,PHADDW,0,2,P,q,Q,q,-,-,-,64,-
+1404,66,0,3,0f,38,2,5,8,8,0,86,PHADDD,0,2,V,dq,W,dq,-,-,-,64,-
+1405,0,0,3,0f,38,2,5,8,8,0,86,PHADDD,0,2,P,q,Q,q,-,-,-,64,-
+1406,66,0,3,0f,38,3,5,8,8,0,86,PHADDSW,0,2,V,dq,W,dq,-,-,-,64,-
+1407,0,0,3,0f,38,3,5,8,8,0,86,PHADDSW,0,2,P,q,Q,q,-,-,-,64,-
+1408,66,0,3,0f,38,4,5,8,8,0,86,PMADDUBSW,0,2,V,dq,W,dq,-,-,-,64,-
+1409,0,0,3,0f,38,4,5,8,8,0,86,PMADDUBSW,0,2,P,q,Q,q,-,-,-,64,-
+1410,66,0,3,0f,38,5,5,8,8,0,86,PHSUBW,0,2,V,dq,W,dq,-,-,-,64,-
+1411,0,0,3,0f,38,5,5,8,8,0,86,PHSUBW,0,2,P,q,Q,q,-,-,-,64,-
+1412,66,0,3,0f,38,6,5,8,8,0,86,PHSUBD,0,2,V,dq,W,dq,-,-,-,64,-
+1413,0,0,3,0f,38,6,5,8,8,0,86,PHSUBD,0,2,P,q,Q,q,-,-,-,64,-
+1414,66,0,3,0f,38,7,5,8,8,0,86,PHSUBSW,0,2,V,dq,W,dq,-,-,-,64,-
+1415,0,0,3,0f,38,7,5,8,8,0,86,PHSUBSW,0,2,P,q,Q,q,-,-,-,64,-
+1416,66,0,3,0f,38,8,5,8,8,0,86,PSIGNB,0,2,V,dq,W,dq,-,-,-,64,-
+1417,0,0,3,0f,38,8,5,8,8,0,86,PSIGNB,0,2,P,q,Q,q,-,-,-,64,-
+1418,66,0,3,0f,38,9,5,8,8,0,86,PSIGNW,0,2,V,dq,W,dq,-,-,-,64,-
+1419,0,0,3,0f,38,9,5,8,8,0,86,PSIGNW,0,2,P,q,Q,q,-,-,-,64,-
+1420,66,0,3,0f,38,0a,5,8,8,0,86,PSIGND,0,2,V,dq,W,dq,-,-,-,64,-
+1421,0,0,3,0f,38,0a,5,8,8,0,86,PSIGND,0,2,P,q,Q,q,-,-,-,64,-
+1422,66,0,3,0f,38,0b,5,8,8,0,86,PMULHRSW,0,2,V,dq,W,dq,-,-,-,64,-
+1423,0,0,3,0f,38,0b,5,8,8,0,86,PMULHRSW,0,2,P,q,Q,q,-,-,-,64,-
+1424,66,0,3,0f,38,1c,5,8,8,0,86,PABSB,0,2,V,dq,W,dq,-,-,-,64,-
+1425,0,0,3,0f,38,1c,5,8,8,0,86,PABSB,0,2,P,q,Q,q,-,-,-,64,-
+1426,66,0,3,0f,38,1d,5,8,8,0,86,PABSW,0,2,V,dq,W,dq,-,-,-,64,-
+1427,0,0,3,0f,38,1d,5,8,8,0,86,PABSW,0,2,P,q,Q,q,-,-,-,64,-
+1428,66,0,3,0f,38,1e,5,8,8,0,86,PABSD,0,2,V,dq,W,dq,-,-,-,64,-
+1429,0,0,3,0f,38,1e,5,8,8,0,86,PABSD,0,2,P,q,Q,q,-,-,-,64,-
+1430,66,0,3,0f,3a,0f,5,8,8,0,86,PALIGNR,0,3,V,dq,W,dq,I,b,-,64,-
+1431,0,0,3,0f,3a,0f,5,8,8,0,86,PALIGNR,0,3,P,q,Q,q,I,b,-,64,-