aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-ppc.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2002-09-04 13:21:18 +0000
committerAlan Modra <amodra@gmail.com>2002-09-04 13:21:18 +0000
commit2a98c3a655468bd4fee84c0b78f248268cd0c49e (patch)
treeaffe0d81e979c7c83c53b32b4323d91f3cbf7922 /gas/config/tc-ppc.c
parent341026c1c143611e52a7bae351f7a886a8cc19a3 (diff)
downloadgdb-2a98c3a655468bd4fee84c0b78f248268cd0c49e.zip
gdb-2a98c3a655468bd4fee84c0b78f248268cd0c49e.tar.gz
gdb-2a98c3a655468bd4fee84c0b78f248268cd0c49e.tar.bz2
* 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.
Diffstat (limited to 'gas/config/tc-ppc.c')
-rw-r--r--gas/config/tc-ppc.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index b7679f9..f551198 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -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*