Correct CpuMax in i386-opc.h
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 27 May 2016 13:55:42 +0000 (06:55 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 27 May 2016 13:55:53 +0000 (06:55 -0700)
CpuMax should be CpuIntel64, not CpuNo64.  i386-gen.c is updated to
verify that CpuMax is correct.  X86 assembler is updated to properly
set cpuamd64 and cpuintel64.

gas/

PR gas/20154
* config/tc-i386.c (intel64): New.
(cpu_flags_match): Set cpuamd64 and cpuintel64.
(md_parse_option): Set intel64 instead of cpuamd64 and
cpuintel64.

opcodes/

PR gas/20154
* i386-gen.c (main): Fail if CpuMax is incorrect.
* i386-opc.h (CpuMax): Set to CpuIntel64.
* i386-tbl.h: Regenerated.

gas/ChangeLog
gas/config/tc-i386.c
opcodes/ChangeLog
opcodes/i386-gen.c
opcodes/i386-opc.h
opcodes/i386-tbl.h

index 0411e67..042b698 100644 (file)
@@ -1,5 +1,13 @@
 2016-05-27  H.J. Lu  <hongjiu.lu@intel.com>
 
+       PR gas/20154
+       * config/tc-i386.c (intel64): New.
+       (cpu_flags_match): Set cpuamd64 and cpuintel64.
+       (md_parse_option): Set intel64 instead of cpuamd64 and
+       cpuintel64.
+
+2016-05-27  H.J. Lu  <hongjiu.lu@intel.com>
+
        * config/tc-i386.c (cpu_flags_match): Don't clear cpu64 nor
        cpuno64.
 
index fb3f369..f8a3bf0 100644 (file)
@@ -535,6 +535,10 @@ static int shared = 0;
    0 if att syntax.  */
 static int intel_syntax = 0;
 
+/* 1 for Intel64 ISA,
+   0 if AMD64 ISA.  */
+static int intel64;
+
 /* 1 for intel mnemonic,
    0 if att mnemonic.  */
 static int intel_mnemonic = !SYSV386_COMPAT;
@@ -1537,6 +1541,11 @@ cpu_flags_match (const insn_template *t)
       /* This instruction is available only on some archs.  */
       i386_cpu_flags cpu = cpu_arch_flags;
 
+      /* Set cpuamd64 and cpuintel64 here since they may be changed by
+        set_cpu_arch.  */
+      cpu_arch_flags.bitfield.cpuamd64 = !intel64;
+      cpu_arch_flags.bitfield.cpuintel64 = intel64;
+
       cpu = cpu_flags_and (x, cpu);
       if (!cpu_flags_all_zero (&cpu))
        {
@@ -10107,17 +10116,11 @@ md_parse_option (int c, const char *arg)
       break;
 
     case OPTION_MAMD64:
-      cpu_arch_flags.bitfield.cpuamd64 = 1;
-      cpu_arch_flags.bitfield.cpuintel64 = 0;
-      cpu_arch_isa_flags.bitfield.cpuamd64 = 1;
-      cpu_arch_isa_flags.bitfield.cpuintel64 = 0;
+      intel64 = 0;
       break;
 
     case OPTION_MINTEL64:
-      cpu_arch_flags.bitfield.cpuamd64 = 0;
-      cpu_arch_flags.bitfield.cpuintel64 = 1;
-      cpu_arch_isa_flags.bitfield.cpuamd64 = 0;
-      cpu_arch_isa_flags.bitfield.cpuintel64 = 1;
+      intel64 = 1;
       break;
 
     default:
index 82e3143..eacd10b 100644 (file)
@@ -1,3 +1,10 @@
+2016-05-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/20154
+       * i386-gen.c (main): Fail if CpuMax is incorrect.
+       * i386-opc.h (CpuMax): Set to CpuIntel64.
+       * i386-tbl.h: Regenerated.
+
 2016-05-27  Nick Clifton  <nickc@redhat.com>
 
        PR target/20150
index b19bbe1..0afdc90 100644 (file)
@@ -1379,7 +1379,16 @@ main (int argc, char **argv)
            srcdir, xstrerror (errno));
 
   /* Check the unused bitfield in i386_cpu_flags.  */
-#ifndef CpuUnused
+#ifdef CpuUnused
+  if (cpu_flags[ARRAY_SIZE (cpu_flags) - 2].position != CpuMax)
+    fail (_("CpuMax != %d!\n"),
+         cpu_flags[ARRAY_SIZE (cpu_flags) - 2].position);
+
+#else
+  if (cpu_flags[ARRAY_SIZE (cpu_flags) - 1].position != CpuMax)
+    fail (_("CpuMax != %d!\n"),
+         cpu_flags[ARRAY_SIZE (cpu_flags) - 1].position);
+
   c = CpuNumOfBits - CpuMax - 1;
   if (c)
     fail (_("%d unused bits in i386_cpu_flags.\n"), c);
index a93c1f3..0782b1a 100644 (file)
@@ -211,7 +211,7 @@ enum
   /* Intel64 support required  */
   CpuIntel64,
   /* The last bitfield in i386_cpu_flags.  */
-  CpuMax = CpuNo64
+  CpuMax = CpuIntel64
 };
 
 #define CpuNumOfUints \
index 70e10fb..5c5a991 100644 (file)
@@ -3200,7 +3200,7 @@ const insn_template i386_optab[] =
         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, 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,
-        0, 0, 0, 0, 0, 1, 0, 0, 0, 1 } },
+        0, 0, 0, 0, 0, 1, 0, 0, 1, 0 } },
     { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
       1, 1, 0, 1, 0, 0, 1, 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,
@@ -3323,7 +3323,7 @@ const insn_template i386_optab[] =
         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, 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,
-        0, 0, 0, 0, 0, 1, 0, 0, 0, 1 } },
+        0, 0, 0, 0, 0, 1, 0, 0, 1, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
       1, 1, 1, 1, 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, 0, 0, 0,