More 64-bit support
authorRobert Pengelly <robertapengelly@hotmail.com>
Sat, 31 Jan 2026 19:01:52 +0000 (19:01 +0000)
committerRobert Pengelly <robertapengelly@hotmail.com>
Sat, 31 Jan 2026 19:01:52 +0000 (19:01 +0000)
intel.c
kwd.c

diff --git a/intel.c b/intel.c
index 19274d5c83f70e45ed7886fb3bee380fb64384ea..2ddc702f2ae0a34e2b339a11f36f3443dcbcd931 100644 (file)
--- a/intel.c
+++ b/intel.c
@@ -334,6 +334,7 @@ static struct template template_table[] = {
     { "mov", 0x0F21, NONE, 2, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0 }, { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1 } } },
     { "mov", 0x0F21, NONE, 2, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0 }, { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 } } },
     { "mov", 0x0F24, NONE, 2, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0 }, { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1 } } },
+    { "mov", 0xB8, NONE, 2, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0 }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } } },
     
     /* 64-bit only moves. */
     { "movabs", 0xA0, NONE, 2, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0 } } },
@@ -1541,6 +1542,10 @@ static struct model_entry *find_model_entry (char *name) {
 #define     EXPR_TYPE_DWORD_PTR         EXPR_TYPE_MACHINE_DEPENDENT_7
 #define     EXPR_TYPE_FWORD_PTR         EXPR_TYPE_MACHINE_DEPENDENT_8
 #define     EXPR_TYPE_QWORD_PTR         EXPR_TYPE_MACHINE_DEPENDENT_9
+#define     EXPR_TYPE_TBYTE_PTR         EXPR_TYPE_MACHINE_DEPENDENT_10
+
+#define     EXPR_TYPE_XMMWORD_PTR       EXPR_TYPE_MACHINE_DEPENDENT_11
+#define     EXPR_TYPE_OWORD_PTR         EXPR_TYPE_MACHINE_DEPENDENT_12
 
 struct modrm_byte {
 
@@ -1979,7 +1984,7 @@ static void handler_extern (char *start, char **pp) {
             
             *pp = skip_whitespace (*pp);
             
-            if (xstrcasecmp (qualifier, "byte") && xstrcasecmp (qualifier, "word") && xstrcasecmp (qualifier, "dword")) {
+            if (xstrcasecmp (qualifier, "byte") && xstrcasecmp (qualifier, "word") && xstrcasecmp (qualifier, "dword") && xstrcasecmp (qualifier, "proc")) {
             
                 free (qualifier);
                 goto error;
@@ -2095,6 +2100,14 @@ static void handler_option (char *start, char **pp) {
         
         }
         
+        if (xstrcasecmp (arg, "nokeyword") == 0 || xstrcasecmp (arg, "casemap") == 0) {
+        
+            free (arg);
+            
+            ignore_rest_of_line (pp);
+            return;
+        }
+        
         if (xstrcasecmp (arg, "segment") == 0) {
         
             caret = (*pp = skip_whitespace (*pp));
@@ -3198,6 +3211,21 @@ static int intel_parse_operand (char *start, char *operand_string) {
                 
                 break;
             
+            case EXPR_TYPE_TBYTE_PTR:
+            
+                instruction.types[instruction.operands].tbyte = 1;
+                
+                if (intel_float_suffix_translation (current_templates->name) == 1) {
+                    suffix = INTEL_SUFFIX;
+                }
+                
+                break;
+            
+            case EXPR_TYPE_OWORD_PTR:     case EXPR_TYPE_XMMWORD_PTR:
+            
+                instruction.types[instruction.operands].xmmword = 1;
+                break;
+            
             default:
             
                 break;
@@ -3740,6 +3768,9 @@ static int intel_simplify_expr (struct expr *expr) {
         case EXPR_TYPE_DWORD_PTR:
         case EXPR_TYPE_FWORD_PTR:
         case EXPR_TYPE_QWORD_PTR:
+        case EXPR_TYPE_TBYTE_PTR:
+        case EXPR_TYPE_XMMWORD_PTR:
+        case EXPR_TYPE_OWORD_PTR:
         case EXPR_TYPE_NEAR_PTR:
         case EXPR_TYPE_FAR_PTR:
         
@@ -3887,6 +3918,9 @@ static const struct intel_type intel_types[] = {
     INTEL_TYPE (DWORD, 4),
     INTEL_TYPE (FWORD, 6),
     INTEL_TYPE (QWORD, 8),
+    INTEL_TYPE (TBYTE, 8),
+    INTEL_TYPE (XMMWORD, 16),
+    INTEL_TYPE (OWORD, 16),
     
     {   "near",     EXPR_TYPE_NEAR_PTR,     { 0xFF02, 0xFF04 }  },
     {   "far",      EXPR_TYPE_FAR_PTR,      { 0xFF05, 0xFF06 }  },
diff --git a/kwd.c b/kwd.c
index 55fd3666968dacd4f58a19ec888a48dea635afe6..4303d4e3d0a0f7284cb4aa445462ee59034c299e 100644 (file)
--- a/kwd.c
+++ b/kwd.c
@@ -578,6 +578,10 @@ static void handler_word (char *start, char **pp) {
     handle_constant (start, pp, 2);
 }
 
+static void handler_qword (char *start, char **pp) {
+    handle_constant (start, pp, 8);
+}
+
 static struct pseudo_op_entry pseudo_op_table[] = {
 
     {   ".code",        &handler_text           },
@@ -601,6 +605,7 @@ static struct pseudo_op_entry data_pseudo_op_table[] = {
     {   "db",           &handler_byte           },
     {   "dd",           &handler_long           },
     {   "dw",           &handler_word           },
+    {   "dq",           &handler_qword          },
     
     {   0,              0                       }