Commit f8af0e30 by Dominik Vogt Committed by Andreas Krebbel

S/390: Hotpatching fixes.

2015-03-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>

	    * config/s390/s390.c (s390_reorg): Move code to output nops after label
	    to s390_reorg ().
	    (s390_asm_output_function_label): Likewise.
	    * config/s390/s390.c (s390_asm_output_function_label):
	    Fix function label alignment with -mhtopatch.
	    * config/s390/s390.md ("unspecv"): New values UNSPECV_NOP_2_BYTE,
	    UNSPECV_NOP_4_BYTE and UNSPECV_NOP_6_BYTE
	    ("nop_2_byte"): New define_insn.
	    ("nop_4_byte"): Likewise.
	    ("nop_6_byte"): Likewise.
	    * doc/extend.texi (hotpatch): hotpatch attribute doc fixes.
	    * doc/invoke.texi (-mhotpatch): -mhotpatch doc fixes.

2015-03-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>

	    * gcc.target/s390/hotpatch-21.c: New test for hotpatch alignment.
	    * gcc.target/s390/hotpatch-22.c: Likewise.
	    * gcc.target/s390/hotpatch-23.c: Likewise.
	    * gcc.target/s390/hotpatch-24.c: Likewise.
	    * gcc.target/s390/hotpatch-2.c: Also check hotpatch alignment.
	    * gcc.target/s390/hotpatch-1.c: Update expected output.
	    * gcc.target/s390/hotpatch-2.c: Likewise.
	    * gcc.target/s390/hotpatch-3.c: Likewise.
	    * gcc.target/s390/hotpatch-4.c: Likewise.
	    * gcc.target/s390/hotpatch-5.c: Likewise.
	    * gcc.target/s390/hotpatch-6.c: Likewise.
	    * gcc.target/s390/hotpatch-7.c: Likewise.
	    * gcc.target/s390/hotpatch-8.c: Likewise.
	    * gcc.target/s390/hotpatch-9.c: Likewise.
	    * gcc.target/s390/hotpatch-10.c: Likewise.
	    * gcc.target/s390/hotpatch-11.c: Likewise.
	    * gcc.target/s390/hotpatch-12.c: Likewise.
	    * gcc.target/s390/hotpatch-13.c: Likewise.
	    * gcc.target/s390/hotpatch-14.c: Likewise.
	    * gcc.target/s390/hotpatch-15.c: Likewise.
	    * gcc.target/s390/hotpatch-16.c: Likewise.
	    * gcc.target/s390/hotpatch-17.c: Likewise.
	    * gcc.target/s390/hotpatch-18.c: Likewise.
	    * gcc.target/s390/hotpatch-19.c: Likewise.

From-SVN: r221381
parent 58b387e6
2015-03-12 Dominik Vogt <vogt@linux.vnet.ibm.com>
* config/s390/s390.c (s390_reorg): Move code to output nops after label
to s390_reorg ().
(s390_asm_output_function_label): Likewise.
* config/s390/s390.c (s390_asm_output_function_label):
Fix function label alignment with -mhtopatch.
* config/s390/s390.md ("unspecv"): New values UNSPECV_NOP_2_BYTE,
UNSPECV_NOP_4_BYTE and UNSPECV_NOP_6_BYTE
("nop_2_byte"): New define_insn.
("nop_4_byte"): Likewise.
("nop_6_byte"): Likewise.
* doc/extend.texi (hotpatch): hotpatch attribute doc fixes.
* doc/invoke.texi (-mhotpatch): -mhotpatch doc fixes.
2015-03-12 Ilya Enkovich <ilya.enkovich@intel.com> 2015-03-12 Ilya Enkovich <ilya.enkovich@intel.com>
PR target/65103 PR target/65103
......
...@@ -5295,6 +5295,7 @@ s390_asm_output_function_label (FILE *asm_out_file, const char *fname, ...@@ -5295,6 +5295,7 @@ s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
if (hotpatch_p) if (hotpatch_p)
{ {
unsigned int function_alignment;
int i; int i;
/* Add a trampoline code area before the function label and initialize it /* Add a trampoline code area before the function label and initialize it
...@@ -5308,34 +5309,14 @@ s390_asm_output_function_label (FILE *asm_out_file, const char *fname, ...@@ -5308,34 +5309,14 @@ s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
stored directly before the label without crossing a cacheline stored directly before the label without crossing a cacheline
boundary. All this is necessary to make sure the trampoline code can boundary. All this is necessary to make sure the trampoline code can
be changed atomically. */ be changed atomically. */
function_alignment = MAX (8, DECL_ALIGN (decl) / BITS_PER_UNIT);
if (! DECL_USER_ALIGN (decl))
function_alignment = MAX (function_alignment,
(unsigned int) align_functions);
ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (function_alignment));
} }
ASM_OUTPUT_LABEL (asm_out_file, fname); ASM_OUTPUT_LABEL (asm_out_file, fname);
/* Output a series of NOPs after the function label. */
if (hotpatch_p)
{
while (hw_after > 0)
{
if (hw_after >= 3 && TARGET_CPU_ZARCH)
{
asm_fprintf (asm_out_file, "\tbrcl\t\t0,0\n");
hw_after -= 3;
}
else if (hw_after >= 2)
{
gcc_assert (hw_after == 2 || !TARGET_CPU_ZARCH);
asm_fprintf (asm_out_file, "\tnop\t0\n");
hw_after -= 2;
}
else
{
gcc_assert (hw_after == 1);
asm_fprintf (asm_out_file, "\tnopr\t%%r7\n");
hw_after -= 1;
}
}
}
} }
/* Output machine-dependent UNSPECs occurring in address constant X /* Output machine-dependent UNSPECs occurring in address constant X
...@@ -11368,6 +11349,7 @@ static void ...@@ -11368,6 +11349,7 @@ static void
s390_reorg (void) s390_reorg (void)
{ {
bool pool_overflow = false; bool pool_overflow = false;
int hw_before, hw_after;
/* Make sure all splits have been performed; splits after /* Make sure all splits have been performed; splits after
machine_dependent_reorg might confuse insn length counts. */ machine_dependent_reorg might confuse insn length counts. */
...@@ -11503,6 +11485,40 @@ s390_reorg (void) ...@@ -11503,6 +11485,40 @@ s390_reorg (void)
if (insn_added_p) if (insn_added_p)
shorten_branches (get_insns ()); shorten_branches (get_insns ());
} }
s390_function_num_hotpatch_hw (current_function_decl, &hw_before, &hw_after);
if (hw_after > 0)
{
rtx_insn *insn;
/* Inject nops for hotpatching. */
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
{
if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG)
break;
}
gcc_assert (insn);
/* Output a series of NOPs after the NOTE_INSN_FUNCTION_BEG. */
while (hw_after > 0)
{
if (hw_after >= 3 && TARGET_CPU_ZARCH)
{
insn = emit_insn_after (gen_nop_6_byte (), insn);
hw_after -= 3;
}
else if (hw_after >= 2)
{
insn = emit_insn_after (gen_nop_4_byte (), insn);
hw_after -= 2;
}
else
{
insn = emit_insn_after (gen_nop_2_byte (), insn);
hw_after -= 1;
}
}
gcc_assert (hw_after == 0);
}
} }
/* Return true if INSN is a fp load insn writing register REGNO. */ /* Return true if INSN is a fp load insn writing register REGNO. */
......
...@@ -153,6 +153,11 @@ ...@@ -153,6 +153,11 @@
UNSPECV_CAS UNSPECV_CAS
UNSPECV_ATOMIC_OP UNSPECV_ATOMIC_OP
; Hotpatching (unremovable NOPs)
UNSPECV_NOP_2_BYTE
UNSPECV_NOP_4_BYTE
UNSPECV_NOP_6_BYTE
; Transactional Execution support ; Transactional Execution support
UNSPECV_TBEGIN UNSPECV_TBEGIN
UNSPECV_TBEGIN_TDB UNSPECV_TBEGIN_TDB
...@@ -9705,6 +9710,26 @@ ...@@ -9705,6 +9710,26 @@
"lr\t1,1" "lr\t1,1"
[(set_attr "op_type" "RR")]) [(set_attr "op_type" "RR")])
;;- Undeletable nops (used for hotpatching)
(define_insn "nop_2_byte"
[(unspec_volatile [(const_int 0)] UNSPECV_NOP_2_BYTE)]
""
"nopr\t%%r7"
[(set_attr "op_type" "RR")])
(define_insn "nop_4_byte"
[(unspec_volatile [(const_int 0)] UNSPECV_NOP_4_BYTE)]
""
"nop\t0"
[(set_attr "op_type" "RX")])
(define_insn "nop_6_byte"
[(unspec_volatile [(const_int 0)] UNSPECV_NOP_6_BYTE)]
"TARGET_CPU_ZARCH"
"brcl\t0, 0"
[(set_attr "op_type" "RIL")])
; ;
; Special literal pool access instruction pattern(s). ; Special literal pool access instruction pattern(s).
......
...@@ -20216,9 +20216,9 @@ The @var{stack-guard} option can only be used in conjunction with @var{stack-siz ...@@ -20216,9 +20216,9 @@ The @var{stack-guard} option can only be used in conjunction with @var{stack-siz
If the hotpatch option is enabled, a ``hot-patching'' function If the hotpatch option is enabled, a ``hot-patching'' function
prologue is generated for all functions in the compilation unit. prologue is generated for all functions in the compilation unit.
The funtion label is prepended with the given number of two-byte The funtion label is prepended with the given number of two-byte
Nop instructions (@var{pre-halfwords}, maximum 1000000). After NOP instructions (@var{pre-halfwords}, maximum 1000000). After
the label, 2 * @var{post-halfwords} bytes are appended, using the the label, 2 * @var{post-halfwords} bytes are appended, using the
larges nop like instructions the architecture allows (maximum largest NOP like instructions the architecture allows (maximum
1000000). 1000000).
If both arguments are zero, hotpatching is disabled. If both arguments are zero, hotpatching is disabled.
......
2015-03-12 Dominik Vogt <vogt@linux.vnet.ibm.com>
* gcc.target/s390/hotpatch-21.c: New test for hotpatch alignment.
* gcc.target/s390/hotpatch-22.c: Likewise.
* gcc.target/s390/hotpatch-23.c: Likewise.
* gcc.target/s390/hotpatch-24.c: Likewise.
* gcc.target/s390/hotpatch-2.c: Also check hotpatch alignment.
* gcc.target/s390/hotpatch-1.c: Update expected output.
* gcc.target/s390/hotpatch-2.c: Likewise.
* gcc.target/s390/hotpatch-3.c: Likewise.
* gcc.target/s390/hotpatch-4.c: Likewise.
* gcc.target/s390/hotpatch-5.c: Likewise.
* gcc.target/s390/hotpatch-6.c: Likewise.
* gcc.target/s390/hotpatch-7.c: Likewise.
* gcc.target/s390/hotpatch-8.c: Likewise.
* gcc.target/s390/hotpatch-9.c: Likewise.
* gcc.target/s390/hotpatch-10.c: Likewise.
* gcc.target/s390/hotpatch-11.c: Likewise.
* gcc.target/s390/hotpatch-12.c: Likewise.
* gcc.target/s390/hotpatch-13.c: Likewise.
* gcc.target/s390/hotpatch-14.c: Likewise.
* gcc.target/s390/hotpatch-15.c: Likewise.
* gcc.target/s390/hotpatch-16.c: Likewise.
* gcc.target/s390/hotpatch-17.c: Likewise.
* gcc.target/s390/hotpatch-18.c: Likewise.
* gcc.target/s390/hotpatch-19.c: Likewise.
2015-03-12 Ilya Enkovich <ilya.enkovich@intel.com> 2015-03-12 Ilya Enkovich <ilya.enkovich@intel.com>
PR target/65103 PR target/65103
......
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 999 } } */ /* { dg-final { scan-assembler-times "nopr\t%r7" 999 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -14,4 +14,4 @@ void hp1(void) ...@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -14,4 +14,4 @@ void hp1(void) ...@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */ /* { dg-final { scan-assembler-times "nop\t0" 1 } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -14,4 +14,4 @@ void hp1(void) ...@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */ /* { dg-final { scan-assembler-times "nop\t0" 1 } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -14,4 +14,4 @@ void hp1(void) ...@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */ /* { dg-final { scan-assembler-times "nop\t0" 1 } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -14,4 +14,4 @@ void hp1(void) ...@@ -14,4 +14,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -20,4 +20,4 @@ void hp1(void) ...@@ -20,4 +20,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */ /* { dg-final { scan-assembler-times "nop\t0" 1 } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -13,4 +13,5 @@ void hp1(void) ...@@ -13,4 +13,5 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
/* { dg-final { scan-assembler-times "\.align\t8" 2 } } */
/* Functional tests for the function hotpatching feature. */
/* { dg-do compile } */
/* { dg-options "-O3 -mzarch -mhotpatch=0,1" } */
#include <stdio.h>
void __attribute__ ((aligned(512))) hp1(void)
{
printf("hello, world!\n");
}
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "\.align\t512" 2 } } */
/* Functional tests for the function hotpatching feature. */
/* { dg-do compile } */
/* { dg-options "-O3 -mzarch -mhotpatch=0,1 -falign-functions=1024" } */
#include <stdio.h>
void hp1(void)
{
printf("hello, world!\n");
}
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "\.align\t1024" 2 } } */
/* Functional tests for the function hotpatching feature. */
/* { dg-do compile } */
/* { dg-options "-O3 -mzarch -mhotpatch=0,1 -falign-functions=4096" } */
#include <stdio.h>
void __attribute__ ((aligned(2048))) hp1(void)
{
printf("hello, world!\n");
}
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "\.align\t2048" 2 } } */
/* Functional tests for the function hotpatching feature. */
/* { dg-do compile } */
/* { dg-options "-O3 -mzarch -mhotpatch=0,1 -falign-functions=2048" } */
#include <stdio.h>
void __attribute__ ((aligned(4096))) hp1(void)
{
printf("hello, world!\n");
}
/* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "\.align\t4096" 2 } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */ /* { dg-final { scan-assembler-times "nop\t0" 1 } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-times "brcl\t\t0,0" 1 } } */ /* { dg-final { scan-assembler-times "brcl\t0, 0" 1 } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-times "brcl\t\t0,0" 1 } } */ /* { dg-final { scan-assembler-times "brcl\t0, 0" 1 } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */ /* { dg-final { scan-assembler-times "nop\t0" 1 } } */
/* { dg-final { scan-assembler-times "brcl\t\t0,0" 1 } } */ /* { dg-final { scan-assembler-times "brcl\t0, 0" 1 } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-not "nop\t0" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */
/* { dg-final { scan-assembler-times "brcl\t\t0,0" 2 } } */ /* { dg-final { scan-assembler-times "brcl\t0, 0" 2 } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
/* { dg-final { scan-assembler-times "nop\t0" 1 } } */ /* { dg-final { scan-assembler-times "nop\t0" 1 } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
...@@ -13,4 +13,4 @@ void hp1(void) ...@@ -13,4 +13,4 @@ void hp1(void)
/* Check number of occurences of certain instructions. */ /* Check number of occurences of certain instructions. */
/* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
/* { dg-final { scan-assembler-times "nop\t0" 2 } } */ /* { dg-final { scan-assembler-times "nop\t0" 2 } } */
/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ /* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment