diff options
-rw-r--r-- | gas/ChangeLog | 4 | ||||
-rw-r--r-- | gas/config/tc-ppc.c | 20 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/power6.d | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/power6.s | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/power7.d | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/ppc/power7.s | 2 |
7 files changed, 34 insertions, 7 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 3957744..fee4807 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,7 @@ +2009-03-31 Peter Bergner <bergner@vnet.ibm.com> + + * config/tc-ppc.c (ppc_handle_align): Handle power7's group ending nop. + 2009-03-31 Dave Korn <dave.korn.cygwin@gmail.com> * doc/internals.texi: Fix trivial syntax errors. diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index 537b676..0b0edbd 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -5687,13 +5687,14 @@ ppc_handle_align (struct frag *fragP) fragP->fr_var = 4; md_number_to_chars (dest, 0x60000000, 4); - if ((ppc_cpu & PPC_OPCODE_POWER6) != 0) + if ((ppc_cpu & PPC_OPCODE_POWER6) != 0 + || (ppc_cpu & PPC_OPCODE_POWER7) != 0) { - /* For power6, we want the last nop to be a group terminating - one, "ori 1,1,0". Do this by inserting an rs_fill frag - immediately after this one, with its address set to the last - nop location. This will automatically reduce the number of - nops in the current frag by one. */ + /* For power6 and power7, we want the last nop to be a group + terminating one. Do this by inserting an rs_fill frag immediately + after this one, with its address set to the last nop location. + This will automatically reduce the number of nops in the current + frag by one. */ if (count > 4) { struct frag *group_nop = xmalloc (SIZEOF_STRUCT_FRAG + 4); @@ -5707,7 +5708,12 @@ ppc_handle_align (struct frag *fragP) dest = group_nop->fr_literal; } - md_number_to_chars (dest, 0x60210000, 4); + if ((ppc_cpu & PPC_OPCODE_POWER7) != 0) + /* power7 group terminating nop: "ori 2,2,0". */ + md_number_to_chars (dest, 0x60420000, 4); + else + /* power6 group terminating nop: "ori 1,1,0". */ + md_number_to_chars (dest, 0x60210000, 4); } } } diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index b881c61..82db4f0 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2009-03-31 Peter Bergner <bergner@vnet.ibm.com> + + * gas/ppc/power7.d ("ori", ".p2align"): Add tests for group ending nop. + * gas/ppc/power7.s: Likewise. + * gas/ppc/power6.d: Likewise. + * gas/ppc/power6.s: Likewise. + 2009-03-30 Joseph Myers <joseph@codesourcery.com> * gas/arm/mapsecs.d, gas/arm/mapsecs.s: New. diff --git a/gas/testsuite/gas/ppc/power6.d b/gas/testsuite/gas/ppc/power6.d index c4d1ff0..bf75982 100644 --- a/gas/testsuite/gas/ppc/power6.d +++ b/gas/testsuite/gas/ppc/power6.d @@ -69,3 +69,5 @@ Disassembly of section \.text: ec: 7d 6a 02 74 cbcdtd r10,r11 f0: 7d 6a 02 34 cdtbcd r10,r11 f4: 7d 4b 60 94 addg6s r10,r11,r12 + f8: 60 21 00 00 ori r1,r1,0 + fc: 60 21 00 00 ori r1,r1,0 diff --git a/gas/testsuite/gas/ppc/power6.s b/gas/testsuite/gas/ppc/power6.s index 9f5cde1..106468f 100644 --- a/gas/testsuite/gas/ppc/power6.s +++ b/gas/testsuite/gas/ppc/power6.s @@ -64,3 +64,5 @@ start: cbcdtd 10,11 cdtbcd 10,11 addg6s 10,11,12 + ori 1,1,0 + .p2align 4,,15 diff --git a/gas/testsuite/gas/ppc/power7.d b/gas/testsuite/gas/ppc/power7.d index b8dae90..b974183 100644 --- a/gas/testsuite/gas/ppc/power7.d +++ b/gas/testsuite/gas/ppc/power7.d @@ -111,3 +111,7 @@ Disassembly of section \.text: 194: ed c0 78 34 frsqrtes f14,f15 198: ed c0 78 35 frsqrtes\. f14,f15 19c: 7c 43 27 1e isel r2,r3,r4,28 + 1a0: 60 42 00 00 ori r2,r2,0 + 1a4: 60 00 00 00 nop + 1a8: 60 00 00 00 nop + 1ac: 60 42 00 00 ori r2,r2,0 diff --git a/gas/testsuite/gas/ppc/power7.s b/gas/testsuite/gas/ppc/power7.s index 2e2448a..7736452 100644 --- a/gas/testsuite/gas/ppc/power7.s +++ b/gas/testsuite/gas/ppc/power7.s @@ -104,3 +104,5 @@ power7: frsqrtes 14,15 frsqrtes. 14,15 isel 2,3,4,28 + ori 2,2,0 + .p2align 4,,15 |