From patchwork Thu Mar 5 12:40:19 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominik Vogt X-Patchwork-Id: 446692 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id AE20F14009B for ; Thu, 5 Mar 2015 23:40:39 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass reason="1024-bit key; unprotected key" header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=QFxbd3lj; dkim-adsp=none (unprotected policy); dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:reply-to:mime-version :content-type; q=dns; s=default; b=XNheOeaqqzrOCi3P/qzOgTHHQKpQ+ 6evf37qVItIHhUWD//5y3tnCSgkDJIc39tJVACtUQdFAKcJZFYEs+IFQDfwW0Oqn wP1702Z788wL6Bkfrq3UDLQ/Kc7QWfYZnxVocSnnvS7cIZdWBzin3wCAAxPbch01 eMIa4UT7/VesXY= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:reply-to:mime-version :content-type; s=default; bh=MZgU37kJszWWl/Vv1V4cLCwWnMk=; b=QFx bd3lj6a1w9/TCHEuMtDiUrLtoX10/LIzE+p8vzEfqxA9/Mfvgqa5jWX4Ivu5vyLv 94+xGMtClUn3qTDFoM3hFVxfRcqKJ9NSo3OGPzCplJTHjUrNlcyCjs2PafZ86oED OSW47LeVE13735PaFKqpD+2JbNvYrpfycquAQ+PM= Received: (qmail 119725 invoked by alias); 5 Mar 2015 12:40:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 119710 invoked by uid 89); 5 Mar 2015 12:40:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL, BAYES_00, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: e06smtp13.uk.ibm.com Received: from e06smtp13.uk.ibm.com (HELO e06smtp13.uk.ibm.com) (195.75.94.109) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Thu, 05 Mar 2015 12:40:28 +0000 Received: from /spool/local by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 5 Mar 2015 12:40:25 -0000 Received: from d06dlp01.portsmouth.uk.ibm.com (9.149.20.13) by e06smtp13.uk.ibm.com (192.168.101.143) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 5 Mar 2015 12:40:23 -0000 Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by d06dlp01.portsmouth.uk.ibm.com (Postfix) with ESMTP id 7AFCC17D805D for ; Thu, 5 Mar 2015 12:40:42 +0000 (GMT) Received: from d06av01.portsmouth.uk.ibm.com (d06av01.portsmouth.uk.ibm.com [9.149.37.212]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t25CeMkB1638830 for ; Thu, 5 Mar 2015 12:40:22 GMT Received: from d06av01.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av01.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t25CeMUB006117 for ; Thu, 5 Mar 2015 05:40:22 -0700 Received: from bl3ahm9f.de.ibm.com (dyn-9-152-212-36.boeblingen.de.ibm.com [9.152.212.36]) by d06av01.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id t25CeLAs006104 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO); Thu, 5 Mar 2015 05:40:22 -0700 Received: from dvogt by bl3ahm9f.de.ibm.com with local (Exim 4.76) (envelope-from ) id 1YTV4d-0001jI-SN; Thu, 05 Mar 2015 13:40:19 +0100 Date: Thu, 5 Mar 2015 13:40:19 +0100 From: Dominik Vogt To: gcc-patches@gcc.gnu.org Cc: Andreas Krebbel Subject: [PATCH] S390: Hotpatching fixes. Message-ID: <20150305124019.GA6266@linux.vnet.ibm.com> Reply-To: vogt@linux.vnet.ibm.com Mail-Followup-To: gcc-patches@gcc.gnu.org, Andreas Krebbel MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15030512-0013-0000-0000-0000032D38DB S390: Hotpatching fixes. * Properly align function labels with -mhotpatch and add test cases. * Include the nops after the function label in the area covered by cfi and debug information. * Correct a typo in the documentation. * Fix formatting in the generated 6-byte-NOP and adapt the test cases. Ciao Dominik ^_^ ^_^ From 2d42c989a83fac102294ebdff6e68ca4bd571915 Mon Sep 17 00:00:00 2001 From: Dominik Vogt Date: Mon, 23 Feb 2015 13:48:26 +0100 Subject: [PATCH] S390: Hotpatching fixes. * Properly align function labels with -mhotpatch and add test cases. * Include the nops after the function label in the area covered by cfi and debug information. * Correct a typo in the documentation. * Fix formatting in the generated 6-byte-NOP and adapt the test cases. --- gcc/config/s390/s390.c | 65 ++++++++++++++++++----------- gcc/config/s390/s390.md | 28 +++++++++++++ gcc/doc/invoke.texi | 4 +- gcc/testsuite/gcc.target/s390/hotpatch-1.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-10.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-11.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-12.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-13.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-14.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-15.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-16.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-17.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-18.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-19.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-2.c | 3 +- gcc/testsuite/gcc.target/s390/hotpatch-21.c | 14 +++++++ gcc/testsuite/gcc.target/s390/hotpatch-22.c | 14 +++++++ gcc/testsuite/gcc.target/s390/hotpatch-23.c | 14 +++++++ gcc/testsuite/gcc.target/s390/hotpatch-24.c | 14 +++++++ gcc/testsuite/gcc.target/s390/hotpatch-3.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-4.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-5.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-6.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-7.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-8.c | 2 +- gcc/testsuite/gcc.target/s390/hotpatch-9.c | 2 +- 26 files changed, 146 insertions(+), 46 deletions(-) create mode 100644 gcc/testsuite/gcc.target/s390/hotpatch-21.c create mode 100644 gcc/testsuite/gcc.target/s390/hotpatch-22.c create mode 100644 gcc/testsuite/gcc.target/s390/hotpatch-23.c create mode 100644 gcc/testsuite/gcc.target/s390/hotpatch-24.c diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 1924f2a..bac3555 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -5295,6 +5295,7 @@ s390_asm_output_function_label (FILE *asm_out_file, const char *fname, if (hotpatch_p) { + int function_alignment; int i; /* Add a trampoline code area before the function label and initialize it @@ -5308,34 +5309,13 @@ s390_asm_output_function_label (FILE *asm_out_file, const char *fname, stored directly before the label without crossing a cacheline boundary. All this is necessary to make sure the trampoline code can be changed atomically. */ + function_alignment = MAX (8, DECL_ALIGN (decl) / BITS_PER_UNIT); + if (! DECL_USER_ALIGN (decl)) + function_alignment = MAX (function_alignment, align_functions); + ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (function_alignment)); } 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 @@ -11368,6 +11348,7 @@ static void s390_reorg (void) { bool pool_overflow = false; + int hw_before, hw_after; /* Make sure all splits have been performed; splits after machine_dependent_reorg might confuse insn length counts. */ @@ -11503,6 +11484,40 @@ s390_reorg (void) if (insn_added_p) 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. */ diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index bf698b1..afc418b 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -153,6 +153,11 @@ UNSPECV_CAS UNSPECV_ATOMIC_OP + ; Hotpatching (unremovable NOPs) + UNSPECV_NOP_2_BYTE + UNSPECV_NOP_4_BYTE + UNSPECV_NOP_6_BYTE + ; Transactional Execution support UNSPECV_TBEGIN UNSPECV_TBEGIN_TDB @@ -10094,6 +10099,29 @@ ;; +;;- 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)] + "" + "brcl\t0, 0" + [(set_attr "op_type" "RIL")]) + + +;; ;;- Transactional execution instructions ;; diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index a87376e..3133c01 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -20045,9 +20045,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 prologue is generated for all functions in the compilation unit. 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 -larges nop like instructions the architecture allows (maximum +largest NOP like instructions the architecture allows (maximum 1000000). If both arguments are zero, hotpatching is disabled. diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-1.c b/gcc/testsuite/gcc.target/s390/hotpatch-1.c index 61d8f39..4e29817 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-1.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-1.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */ -/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ +/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-10.c b/gcc/testsuite/gcc.target/s390/hotpatch-10.c index 1097ab4..352c9d5 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-10.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-10.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */ -/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ +/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-11.c b/gcc/testsuite/gcc.target/s390/hotpatch-11.c index be08acc..beb8738 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-11.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-11.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */ -/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ +/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-12.c b/gcc/testsuite/gcc.target/s390/hotpatch-12.c index 6e909c0..d109478 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-12.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-12.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-times "nopr\t%r7" 999 } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */ -/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ +/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-13.c b/gcc/testsuite/gcc.target/s390/hotpatch-13.c index 959789c..9ac9f84 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-13.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-13.c @@ -14,4 +14,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */ -/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ +/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-14.c b/gcc/testsuite/gcc.target/s390/hotpatch-14.c index 0f1f41f..209e4ac 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-14.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-14.c @@ -14,4 +14,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { 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" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-15.c b/gcc/testsuite/gcc.target/s390/hotpatch-15.c index e306495..109034e 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-15.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-15.c @@ -14,4 +14,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-times "nopr\t%r7" 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" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-16.c b/gcc/testsuite/gcc.target/s390/hotpatch-16.c index 66f13fe..b01c1c3 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-16.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-16.c @@ -14,4 +14,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-times "nopr\t%r7" 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" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-17.c b/gcc/testsuite/gcc.target/s390/hotpatch-17.c index b301c5c..ce0b950 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-17.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-17.c @@ -14,4 +14,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */ -/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ +/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-18.c b/gcc/testsuite/gcc.target/s390/hotpatch-18.c index 1c06783..9a24d5e 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-18.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-18.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { dg-final { scan-assembler-not "nop\t0" } } */ -/* { dg-final { scan-assembler-not "brcl\t\t0,0" } } */ +/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-19.c b/gcc/testsuite/gcc.target/s390/hotpatch-19.c index a1ec9c7..3586da2 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-19.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-19.c @@ -20,4 +20,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-times "nopr\t%r7" 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" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-2.c b/gcc/testsuite/gcc.target/s390/hotpatch-2.c index 0c82a5a..18be5aa 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-2.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-2.c @@ -13,4 +13,5 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { 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 } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-21.c b/gcc/testsuite/gcc.target/s390/hotpatch-21.c new file mode 100644 index 0000000..d72dee3 --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/hotpatch-21.c @@ -0,0 +1,14 @@ +/* Functional tests for the function hotpatching feature. */ + +/* { dg-do compile } */ +/* { dg-options "-O3 -mzarch -mhotpatch=0,1" } */ + +#include + +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 } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-22.c b/gcc/testsuite/gcc.target/s390/hotpatch-22.c new file mode 100644 index 0000000..6507466 --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/hotpatch-22.c @@ -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 + +void hp1(void) +{ + printf("hello, world!\n"); +} + +/* Check number of occurences of certain instructions. */ +/* { dg-final { scan-assembler-times "\.align\t1024" 2 } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-23.c b/gcc/testsuite/gcc.target/s390/hotpatch-23.c new file mode 100644 index 0000000..7dce5b8 --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/hotpatch-23.c @@ -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 + +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 } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-24.c b/gcc/testsuite/gcc.target/s390/hotpatch-24.c new file mode 100644 index 0000000..4d6815c --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/hotpatch-24.c @@ -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 + +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 } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-3.c b/gcc/testsuite/gcc.target/s390/hotpatch-3.c index 041ef9c..8a2ab53 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-3.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-3.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { 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" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-4.c b/gcc/testsuite/gcc.target/s390/hotpatch-4.c index 050a065..9a69459 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-4.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-4.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { 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 } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-5.c b/gcc/testsuite/gcc.target/s390/hotpatch-5.c index 785dba7..b3d990f 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-5.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-5.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */ /* { 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 } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-6.c b/gcc/testsuite/gcc.target/s390/hotpatch-6.c index da96e43..10ba558 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-6.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-6.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { 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 } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-7.c b/gcc/testsuite/gcc.target/s390/hotpatch-7.c index b7c19d7..edf67d3 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-7.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-7.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { 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 } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-8.c b/gcc/testsuite/gcc.target/s390/hotpatch-8.c index 25edd9b..a179c4a 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-8.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-8.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-times "nopr\t%r7" 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" } } */ diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-9.c b/gcc/testsuite/gcc.target/s390/hotpatch-9.c index 2143f9d..c4e21f2 100644 --- a/gcc/testsuite/gcc.target/s390/hotpatch-9.c +++ b/gcc/testsuite/gcc.target/s390/hotpatch-9.c @@ -13,4 +13,4 @@ void hp1(void) /* Check number of occurences of certain instructions. */ /* { dg-final { scan-assembler-not "nopr\t%r7" } } */ /* { 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" } } */ -- 1.9.3