diff options
author | Peter Bergner <bergner@vnet.ibm.com> | 2008-08-02 04:38:51 +0000 |
---|---|---|
committer | Peter Bergner <bergner@vnet.ibm.com> | 2008-08-02 04:38:51 +0000 |
commit | 9b4e57660d385d9135549aeb8360ebfa14fb3990 (patch) | |
tree | e508e99bbab020f78ccd3b320ca8bf30b1b95b96 /gas | |
parent | dbe454a3b5f62a101aa4a8b290a7c63a40f8ac52 (diff) | |
download | gdb-9b4e57660d385d9135549aeb8360ebfa14fb3990.zip gdb-9b4e57660d385d9135549aeb8360ebfa14fb3990.tar.gz gdb-9b4e57660d385d9135549aeb8360ebfa14fb3990.tar.bz2 |
gas/
* config/tc-ppc.c (parse_cpu): Rename altivec_or_spe to retain_flags.
Handle -mvsx and -mpower7.
(md_show_usage): Document -mpower7 and -mvsx.
* doc/as.texinfo (Target PowerPC): Document -mvsx.
* doc/c-ppc.texi (PowerPC-Opts): Document -mvsx and -mpower7.
gas/testsuite/
* gas/ppc/power7.d: New.
* gas/ppc/power7.s: Likewise.
* gas/ppc/ppc.exp: Run power7 test.
include/opcode/
* ppc.h (PPC_OPCODE_VSX, PPC_OPERAND_VSR): New.
opcodes/
* ppc-dis.c (powerpc_init_dialect): Handle power7 and vsx options.
(print_insn_powerpc): Prepend 'vs' when printing VSX registers.
(print_ppc_disassembler_options): Document -Mpower7 and -Mvsx.
* ppc-opc.c (insert_xt6): New static function.
(extract_xt6): Likewise.
(insert_xa6): Likewise.
(extract_xa6: Likewise.
(insert_xb6): Likewise.
(extract_xb6): Likewise.
(insert_xb6s): Likewise.
(extract_xb6s): Likewise.
(XS6, XT6, XA6, XB6, XB6S, DM, XX3, XX3DM, XX1_MASK, XX3_MASK,
XX3DM_MASK, PPCVSX): New.
(powerpc_opcodes): Add opcodes "lxvd2x", "lxvd2ux", "stxvd2x",
"stxvd2ux", "xxmrghd", "xxmrgld", "xxpermdi", "xvmovdp", "xvcpsgndp".
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 8 | ||||
-rw-r--r-- | gas/config/tc-ppc.c | 27 | ||||
-rw-r--r-- | gas/doc/as.texinfo | 2 | ||||
-rw-r--r-- | gas/doc/c-ppc.texi | 6 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/power7.d | 57 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/power7.s | 58 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/ppc.exp | 1 |
8 files changed, 159 insertions, 6 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 2fe19f2..c2bb544 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2008-08-01 Peter Bergner <bergner@vnet.ibm.com> + + * config/tc-ppc.c (parse_cpu): Rename altivec_or_spe to retain_flags. + Handle -mvsx and -mpower7. + (md_show_usage): Document -mpower7 and -mvsx. + * doc/as.texinfo (Target PowerPC): Document -mvsx. + * doc/c-ppc.texi (PowerPC-Opts): Document -mvsx and -mpower7. + 2008-07-31 Peter Bergner <bergner@vnet.ibm.com> * config/tc-ppc.c (parse_cpu) <power6>: Accept Altivec instructions. diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index bded5f3..76a9e8e 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -825,7 +825,8 @@ const size_t md_longopts_size = sizeof (md_longopts); static int parse_cpu (const char *arg) { - ppc_cpu_t altivec_or_spe = ppc_cpu & (PPC_OPCODE_ALTIVEC | PPC_OPCODE_SPE); + ppc_cpu_t retain_flags = + ppc_cpu & (PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_SPE); /* -mpwrx and -mpwr2 mean to assemble for the IBM POWER/2 (RIOS2). */ @@ -873,7 +874,14 @@ parse_cpu (const char *arg) if (ppc_cpu == 0) ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC; - altivec_or_spe |= PPC_OPCODE_ALTIVEC; + retain_flags |= PPC_OPCODE_ALTIVEC; + } + else if (strcmp (arg, "vsx") == 0) + { + if (ppc_cpu == 0) + ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC; + + retain_flags |= PPC_OPCODE_VSX; } else if (strcmp (arg, "e500") == 0 || strcmp (arg, "e500x2") == 0) { @@ -893,7 +901,7 @@ parse_cpu (const char *arg) if (ppc_cpu == 0) ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_EFS; - altivec_or_spe |= PPC_OPCODE_SPE; + retain_flags |= PPC_OPCODE_SPE; } /* -mppc64 and -m620 mean to assemble for the 64-bit PowerPC 620. */ @@ -935,6 +943,13 @@ parse_cpu (const char *arg) | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6 | PPC_OPCODE_ALTIVEC); } + else if (strcmp (arg, "power7") == 0) + { + ppc_cpu = (PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC + | PPC_OPCODE_64 | PPC_OPCODE_POWER4 + | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6 + | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX); + } else if (strcmp (arg, "cell") == 0) { ppc_cpu = (PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC @@ -952,8 +967,8 @@ parse_cpu (const char *arg) else return 0; - /* Make sure the the Altivec and SPE bits are not lost. */ - ppc_cpu |= altivec_or_spe; + /* Make sure the the Altivec, VSX and SPE bits are not lost. */ + ppc_cpu |= retain_flags; return 1; } @@ -1139,11 +1154,13 @@ PowerPC options:\n\ -mpower4 generate code for Power4 architecture\n\ -mpower5 generate code for Power5 architecture\n\ -mpower6 generate code for Power6 architecture\n\ +-mpower7 generate code for Power7 architecture\n\ -mcell generate code for Cell Broadband Engine architecture\n\ -mcom generate code Power/PowerPC common instructions\n\ -many generate code for any architecture (PWR/PWRX/PPC)\n")); fprintf (stream, _("\ -maltivec generate code for AltiVec\n\ +-mvsx generate code for Vector-Scalar (VSX) instructions\n\ -me300 generate code for PowerPC e300 family\n\ -me500, -me500x2 generate code for Motorola e500 core complex\n\ -me500mc, generate code for Freescale e500mc core complex\n\ diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo index 635b707..2a373da 100644 --- a/gas/doc/as.texinfo +++ b/gas/doc/as.texinfo @@ -409,7 +409,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. [@b{-mpwrx}|@b{-mpwr2}|@b{-mpwr}|@b{-m601}|@b{-mppc}|@b{-mppc32}|@b{-m603}|@b{-m604}| @b{-m403}|@b{-m405}|@b{-mppc64}|@b{-m620}|@b{-mppc64bridge}|@b{-mbooke}| @b{-mbooke32}|@b{-mbooke64}] - [@b{-mcom}|@b{-many}|@b{-maltivec}] [@b{-memb}] + [@b{-mcom}|@b{-many}|@b{-maltivec}|@b{-mvsx}] [@b{-memb}] [@b{-mregnames}|@b{-mno-regnames}] [@b{-mrelocatable}|@b{-mrelocatable-lib}] [@b{-mlittle}|@b{-mlittle-endian}|@b{-mbig}|@b{-mbig-endian}] diff --git a/gas/doc/c-ppc.texi b/gas/doc/c-ppc.texi index c71ace9..bc65685 100644 --- a/gas/doc/c-ppc.texi +++ b/gas/doc/c-ppc.texi @@ -82,6 +82,9 @@ Generate code for PowerPC e300 family. @item -maltivec Generate code for processors with AltiVec instructions. +@item -mvsx +Generate code for processors with Vector-Scalar (VSX) instructions. + @item -mpower4 Generate code for Power4 architecture. @@ -91,6 +94,9 @@ Generate code for Power5 architecture. @item -mpower6 Generate code for Power6 architecture. +@item -mpower7 +Generate code for Power7 architecture. + @item -mcell Generate code for Cell Broadband Engine architecture. diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 1ea3df5..7516f50 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-08-01 Peter Bergner <bergner@vnet.ibm.com> + + * gas/ppc/power7.d: New. + * gas/ppc/power7.s: Likewise. + * gas/ppc/ppc.exp: Run power7 test. + 2008-08-01 H.J. Lu <hongjiu.lu@intel.com> * gas/cfi/cfi-i386.s: Remove tests for AVX register maps. diff --git a/gas/testsuite/gas/ppc/power7.d b/gas/testsuite/gas/ppc/power7.d new file mode 100644 index 0000000..0401343 --- /dev/null +++ b/gas/testsuite/gas/ppc/power7.d @@ -0,0 +1,57 @@ +#as: -a32 -mpower7 +#objdump: -dr -Mpower7 +#name: POWER7 tests (includes DFP, Altivec and VSX) + +.*: +file format elf32-powerpc.* + +Disassembly of section \.text: + +0+00 <power7>: + 0: 7c 64 2e 98 lxvd2x vs3,r4,r5 + 4: 7c 64 2e d8 lxvd2ux vs3,r4,r5 + 8: 7d 64 2e 99 lxvd2x vs43,r4,r5 + c: 7d 64 2e d9 lxvd2ux vs43,r4,r5 + 10: 7c 64 2f 98 stxvd2x vs3,r4,r5 + 14: 7c 64 2f d8 stxvd2ux vs3,r4,r5 + 18: 7d 64 2f 99 stxvd2x vs43,r4,r5 + 1c: 7d 64 2f d9 stxvd2ux vs43,r4,r5 + 20: f0 64 28 50 xxmrghd vs3,vs4,vs5 + 24: f1 6c 68 57 xxmrghd vs43,vs44,vs45 + 28: f0 64 2b 50 xxmrgld vs3,vs4,vs5 + 2c: f1 6c 6b 57 xxmrgld vs43,vs44,vs45 + 30: f0 64 28 50 xxmrghd vs3,vs4,vs5 + 34: f1 6c 68 57 xxmrghd vs43,vs44,vs45 + 38: f0 64 2b 50 xxmrgld vs3,vs4,vs5 + 3c: f1 6c 6b 57 xxmrgld vs43,vs44,vs45 + 40: f0 64 29 50 xxpermdi vs3,vs4,vs5,1 + 44: f1 6c 69 57 xxpermdi vs43,vs44,vs45,1 + 48: f0 64 2a 50 xxpermdi vs3,vs4,vs5,2 + 4c: f1 6c 6a 57 xxpermdi vs43,vs44,vs45,2 + 50: f0 64 27 80 xvmovdp vs3,vs4 + 54: f1 6c 67 87 xvmovdp vs43,vs44 + 58: f0 64 27 80 xvmovdp vs3,vs4 + 5c: f1 6c 67 87 xvmovdp vs43,vs44 + 60: f0 64 2f 80 xvcpsgndp vs3,vs4,vs5 + 64: f1 6c 6f 87 xvcpsgndp vs43,vs44,vs45 + 68: 4c 00 03 24 doze + 6c: 4c 00 03 64 nap + 70: 4c 00 03 a4 sleep + 74: 4c 00 03 e4 rvwinkle + 78: 7c 83 01 34 prtyw r3,r4 + 7c: 7d cd 01 74 prtyd r13,r14 + 80: 7d 5c 02 a6 mfcfar r10 + 84: 7d 7c 03 a6 mtcfar r11 + 88: 7c 83 2b f8 cmpb r3,r4,r5 + 8c: 7c c0 3c be mffgpr f6,r7 + 90: 7d 00 4d be mftgpr r8,f9 + 94: 7d 4b 66 2a lwzcix r10,r11,r12 + 98: 7d ae 7e 2e lfdpx f13,r14,r15 + 9c: ee 11 90 04 dadd f16,f17,f18 + a0: fe 96 c0 04 daddq f20,f22,f24 + a4: 7c 60 06 6c dss 3 + a8: 7e 00 06 6c dssall + ac: 7c 25 22 ac dst r5,r4,1 + b0: 7e 08 3a ac dstt r8,r7,0 + b4: 7c 65 32 ec dstst r5,r6,3 + b8: 7e 44 2a ec dststt r4,r5,2 + bc: 4e 80 00 20 blr diff --git a/gas/testsuite/gas/ppc/power7.s b/gas/testsuite/gas/ppc/power7.s new file mode 100644 index 0000000..56fe0dc --- /dev/null +++ b/gas/testsuite/gas/ppc/power7.s @@ -0,0 +1,58 @@ + .file "power7.c" + .section ".text" + .align 2 + .p2align 4,,15 + .globl power7 + .type power7, @function +power7: + lxvd2x 3,4,5 + lxvd2ux 3,4,5 + lxvd2x 43,4,5 + lxvd2ux 43,4,5 + stxvd2x 3,4,5 + stxvd2ux 3,4,5 + stxvd2x 43,4,5 + stxvd2ux 43,4,5 + xxmrghd 3,4,5 + xxmrghd 43,44,45 + xxmrgld 3,4,5 + xxmrgld 43,44,45 + xxpermdi 3,4,5,0 + xxpermdi 43,44,45,0 + xxpermdi 3,4,5,3 + xxpermdi 43,44,45,3 + xxpermdi 3,4,5,1 + xxpermdi 43,44,45,1 + xxpermdi 3,4,5,2 + xxpermdi 43,44,45,2 + xvmovdp 3,4 + xvmovdp 43,44 + xvcpsgndp 3,4,4 + xvcpsgndp 43,44,44 + xvcpsgndp 3,4,5 + xvcpsgndp 43,44,45 + doze + nap + sleep + rvwinkle + prtyw 3,4 + prtyd 13,14 + mfcfar 10 + mtcfar 11 + cmpb 3,4,5 + mffgpr 6,7 + mftgpr 8,9 + lwzcix 10,11,12 + lfdpx 13,14,15 + dadd 16,17,18 + daddq 20,22,24 + dss 3 + dssall + dst 5,4,1 + dstt 8,7,0 + dstst 5,6,3 + dststt 4,5,2 + blr + .size power7,.-power7 + .ident "GCC: (GNU) 4.1.2 20070115 (prerelease) (SUSE Linux)" + .section .note.GNU-stack,"",@progbits diff --git a/gas/testsuite/gas/ppc/ppc.exp b/gas/testsuite/gas/ppc/ppc.exp index 595e79c..90a5cff 100644 --- a/gas/testsuite/gas/ppc/ppc.exp +++ b/gas/testsuite/gas/ppc/ppc.exp @@ -46,5 +46,6 @@ if { [istarget powerpc*-*-*] } then { run_dump_test "e500mc" run_dump_test "cell" run_dump_test "power6" + run_dump_test "power7" } } |