diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 14 | ||||
-rw-r--r-- | gas/config/tc-ppc.c | 32 | ||||
-rw-r--r-- | gas/doc/Makefile.am | 1 | ||||
-rw-r--r-- | gas/doc/Makefile.in | 1 | ||||
-rw-r--r-- | gas/doc/all.texi | 1 | ||||
-rw-r--r-- | gas/doc/as.texinfo | 21 | ||||
-rw-r--r-- | gas/doc/c-ppc.texi | 95 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/booke.d | 130 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/booke.s | 120 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/ppc.exp | 1 |
11 files changed, 416 insertions, 6 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index eddda37..0a64ccd 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,17 @@ +2001-10-12 matthew green <mrg@redhat.com> + + * config/tc-ppc.c (md_parse_option): New -m7410, -m7450 and -m7455 + flags, equivalent to -m7400. New -maltivec to enable AltiVec + instructions. New -mbook64 and -mbooke/-mbooke32 flags to enable + 64-bit and 32-bit BookE support, respectively. Change -m403 and + -m405 to set PPC403 option. + (md_show_usage): Adjust for new options. + * doc/all.texi: Set PPC. + * doc/as.texinfo: Add PPC support and pull in c-ppc.texi. + * doc/c-ppc.texi: New file. + * doc/Makefile.am (CPU_DOCS): Add c-ppc.texi. + * doc/Makefile.in: Regenerate. + 2001-10-12 Nick Clifton <nickc@cambridge.redhat.com> * read.c (s_bad_endr): New function. Issues a warning message diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index ef4341f..ea8ddd6 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -887,23 +887,40 @@ md_parse_option (c, arg) Motorola PowerPC 603/604. */ else if (strcmp (arg, "ppc") == 0 || strcmp (arg, "ppc32") == 0 - || strcmp (arg, "403") == 0 - || strcmp (arg, "405") == 0 || strcmp (arg, "603") == 0 || strcmp (arg, "604") == 0) ppc_cpu = PPC_OPCODE_PPC; - else if (strcmp (arg, "7400") == 0) + /* -m403 and -m405 mean to assemble for the Motorola PowerPC 403/405. */ + else if (strcmp (arg, "403") == 0 + || strcmp (arg, "405") == 0) + ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_403; + else if (strcmp (arg, "7400") == 0 + || strcmp (arg, "7410") == 0 + || strcmp (arg, "7450") == 0 + || strcmp (arg, "7455") == 0) ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_ALTIVEC; + else if (strcmp (arg, "altivec") == 0) + ppc_cpu |= PPC_OPCODE_ALTIVEC; /* -mppc64 and -m620 mean to assemble for the 64-bit PowerPC 620. */ else if (strcmp (arg, "ppc64") == 0 || strcmp (arg, "620") == 0) { - ppc_cpu = PPC_OPCODE_PPC; + ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_64; ppc_size = PPC_OPCODE_64; } else if (strcmp (arg, "ppc64bridge") == 0) { - ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_64_BRIDGE; + ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_64_BRIDGE | PPC_OPCODE_64; + ppc_size = PPC_OPCODE_64; + } + /* -mbooke/-mbooke32 mean enable 32-bit BookE support. */ + else if (strcmp (arg, "booke") == 0 || strcmp (arg, "booke32") == 0) + ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_BOOKE; + /* -mbooke64 means enable 64-bit BookE support. */ + else if (strcmp (arg, "booke64") == 0) + { + ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_BOOKE | + PPC_OPCODE_BOOKE64 | PPC_OPCODE_64; ppc_size = PPC_OPCODE_64; } /* -mcom means assemble for the common intersection between Power @@ -1011,10 +1028,13 @@ PowerPC options:\n\ -mpwrx, -mpwr2 generate code for IBM POWER/2 (RIOS2)\n\ -mpwr generate code for IBM POWER (RIOS1)\n\ -m601 generate code for Motorola PowerPC 601\n\ --mppc, -mppc32, -m403, -m405, -m603, -m604\n\ +-mppc, -mppc32, -m603, -m604\n\ generate code for Motorola PowerPC 603/604\n\ +-m403, -m405 generate code for Motorola PowerPC 403/405\n\ -mppc64, -m620 generate code for Motorola PowerPC 620\n\ -mppc64bridge generate code for PowerPC 64, including bridge insns\n\ +-mbooke64 generate code for 64-bit Motorola BookE\n\ +-mbooke, mbooke32 generate code for 32-bit Motorola BookE\n\ -mcom generate code Power/PowerPC common instructions\n\ -many generate code for any architecture (PWR/PWRX/PPC)\n\ -mregnames Allow symbolic names for registers\n\ diff --git a/gas/doc/Makefile.am b/gas/doc/Makefile.am index abf95d4..d20c3c0 100644 --- a/gas/doc/Makefile.am +++ b/gas/doc/Makefile.am @@ -42,6 +42,7 @@ CPU_DOCS = \ c-ns32k.texi \ c-pdp11.texi \ c-pj.texi \ + c-ppc.texi \ c-sh.texi \ c-sparc.texi \ c-tic54x.texi \ diff --git a/gas/doc/Makefile.in b/gas/doc/Makefile.in index 241d3b2..f36b2a0 100644 --- a/gas/doc/Makefile.in +++ b/gas/doc/Makefile.in @@ -152,6 +152,7 @@ CPU_DOCS = \ c-ns32k.texi \ c-pdp11.texi \ c-pj.texi \ + c-ppc.texi \ c-sh.texi \ c-sparc.texi \ c-tic54x.texi \ diff --git a/gas/doc/all.texi b/gas/doc/all.texi index f2465c2..6ba731b 100644 --- a/gas/doc/all.texi +++ b/gas/doc/all.texi @@ -46,6 +46,7 @@ @set MIPS @set PDP11 @set PJ +@set PPC @set SH @set SPARC @set C54X diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo index 83f1435..e4a0fc1 100644 --- a/gas/doc/as.texinfo +++ b/gas/doc/as.texinfo @@ -45,6 +45,7 @@ @set MIPS @set PDP11 @set PJ +@set PPC @set SH @set SPARC @set C54X @@ -291,6 +292,16 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. @ifset PJ [ -mb | -me ] @end ifset +@ifset PPC + [ -mpwrx | -mpwr2 | -mpwr | -m601 | -mppc | -mppc32 | -m603 | -m604 | + -m403 | -m405 | -mppc64 | -m620 | -mppc64bridge | -mbooke | + -mbooke32 | -mbooke64 ] + [ -mcom | -many | -maltivec ] [ -memb ] + [ -mregnames | -mno-regnames ] + [ -mrelocatable | -mrelocatable-lib ] + [ -mlittle | -mlittle-endian | -mbig, -mbig-endian ] + [ -msolaris | -mno-solaris ] +@end ifset @ifset SPARC @c The order here is important. See c-sparc.texi. [ -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite @@ -1846,6 +1857,9 @@ is considered a comment and is ignored. The line comment character is @ifset PJ @samp{;} for picoJava; @end ifset +@ifset PPC +@samp{;} for Motorola PowerPC; +@end ifset @ifset SH @samp{!} for the Hitachi SH; @end ifset @@ -5560,6 +5574,9 @@ subject, see the hardware manufacturer's manual. @ifset PJ * PJ-Dependent:: picoJava Dependent Features @end ifset +@ifset PPC +* PPC-Dependent:: PowerPC Dependent Features +@end ifset @ifset SPARC * Sparc-Dependent:: SPARC Dependent Features @end ifset @@ -5687,6 +5704,10 @@ family. @include c-pj.texi @end ifset +@ifset PPC +@include c-ppc.texi +@end ifset + @ifset SH @include c-sh.texi @end ifset diff --git a/gas/doc/c-ppc.texi b/gas/doc/c-ppc.texi new file mode 100644 index 0000000..cae9e23 --- /dev/null +++ b/gas/doc/c-ppc.texi @@ -0,0 +1,95 @@ +@c Copyright 2001 +@c Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@ifset GENERIC +@page +@node PPC-Dependent +@chapter PowerPC Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter PowerPC Dependent Features +@end ifclear + +@cindex PowerPC support +@menu +* PowerPC-Opts:: Options +@end menu + +@node PowerPC-Opts +@section Options + +@cindex options for PowerPC +@cindex PowerPC options +@cindex architectures, PowerPC +@cindex PowerPC architectures +The PowerPC chip family includes several successive levels, using the same +core instruction set, but including a few additional instructions at +each level. There are exceptions to this however. For details on what +instructions each variant supports, please see the chip's architecture +reference manual. + +The following table lists all available PowerPC options. + +@table @code +@item -mpwrx | -mpwr2 +Generate code for IBM POWER/2 (RIOS2). + +@item -mpwr +Generate code for IBM POWER (RIOS1) + +@item -m601 +Generate code for Motorola PowerPC 601. + +@item -mppc, -mppc32, -m603, -m604 +Generate code for Motorola PowerPC 603/604. + +@item -m403, -m405 +Generate code for Motorola PowerPC 403/405. + +@item -mppc64, -m620 +Generate code for Motorola PowerPC 620. + +@item -mppc64bridge +Generate code for PowerPC 64, including bridge insns. + +@item -mbooke64 +Generate code for 64-bit Motorola BookE. + +@item -mbooke, mbooke32 +Generate code for 32-bit Motorola BookE. + +@item -mcom +Generate code Power/PowerPC common instructions. + +@item -many +Generate code for any architecture (PWR/PWRX/PPC). + +@item -mregnames +Allow symbolic names for registers. + +@item -mno-regnames +Do not allow symbolic names for registers. + +@item -mrelocatable +Support for GCC's -mrelocatble option. + +@item -mrelocatable-lib +Support for GCC's -mrelocatble-lib option. + +@item -memb +Set PPC_EMB bit in ELF flags. + +@item -mlittle, -mlittle-endian +Generate code for a little endian machine. + +@item -mbig, -mbig-endian +Generate code for a big endian machine. + +@item -msolaris +Generate code for Solaris. + +@item -mno-solaris +Do not generate code for Solaris. +@end table diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 7130a30..06698ef 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2001-10-12 matthew green <mrg@redhat.com> + + * gas/ppc/booke.s: New test for Motorola BookE. + * gas/ppc/booke.d: New file. + * gas/ppc/ppc.exp: Test booke.s. + 2001-10-09 Nick Clifton <nickc@cambridge.redhat.com> * sh/basic.exp: Add dsp dump test. diff --git a/gas/testsuite/gas/ppc/booke.d b/gas/testsuite/gas/ppc/booke.d new file mode 100644 index 0000000..0e5b400 --- /dev/null +++ b/gas/testsuite/gas/ppc/booke.d @@ -0,0 +1,130 @@ +#as: -mbooke64 +#objdump: -Dr -Mbooke +#name: BookE tests + +.*: +file format elf32-powerpc + +Disassembly of section \.text: + +0+0000000 <start>: + 0: 24 25 00 30 bce 1,4\*cr1\+gt,30 <branch_target_1> + 4: 24 46 00 3d bcel 2,4\*cr1\+eq,40 <branch_target_2> + 8: 24 67 00 02 bcea 3,4\*cr1\+so,0 <start> + 8: R_PPC_ADDR14 branch_target_3 + c: 24 88 00 03 bcela 4,4\*cr2,0 <start> + c: R_PPC_ADDR14 branch_target_4 + 10: 4c a9 00 22 bclre 5,4\*cr2\+gt + 14: 4c aa 00 23 bclrel 5,4\*cr2\+eq + 18: 4d 0b 04 22 bcctre 8,4\*cr2\+so + 1c: 4d 0c 04 23 bcctrel 8,4\*cr3 + 20: 58 00 00 74 be 94 <branch_target_5> + 24: 58 00 00 89 bel ac <branch_target_6> + 28: 58 00 00 02 bea 0 <start> + 28: R_PPC_ADDR24 branch_target_7 + 2c: 58 00 00 03 bela 0 <start> + 2c: R_PPC_ADDR24 branch_target_8 + +0+0000030 <branch_target_1>: + 30: e9 09 00 80 lbze r8,8\(r9\) + 34: e9 8f 00 41 lbzue r12,4\(r15\) + 38: 7c 86 40 fe lbzuxe r4,r6,r8 + 3c: 7c 65 38 be lbzxe r3,r5,r7 + +0+0000040 <branch_target_2>: + 40: f8 a6 06 40 lde r5,400\(r6\) + 44: f8 c7 07 11 ldue r6,452\(r7\) + 48: 7c e8 4e 3e ldxe r7,r8,r9 + 4c: 7d 4b 66 7e lduxe r10,r11,r12 + +0+0000050 <branch_target_3>: + 50: f9 81 02 06 lfde f12,128\(r1\) + 54: f8 25 00 47 lfdue f1,16\(r5\) + 58: 7c a1 1c be lfdxe f5,r1,r3 + 5c: 7c c2 24 fe lfduxe f6,r2,r4 + 60: f9 09 00 c4 lfse f8,48\(r9\) + 64: f9 2a 01 15 lfsue f9,68\(r10\) + 68: 7d 44 44 7e lfsuxe f10,r4,r8 + 6c: 7d 23 3c 3e lfsxe f9,r3,r7 + +0+0000070 <branch_target_4>: + 70: e9 45 03 24 lhae r10,50\(r5\) + 74: e8 23 00 55 lhaue r1,5\(r3\) + 78: 7c a1 1a fe lhauxe r5,r1,r3 + 7c: 7f be fa be lhaxe r29,r30,r31 + 80: 7c 22 1e 3c lhbrxe r1,r2,r3 + 84: e8 83 01 22 lhze r4,18\(r3\) + 88: e8 c9 01 43 lhzue r6,20\(r9\) + 8c: 7c a7 4a 7e lhzuxe r5,r7,r9 + 90: 7d 27 2a 3e lhzxe r9,r7,r5 + +0+0000094 <branch_target_5>: + 94: 7d 4f a0 fc lwarxe r10,r15,r20 + 98: 7c aa 94 3c lwbrxe r5,r10,r18 + 9c: eb 9d 00 46 lwze r28,4\(r29\) + a0: e9 0a 02 87 lwzue r8,40\(r10\) + a4: 7c 66 48 7e lwzuxe r3,r6,r9 + a8: 7f dd e0 3e lwzxe r30,r29,r28 + +0+00000ac <branch_target_6>: + ac: 7c 06 3d fc dcbae r6,r7 + b0: 7c 08 48 bc dcbfe r8,r9 + b4: 7c 0a 5b bc dcbie r10,r11 + b8: 7c 08 f0 7c dcbste r8,r30 + bc: 7c c3 0a 3c dcbte 6,r3,r1 + c0: 7c a4 11 fa dcbtste 5,r4,r2 + c4: 7c 0f 77 fc dcbze r15,r14 + c8: 7c 03 27 bc icbie r3,r4 + cc: 7c a8 48 2c icbt 5,r8,r9 + d0: 7c ca 78 3c icbte 6,r10,r15 + d4: 7c a6 02 26 mfapidi r5,r6 + d8: 7c 07 46 24 tlbivax r7,r8 + dc: 7c 09 56 26 tlbivaxe r9,r10 + e0: 7c 0b 67 24 tlbsx r11,r12 + e4: 7c 0d 77 26 tlbsxe r13,r14 + +0+00000e8 <branch_target_7>: + e8: 7c 22 1b 14 adde64 r1,r2,r3 + ec: 7c 85 37 14 adde64o r4,r5,r6 + f0: 7c e8 03 d4 addme64 r7,r8 + f4: 7d 2a 07 d4 addme64o r9,r10 + f8: 7d 6c 03 94 addze64 r11,r12 + fc: 7d ae 07 94 addze64o r13,r14 + 100: 7e 80 04 40 mcrxr64 cr5 + 104: 7d f0 8b 10 subfe64 r15,r16,r17 + 108: 7e 53 a7 10 subfe64o r18,r19,r20 + 10c: 7e b6 03 d0 subfme64 r21,r22 + 110: 7e f8 07 d0 subfme64o r23,r24 + 114: 7f 3a 03 90 subfze64 r25,r26 + 118: 7f 7c 07 90 subfze64o r27,r28 + +0+000011c <branch_target_8>: + 11c: e8 22 03 28 stbe r1,50\(r2\) + 120: e8 64 02 89 stbue r3,40\(r4\) + 124: 7c a6 39 fe stbuxe r5,r6,r7 + 128: 7d 09 51 be stbxe r8,r9,r10 + 12c: 7d 6c 6b ff stdcxe\. r11,r12,r13 + 130: f9 cf 00 78 stde r14,28\(r15\) + 134: fa 11 00 59 stdue r16,20\(r17\) + 138: 7e 53 a7 3e stdxe r18,r19,r20 + 13c: 7e b6 bf 7e stduxe r21,r22,r23 + 140: f8 38 00 3e stfde f1,12\(r24\) + 144: f8 59 00 0f stfdue f2,0\(r25\) + 148: 7c 7a dd be stfdxe f3,r26,r27 + 14c: 7c 9c ed fe stfduxe f4,r28,r29 + 150: 7c be ff be stfiwxe f5,r30,r31 + 154: f8 de 00 6c stfse f6,24\(r30\) + 158: f8 fd 00 5d stfsue f7,20\(r29\) + 15c: 7d 1c dd 3e stfsxe f8,r28,r27 + 160: 7d 3a cd 7e stfsuxe f9,r26,r25 + 164: 7f 17 b7 3c sthbrxe r24,r23,r22 + 168: ea b4 01 ea sthe r21,30\(r20\) + 16c: ea 72 02 8b sthue r19,40\(r18\) + 170: 7e 30 7b 7e sthuxe r17,r16,r15 + 174: 7d cd 63 3e sthxe r14,r13,r12 + 178: 7d 6a 4d 3c stwbrxe r11,r10,r9 + 17c: 7d 07 31 3d stwcxe\. r8,r7,r6 + 180: e8 a4 03 2e stwe r5,50\(r4\) + 184: e8 62 02 8f stwue r3,40\(r2\) + 188: 7c 22 19 7e stwuxe r1,r2,r3 + 18c: 7c 85 31 3e stwxe r4,r5,r6 +Disassembly of section \.data: diff --git a/gas/testsuite/gas/ppc/booke.s b/gas/testsuite/gas/ppc/booke.s new file mode 100644 index 0000000..5929a36 --- /dev/null +++ b/gas/testsuite/gas/ppc/booke.s @@ -0,0 +1,120 @@ +# Motorola PowerPC BookE tests +#as: -mbooke32 + .section ".text" +start: + bce 1, 5, branch_target_1 + bcel 2, 6, branch_target_2 + bcea 3, 7, branch_target_3 + bcela 4, 8, branch_target_4 + bclre 5, 9 + bclrel 5, 10 + bcctre 8, 11 + bcctrel 8, 12 + be branch_target_5 + bel branch_target_6 + bea branch_target_7 + bela branch_target_8 + +branch_target_1: + lbze 8, 8(9) + lbzue 12, 4(15) + lbzuxe 4, 6, 8 + lbzxe 3, 5, 7 + +branch_target_2: + lde 5, 400(6) + ldue 6, 452(7) + ldxe 7, 8, 9 + lduxe 10, 11, 12 + +branch_target_3: + lfde 12, 128(1) + lfdue 1, 16(5) + lfdxe 5, 1, 3 + lfduxe 6, 2, 4 + lfse 8, 48(9) + lfsue 9, 68(10) + lfsuxe 10, 4, 8 + lfsxe 9, 3, 7 + +branch_target_4: + lhae 10, 50(5) + lhaue 1, 5(3) + lhauxe 5, 1, 3 + lhaxe 29, 30, 31 + lhbrxe 1, 2, 3 + lhze 4, 18(3) + lhzue 6, 20(9) + lhzuxe 5, 7, 9 + lhzxe 9, 7, 5 + +branch_target_5: + lwarxe 10, 15, 20 + lwbrxe 5, 10, 18 + lwze 28, 4(29) + lwzue 8, 40(10) + lwzuxe 3, 6, 9 + lwzxe 30, 29, 28 + +branch_target_6: + dcbae 6, 7 + dcbfe 8, 9 + dcbie 10, 11 + dcbste 8, 30 + dcbte 6, 3, 1 + dcbtste 5, 4, 2 + dcbze 15, 14 + icbie 3, 4 + icbt 5, 8, 9 + icbte 6, 10, 15 + mfapidi 5, 6 + tlbivax 7, 8 + tlbivaxe 9, 10 + tlbsx 11, 12 + tlbsxe 13, 14 + +branch_target_7: + adde64 1, 2, 3 + adde64o 4, 5, 6 + addme64 7, 8 + addme64o 9, 10 + addze64 11, 12 + addze64o 13, 14 + mcrxr64 5 + subfe64 15, 16, 17 + subfe64o 18, 19, 20 + subfme64 21, 22 + subfme64o 23, 24 + subfze64 25, 26 + subfze64o 27, 28 + +branch_target_8: + stbe 1, 50(2) + stbue 3, 40(4) + stbuxe 5, 6, 7 + stbxe 8, 9, 10 + stdcxe. 11, 12, 13 + stde 14, 28(15) + stdue 16, 20(17) + stdxe 18, 19, 20 + stduxe 21, 22, 23 + stfde 1, 12(24) + stfdue 2, 0(25) + stfdxe 3, 26, 27 + stfduxe 4, 28, 29 + stfiwxe 5, 30, 31 + stfse 6, 24(30) + stfsue 7, 20(29) + stfsxe 8, 28, 27 + stfsuxe 9, 26, 25 + sthbrxe 24, 23, 22 + sthe 21, 30(20) + sthue 19, 40(18) + sthuxe 17, 16, 15 + sthxe 14, 13, 12 + stwbrxe 11, 10, 9 + stwcxe. 8, 7, 6 + stwe 5, 50(4) + stwue 3, 40(2) + stwuxe 1, 2, 3 + stwxe 4, 5, 6 diff --git a/gas/testsuite/gas/ppc/ppc.exp b/gas/testsuite/gas/ppc/ppc.exp index c7d5274..85d5be0 100644 --- a/gas/testsuite/gas/ppc/ppc.exp +++ b/gas/testsuite/gas/ppc/ppc.exp @@ -26,4 +26,5 @@ if { [istarget powerpc64*-*-*] || [istarget *-*-elf64*]} then { if { [istarget powerpc*-*-*] } then { run_dump_test "simpshft" + run_dump_test "booke" } |