mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
58b387e61f
commit
f8af0e3050
|
|
@ -1,3 +1,18 @@
|
||||||
|
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,
|
||||||
|
|
||||||
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,
|
||||||
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
|
||||||
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)
|
||||||
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 @@
|
||||||
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 @@
|
||||||
"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
|
||||||
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.
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,30 @@
|
||||||
|
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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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 } } */
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
/* 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 } } */
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
/* 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 } } */
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
/* 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 } } */
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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)
|
||||||
/* 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" } } */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue