Update copyright.
[deliverable/binutils-gdb.git] / opcodes / i386-gen.c
index bed1c386c43a463eb58c2451f21e2ca11ba8d672..5cd92054dbe9bfb9dce476c6949cd77ca68baea7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2007, 2008, 2009
+/* Copyright 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -43,11 +43,11 @@ typedef struct initializer
 static initializer cpu_flag_init[] =
 {
   { "CPU_UNKNOWN_FLAGS",
 static initializer cpu_flag_init[] =
 {
   { "CPU_UNKNOWN_FLAGS",
-    "unknown" },
+    "~CpuL1OM" },
   { "CPU_GENERIC32_FLAGS",
     "Cpu186|Cpu286|Cpu386" },
   { "CPU_GENERIC64_FLAGS", 
   { "CPU_GENERIC32_FLAGS",
     "Cpu186|Cpu286|Cpu386" },
   { "CPU_GENERIC64_FLAGS", 
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|CpuMMX|CpuSSE|CpuSSE2|CpuLM" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|Cpu387|Cpu687|CpuMMX|CpuSSE|CpuSSE2|CpuLM" },
   { "CPU_NONE_FLAGS",
    "0" },
   { "CPU_I186_FLAGS",
   { "CPU_NONE_FLAGS",
    "0" },
   { "CPU_I186_FLAGS",
@@ -59,33 +59,43 @@ static initializer cpu_flag_init[] =
   { "CPU_I486_FLAGS",
     "Cpu186|Cpu286|Cpu386|Cpu486" },
   { "CPU_I586_FLAGS",
   { "CPU_I486_FLAGS",
     "Cpu186|Cpu286|Cpu386|Cpu486" },
   { "CPU_I586_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu387" },
   { "CPU_I686_FLAGS",
   { "CPU_I686_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|Cpu387|Cpu687" },
   { "CPU_P2_FLAGS",
   { "CPU_P2_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuMMX" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|Cpu387|Cpu687|CpuMMX" },
   { "CPU_P3_FLAGS",
   { "CPU_P3_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuMMX|CpuSSE" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|Cpu387|Cpu687|CpuMMX|CpuSSE" },
   { "CPU_P4_FLAGS",
   { "CPU_P4_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|CpuMMX|CpuSSE|CpuSSE2" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|Cpu387|Cpu687|CpuMMX|CpuSSE|CpuSSE2" },
   { "CPU_NOCONA_FLAGS",
   { "CPU_NOCONA_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuLM" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|Cpu387|Cpu687|CpuFISTTP|CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuLM" },
   { "CPU_CORE_FLAGS",
   { "CPU_CORE_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|CpuMMX|CpuSSE|CpuSSE2|CpuSSE3" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|Cpu387|Cpu687|CpuFISTTP|CpuMMX|CpuSSE|CpuSSE2|CpuSSE3" },
   { "CPU_CORE2_FLAGS",
   { "CPU_CORE2_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuLM" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|Cpu387|Cpu687|CpuFISTTP|CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuLM" },
   { "CPU_COREI7_FLAGS",
   { "CPU_COREI7_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuRdtscp|CpuLM" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|Cpu387|Cpu687|CpuFISTTP|CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuRdtscp|CpuLM" },
   { "CPU_K6_FLAGS",
   { "CPU_K6_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuSYSCALL|CpuMMX" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuSYSCALL|Cpu387|CpuMMX" },
   { "CPU_K6_2_FLAGS",
   { "CPU_K6_2_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuSYSCALL|CpuMMX|Cpu3dnow" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuSYSCALL|Cpu387|CpuMMX|Cpu3dnow" },
   { "CPU_ATHLON_FLAGS",
   { "CPU_ATHLON_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuSYSCALL|CpuMMX|Cpu3dnow|Cpu3dnowA" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuSYSCALL|Cpu387|Cpu687|CpuMMX|Cpu3dnow|Cpu3dnowA" },
   { "CPU_K8_FLAGS",
   { "CPU_K8_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuSYSCALL|CpuRdtscp|CpuMMX|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2|CpuLM" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuSYSCALL|CpuRdtscp|Cpu387|Cpu687|CpuMMX|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2|CpuLM" },
   { "CPU_AMDFAM10_FLAGS",
   { "CPU_AMDFAM10_FLAGS",
-    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuSYSCALL|CpuRdtscp|CpuMMX|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2|CpuSSE3|CpuSSE4a|CpuABM|CpuLM" },
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuSYSCALL|CpuRdtscp|Cpu387|Cpu687|CpuFISTTP|CpuMMX|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2|CpuSSE3|CpuSSE4a|CpuABM|CpuLM" },
+  { "CPU_BDVER1_FLAGS",
+    "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuSYSCALL|CpuRdtscp|Cpu387|Cpu687|CpuFISTTP|CpuMMX|Cpu3dnow|Cpu3dnowA|CpuSSE|CpuSSE2|CpuSSE3|CpuSSE4a|CpuABM|CpuLM|CpuFMA4|CpuXOP|CpuLWP" },
+  { "CPU_8087_FLAGS",
+    "Cpu8087" },
+  { "CPU_287_FLAGS",
+    "Cpu287" },
+  { "CPU_387_FLAGS",
+    "Cpu387" },
+  { "CPU_ANY87_FLAGS",
+    "Cpu8087|Cpu287|Cpu387|Cpu687|CpuFISTTP" },
   { "CPU_CLFLUSH_FLAGS",
     "CpuClflush" },
   { "CPU_SYSCALL_FLAGS",
   { "CPU_CLFLUSH_FLAGS",
     "CpuClflush" },
   { "CPU_SYSCALL_FLAGS",
@@ -104,6 +114,8 @@ static initializer cpu_flag_init[] =
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1" },
   { "CPU_SSE4_2_FLAGS",
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2" },
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1" },
   { "CPU_SSE4_2_FLAGS",
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2" },
+  { "CPU_ANY_SSE_FLAGS",
+    "CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuSSE4a|CpuAVX" },
   { "CPU_VMX_FLAGS",
     "CpuVMX" },
   { "CPU_SMX_FLAGS",
   { "CPU_VMX_FLAGS",
     "CpuVMX" },
   { "CPU_SMX_FLAGS",
@@ -116,6 +128,12 @@ static initializer cpu_flag_init[] =
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuPCLMUL" },
   { "CPU_FMA_FLAGS",
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuAVX|CpuFMA" },
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuPCLMUL" },
   { "CPU_FMA_FLAGS",
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuAVX|CpuFMA" },
+  { "CPU_FMA4_FLAGS",
+    "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuAVX|CpuFMA4" },
+  { "CPU_XOP_FLAGS",
+    "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuSSE4a|CpuABM|CpuAVX|CpuFMA4|CpuXOP" },
+  { "CPU_LWP_FLAGS",
+    "CpuLWP" },
   { "CPU_MOVBE_FLAGS",
     "CpuMovbe" },
   { "CPU_RDTSCP_FLAGS",
   { "CPU_MOVBE_FLAGS",
     "CpuMovbe" },
   { "CPU_RDTSCP_FLAGS",
@@ -134,10 +152,12 @@ static initializer cpu_flag_init[] =
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSE4a" },
   { "CPU_ABM_FLAGS",
     "CpuABM" },
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSE4a" },
   { "CPU_ABM_FLAGS",
     "CpuABM" },
-  { "CPU_SSE5_FLAGS",
-    "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSE4a|CpuABM|CpuSSE5"},
   { "CPU_AVX_FLAGS",
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuAVX" },
   { "CPU_AVX_FLAGS",
     "CpuMMX|CpuSSE|CpuSSE2|CpuSSE3|CpuSSSE3|CpuSSE4_1|CpuSSE4_2|CpuAVX" },
+  { "CPU_ANY_AVX_FLAGS",
+    "CpuAVX" },
+  { "CPU_L1OM_FLAGS",
+    "unknown" },
 };
 
 static initializer operand_type_init[] =
 };
 
 static initializer operand_type_init[] =
@@ -234,6 +254,8 @@ static initializer operand_type_init[] =
     "Imm32|Imm32S|Imm64|Disp32" },
   { "OPERAND_TYPE_IMM32_32S_64_DISP32_64",
     "Imm32|Imm32S|Imm64|Disp32|Disp64" },
     "Imm32|Imm32S|Imm64|Disp32" },
   { "OPERAND_TYPE_IMM32_32S_64_DISP32_64",
     "Imm32|Imm32S|Imm64|Disp32|Disp64" },
+  { "OPERAND_TYPE_VEC_IMM4",
+    "Vec_Imm4" },
 };
 
 typedef struct bitfield
 };
 
 typedef struct bitfield
@@ -255,6 +277,11 @@ static bitfield cpu_flags[] =
   BITFIELD (Cpu686),
   BITFIELD (CpuClflush),
   BITFIELD (CpuSYSCALL),
   BITFIELD (Cpu686),
   BITFIELD (CpuClflush),
   BITFIELD (CpuSYSCALL),
+  BITFIELD (Cpu8087),
+  BITFIELD (Cpu287),
+  BITFIELD (Cpu387),
+  BITFIELD (Cpu687),
+  BITFIELD (CpuFISTTP),
   BITFIELD (CpuMMX),
   BITFIELD (CpuSSE),
   BITFIELD (CpuSSE2),
   BITFIELD (CpuMMX),
   BITFIELD (CpuSSE),
   BITFIELD (CpuSSE2),
@@ -263,8 +290,8 @@ static bitfield cpu_flags[] =
   BITFIELD (CpuSSE4_1),
   BITFIELD (CpuSSE4_2),
   BITFIELD (CpuAVX),
   BITFIELD (CpuSSE4_1),
   BITFIELD (CpuSSE4_2),
   BITFIELD (CpuAVX),
+  BITFIELD (CpuL1OM),
   BITFIELD (CpuSSE4a),
   BITFIELD (CpuSSE4a),
-  BITFIELD (CpuSSE5),
   BITFIELD (Cpu3dnow),
   BITFIELD (Cpu3dnowA),
   BITFIELD (CpuPadLock),
   BITFIELD (Cpu3dnow),
   BITFIELD (Cpu3dnowA),
   BITFIELD (CpuPadLock),
@@ -276,6 +303,9 @@ static bitfield cpu_flags[] =
   BITFIELD (CpuAES),
   BITFIELD (CpuPCLMUL),
   BITFIELD (CpuFMA),
   BITFIELD (CpuAES),
   BITFIELD (CpuPCLMUL),
   BITFIELD (CpuFMA),
+  BITFIELD (CpuFMA4),
+  BITFIELD (CpuXOP),
+  BITFIELD (CpuLWP),
   BITFIELD (CpuLM),
   BITFIELD (CpuMovbe),
   BITFIELD (CpuEPT),
   BITFIELD (CpuLM),
   BITFIELD (CpuMovbe),
   BITFIELD (CpuEPT),
@@ -314,10 +344,10 @@ static bitfield opcode_modifiers[] =
   BITFIELD (No_ldSuf),
   BITFIELD (FWait),
   BITFIELD (IsString),
   BITFIELD (No_ldSuf),
   BITFIELD (FWait),
   BITFIELD (IsString),
+  BITFIELD (IsLockable),
   BITFIELD (RegKludge),
   BITFIELD (FirstXmm0),
   BITFIELD (Implicit1stXmm0),
   BITFIELD (RegKludge),
   BITFIELD (FirstXmm0),
   BITFIELD (Implicit1stXmm0),
-  BITFIELD (ByteOkIntel),
   BITFIELD (ToDword),
   BITFIELD (ToQword),
   BITFIELD (AddrPrefixOp0),
   BITFIELD (ToDword),
   BITFIELD (ToQword),
   BITFIELD (AddrPrefixOp0),
@@ -326,19 +356,11 @@ static bitfield opcode_modifiers[] =
   BITFIELD (NoRex64),
   BITFIELD (Rex64),
   BITFIELD (Ugh),
   BITFIELD (NoRex64),
   BITFIELD (Rex64),
   BITFIELD (Ugh),
-  BITFIELD (Drex),
-  BITFIELD (Drexv),
-  BITFIELD (Drexc),
   BITFIELD (Vex),
   BITFIELD (Vex),
-  BITFIELD (Vex256),
-  BITFIELD (VexNDS),
-  BITFIELD (VexNDD),
-  BITFIELD (VexW0),
-  BITFIELD (VexW1),
-  BITFIELD (Vex0F),
-  BITFIELD (Vex0F38),
-  BITFIELD (Vex0F3A),
-  BITFIELD (Vex3Sources),
+  BITFIELD (VexVVVV),
+  BITFIELD (VexW),
+  BITFIELD (VexOpcode),
+  BITFIELD (VexSources),
   BITFIELD (VexImmExt),
   BITFIELD (SSE2AVX),
   BITFIELD (NoAVX),
   BITFIELD (VexImmExt),
   BITFIELD (SSE2AVX),
   BITFIELD (NoAVX),
@@ -358,13 +380,13 @@ static bitfield operand_types[] =
   BITFIELD (RegMMX),
   BITFIELD (RegXMM),
   BITFIELD (RegYMM),
   BITFIELD (RegMMX),
   BITFIELD (RegXMM),
   BITFIELD (RegYMM),
+  BITFIELD (Imm1),
   BITFIELD (Imm8),
   BITFIELD (Imm8S),
   BITFIELD (Imm16),
   BITFIELD (Imm32),
   BITFIELD (Imm32S),
   BITFIELD (Imm64),
   BITFIELD (Imm8),
   BITFIELD (Imm8S),
   BITFIELD (Imm16),
   BITFIELD (Imm32),
   BITFIELD (Imm32S),
   BITFIELD (Imm64),
-  BITFIELD (Imm1),
   BITFIELD (BaseIndex),
   BITFIELD (Disp8),
   BITFIELD (Disp16),
   BITFIELD (BaseIndex),
   BITFIELD (Disp8),
   BITFIELD (Disp16),
@@ -394,6 +416,7 @@ static bitfield operand_types[] =
   BITFIELD (Ymmword),
   BITFIELD (Unspecified),
   BITFIELD (Anysize),
   BITFIELD (Ymmword),
   BITFIELD (Unspecified),
   BITFIELD (Anysize),
+  BITFIELD (Vec_Imm4),
 #ifdef OTUnused
   BITFIELD (OTUnused),
 #endif
 #ifdef OTUnused
   BITFIELD (OTUnused),
 #endif
@@ -425,7 +448,7 @@ static void
 process_copyright (FILE *fp)
 {
   fprintf (fp, "/* This file is automatically generated by i386-gen.  Do not edit!  */\n\
 process_copyright (FILE *fp)
 {
   fprintf (fp, "/* This file is automatically generated by i386-gen.  Do not edit!  */\n\
-/* Copyright 2007, 2008, 2009\n\
+/* Copyright 2007, 2008, 2009, 2010\n\
    Free Software Foundation, Inc.\n\
 \n\
    This file is part of the GNU opcodes library.\n\
    Free Software Foundation, Inc.\n\
 \n\
    This file is part of the GNU opcodes library.\n\
@@ -500,11 +523,18 @@ next_field (char *str, char sep, char **next, char *last)
 }
 
 static void
 }
 
 static void
-set_bitfield (const char *f, bitfield *array, unsigned int size, int lineno)
+set_bitfield (const char *f, bitfield *array, int value,
+             unsigned int size, int lineno)
 {
   unsigned int i;
 
 {
   unsigned int i;
 
-  if (strcmp (f, "Mmword") == 0)
+  if (strcmp (f, "CpuFP") == 0)
+    {
+      set_bitfield("Cpu387", array, value, size, lineno);
+      set_bitfield("Cpu287", array, value, size, lineno);
+      f = "Cpu8087";
+    }
+  else if (strcmp (f, "Mmword") == 0)
     f= "Qword";
   else if (strcmp (f, "Oword") == 0)
     f= "Xmmword";
     f= "Qword";
   else if (strcmp (f, "Oword") == 0)
     f= "Xmmword";
@@ -512,10 +542,33 @@ set_bitfield (const char *f, bitfield *array, unsigned int size, int lineno)
   for (i = 0; i < size; i++)
     if (strcasecmp (array[i].name, f) == 0)
       {
   for (i = 0; i < size; i++)
     if (strcasecmp (array[i].name, f) == 0)
       {
-       array[i].value = 1;
+       array[i].value = value;
        return;
       }
 
        return;
       }
 
+  if (value)
+    {
+      const char *v = strchr (f, '=');
+
+      if (v)
+       {
+         size_t n = v - f;
+         char *end;
+
+         for (i = 0; i < size; i++)
+           if (strncasecmp (array[i].name, f, n) == 0)
+             {
+               value = strtol (v + 1, &end, 0);
+               if (*end == '\0')
+                 {
+                   array[i].value = value;
+                   return;
+                 }
+               break;
+             }
+       }
+    }
+
   if (lineno != -1)
     fail (_("%s: %d: Unknown bitfield: %s\n"), filename, lineno, f);
   else
   if (lineno != -1)
     fail (_("%s: %d: Unknown bitfield: %s\n"), filename, lineno, f);
   else
@@ -552,6 +605,7 @@ process_i386_cpu_flag (FILE *table, char *flag, int macro,
                       int lineno)
 {
   char *str, *next, *last;
                       int lineno)
 {
   char *str, *next, *last;
+  unsigned int i;
   bitfield flags [ARRAY_SIZE (cpu_flags)];
 
   /* Copy the default cpu flags.  */
   bitfield flags [ARRAY_SIZE (cpu_flags)];
 
   /* Copy the default cpu flags.  */
@@ -559,22 +613,50 @@ process_i386_cpu_flag (FILE *table, char *flag, int macro,
 
   if (strcasecmp (flag, "unknown") == 0)
     {
 
   if (strcasecmp (flag, "unknown") == 0)
     {
-      unsigned int i;
-
       /* We turn on everything except for cpu64 in case of
       /* We turn on everything except for cpu64 in case of
-        CPU_UNKNOWN_FLAGS. */
+        CPU_UNKNOWN_FLAGS.  */
+      for (i = 0; i < ARRAY_SIZE (flags); i++)
+       if (flags[i].position != Cpu64)
+         flags[i].value = 1;
+    }
+  else if (flag[0] == '~')
+    {
+      last = flag + strlen (flag);
+
+      if (flag[1] == '(')
+       {
+         last -= 1;
+         next = flag + 2;
+         if (*last != ')')
+           fail (_("%s: %d: Missing `)' in bitfield: %s\n"), filename,
+                 lineno, flag);
+         *last = '\0';
+       }
+      else
+       next = flag + 1;
+
+      /* First we turn on everything except for cpu64.  */
       for (i = 0; i < ARRAY_SIZE (flags); i++)
        if (flags[i].position != Cpu64)
          flags[i].value = 1;
       for (i = 0; i < ARRAY_SIZE (flags); i++)
        if (flags[i].position != Cpu64)
          flags[i].value = 1;
+
+      /* Turn off selective bits.  */
+      for (; next && next < last; )
+       {
+         str = next_field (next, '|', &next, last);
+         if (str)
+           set_bitfield (str, flags, 0, ARRAY_SIZE (flags), lineno);
+       }
     }
   else if (strcmp (flag, "0"))
     {
     }
   else if (strcmp (flag, "0"))
     {
+      /* Turn on selective bits.  */
       last = flag + strlen (flag);
       for (next = flag; next && next < last; )
        {
          str = next_field (next, '|', &next, last);
          if (str)
       last = flag + strlen (flag);
       for (next = flag; next && next < last; )
        {
          str = next_field (next, '|', &next, last);
          if (str)
-           set_bitfield (str, flags, ARRAY_SIZE (flags), lineno);
+           set_bitfield (str, flags, 1, ARRAY_SIZE (flags), lineno);
        }
     }
 
        }
     }
 
@@ -615,7 +697,8 @@ process_i386_opcode_modifier (FILE *table, char *mod, int lineno)
        {
          str = next_field (next, '|', &next, last);
          if (str)
        {
          str = next_field (next, '|', &next, last);
          if (str)
-           set_bitfield (str, modifiers, ARRAY_SIZE (modifiers), lineno);
+           set_bitfield (str, modifiers, 1, ARRAY_SIZE (modifiers),
+                         lineno);
        }
     }
   output_opcode_modifier (table, modifiers, ARRAY_SIZE (modifiers));
        }
     }
   output_opcode_modifier (table, modifiers, ARRAY_SIZE (modifiers));
@@ -662,7 +745,7 @@ process_i386_operand_type (FILE *table, char *op, int macro,
        {
          str = next_field (next, '|', &next, last);
          if (str)
        {
          str = next_field (next, '|', &next, last);
          if (str)
-           set_bitfield (str, types, ARRAY_SIZE (types), lineno);
+           set_bitfield (str, types, 1, ARRAY_SIZE (types), lineno);
        }
     }
   output_operand_type (table, types, ARRAY_SIZE (types), macro,
        }
     }
   output_operand_type (table, types, ARRAY_SIZE (types), macro,
@@ -822,7 +905,7 @@ process_i386_opcodes (FILE *table)
                                         xcalloc, free);
 
   fprintf (table, "\n/* i386 opcode table.  */\n\n");
                                         xcalloc, free);
 
   fprintf (table, "\n/* i386 opcode table.  */\n\n");
-  fprintf (table, "const template i386_optab[] =\n{\n");
+  fprintf (table, "const insn_template i386_optab[] =\n{\n");
 
   /* Put everything on opcode array.  */
   while (!feof (fp))
 
   /* Put everything on opcode array.  */
   while (!feof (fp))
This page took 0.030491 seconds and 4 git commands to generate.