* config/tc-ppc.c (PPC_HIGHER, PPC_HIGHEST): Fix warning.
authorAlan Modra <amodra@gmail.com>
Wed, 4 Sep 2002 13:21:18 +0000 (13:21 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 4 Sep 2002 13:21:18 +0000 (13:21 +0000)
(md_parse_option): No -a64 without BFD64.
(ppc_set_cpu): Select appropriate cpu when ppc_obj64.
(ppc_arch): Use bfd_mach_rs6k for bfd_arch_rs6000.

gas/ChangeLog
gas/config/tc-ppc.c

index 2d8c4af9d3942aac83d9087b064221f4d2f977c3..63168a4e3cdeaf29534817d0ec88b36d9bc633bc 100644 (file)
@@ -1,3 +1,10 @@
+2002-09-04  Alan Modra  <amodra@bigpond.net.au>
+
+       * config/tc-ppc.c (PPC_HIGHER, PPC_HIGHEST): Fix warning.
+       (md_parse_option): No -a64 without BFD64.
+       (ppc_set_cpu): Select appropriate cpu when ppc_obj64.
+       (ppc_arch): Use bfd_mach_rs6k for bfd_arch_rs6000.
+
 2002-09-04  Nick Clifton  <nickc@redhat.com>
 
        * config/tc-ppc.c (md_begin): Do not insert non-BookE32
index b7679f97368ed440d56e12db75ac3847171c368d..f551198cb1b2b08ab8d058581a97ec1664a3fefe 100644 (file)
@@ -68,14 +68,14 @@ static int set_target_endian = 0;
 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
 
 /* #higher(value) denotes bits 32 through 47 of the indicated value.  */
-#define PPC_HIGHER(v) (((v) >> 32) & 0xffff)
+#define PPC_HIGHER(v) (((v) >> 16 >> 16) & 0xffff)
 
 /* #highera(value) denotes bits 32 through 47 of the indicated value,
    compensating for #lo() being treated as a signed number.  */
 #define PPC_HIGHERA(v) PPC_HIGHER ((v) + 0x8000)
 
 /* #highest(value) denotes bits 48 through 63 of the indicated value.  */
-#define PPC_HIGHEST(v) (((v) >> 48) & 0xffff)
+#define PPC_HIGHEST(v) (((v) >> 24 >> 24) & 0xffff)
 
 /* #highesta(value) denotes bits 48 through 63 of the indicated value,
    compensating for #lo being treated as a signed number.  */
@@ -867,7 +867,13 @@ md_parse_option (c, arg)
       /* a64 and a32 determine whether to use XCOFF64 or XCOFF32.  */
     case 'a':
       if (strcmp (arg, "64") == 0)
-       ppc_obj64 = 1;
+       {
+#ifdef BFD64
+         ppc_obj64 = 1;
+#else
+         as_fatal (_("%s unsupported"), "-a64");
+#endif
+       }
       else if (strcmp (arg, "32") == 0)
        ppc_obj64 = 0;
       else
@@ -1100,8 +1106,10 @@ ppc_set_cpu ()
 
   if (ppc_cpu == 0)
     {
-      if (strncmp (default_os, "aix", 3) == 0
-         && default_os[3] >= '4' && default_os[3] <= '9')
+      if (ppc_obj64)
+       ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_64;
+      else if (strncmp (default_os, "aix", 3) == 0
+              && default_os[3] >= '4' && default_os[3] <= '9')
        ppc_cpu = PPC_OPCODE_COMMON | PPC_OPCODE_32;
       else if (strncmp (default_os, "aix3", 4) == 0)
        ppc_cpu = PPC_OPCODE_POWER | PPC_OPCODE_32;
@@ -1147,7 +1155,12 @@ ppc_arch ()
 unsigned long
 ppc_mach ()
 {
-  return ppc_obj64 ? bfd_mach_ppc64 : bfd_mach_ppc;
+  if (ppc_obj64)
+    return bfd_mach_ppc64;
+  else if (ppc_arch () == bfd_arch_rs6000)
+    return bfd_mach_rs6k;
+  else
+    return bfd_mach_ppc;
 }
 
 extern char*