* config/tc-ppc.c (ppc_handle_align): Handle power7's group ending nop.

gas/testsuite/
	* 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.
This commit is contained in:
Peter Bergner
2009-04-01 01:41:07 +00:00
parent 1aa34cc52c
commit 42240548bf
7 changed files with 34 additions and 7 deletions

View File

@ -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> 2009-03-31 Dave Korn <dave.korn.cygwin@gmail.com>
* doc/internals.texi: Fix trivial syntax errors. * doc/internals.texi: Fix trivial syntax errors.

View File

@ -5687,13 +5687,14 @@ ppc_handle_align (struct frag *fragP)
fragP->fr_var = 4; fragP->fr_var = 4;
md_number_to_chars (dest, 0x60000000, 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 /* For power6 and power7, we want the last nop to be a group
one, "ori 1,1,0". Do this by inserting an rs_fill frag terminating one. Do this by inserting an rs_fill frag immediately
immediately after this one, with its address set to the last after this one, with its address set to the last nop location.
nop location. This will automatically reduce the number of This will automatically reduce the number of nops in the current
nops in the current frag by one. */ frag by one. */
if (count > 4) if (count > 4)
{ {
struct frag *group_nop = xmalloc (SIZEOF_STRUCT_FRAG + 4); struct frag *group_nop = xmalloc (SIZEOF_STRUCT_FRAG + 4);
@ -5707,6 +5708,11 @@ ppc_handle_align (struct frag *fragP)
dest = group_nop->fr_literal; dest = group_nop->fr_literal;
} }
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); md_number_to_chars (dest, 0x60210000, 4);
} }
} }

View File

@ -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> 2009-03-30 Joseph Myers <joseph@codesourcery.com>
* gas/arm/mapsecs.d, gas/arm/mapsecs.s: New. * gas/arm/mapsecs.d, gas/arm/mapsecs.s: New.

View File

@ -69,3 +69,5 @@ Disassembly of section \.text:
ec: 7d 6a 02 74 cbcdtd r10,r11 ec: 7d 6a 02 74 cbcdtd r10,r11
f0: 7d 6a 02 34 cdtbcd r10,r11 f0: 7d 6a 02 34 cdtbcd r10,r11
f4: 7d 4b 60 94 addg6s r10,r11,r12 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

View File

@ -64,3 +64,5 @@ start:
cbcdtd 10,11 cbcdtd 10,11
cdtbcd 10,11 cdtbcd 10,11
addg6s 10,11,12 addg6s 10,11,12
ori 1,1,0
.p2align 4,,15

View File

@ -111,3 +111,7 @@ Disassembly of section \.text:
194: ed c0 78 34 frsqrtes f14,f15 194: ed c0 78 34 frsqrtes f14,f15
198: ed c0 78 35 frsqrtes\. f14,f15 198: ed c0 78 35 frsqrtes\. f14,f15
19c: 7c 43 27 1e isel r2,r3,r4,28 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

View File

@ -104,3 +104,5 @@ power7:
frsqrtes 14,15 frsqrtes 14,15
frsqrtes. 14,15 frsqrtes. 14,15
isel 2,3,4,28 isel 2,3,4,28
ori 2,2,0
.p2align 4,,15