From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rock.gnat.com (rock.gnat.com [205.232.38.15]) by sourceware.org (Postfix) with ESMTP id E73183857830 for ; Thu, 29 Apr 2021 04:04:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E73183857830 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oliva@adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 7EF295619F; Thu, 29 Apr 2021 00:04:19 -0400 (EDT) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id mpxVgBWEGvzu; Thu, 29 Apr 2021 00:04:19 -0400 (EDT) Received: from free.home (tron.gnat.com [IPv6:2620:20:4000:0:46a8:42ff:fe0e:e294]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPS id 14B685619A; Thu, 29 Apr 2021 00:04:17 -0400 (EDT) Received: from livre (livre.home [172.31.160.2]) by free.home (8.15.2/8.15.2) with ESMTPS id 13T444Ah1633876 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Apr 2021 01:04:06 -0300 From: Alexandre Oliva To: Uros Bizjak Cc: "gcc-patches\@gcc.gnu.org" , Jan Hubicka Subject: Re: add ASM_OUTPUT_MAX_SKIP_ALIGN to i386.h Organization: Free thinker, does not speak for AdaCore References: Errors-To: aoliva@lxoliva.fsfla.org Date: Thu, 29 Apr 2021 01:04:04 -0300 In-Reply-To: (Uros Bizjak's message of "Wed, 28 Apr 2021 10:24:19 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Scanned-By: MIMEDefang 2.84 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 Apr 2021 04:04:22 -0000 On Apr 28, 2021, Uros Bizjak wrote: > i386.h is actually the default $tm_file for i386 and x86_64. It is not > possible to use x86-64.h without i386.h, so you can simply delete the > definition in x86-64.h. > Regarding _PAD variant, please remove it and substitute #ifdef > ASM_OUTPUT_MAX_SKIP_PAD with #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN. > No need to #undef here, i386.h is $tm_file and always included first. > By moving the definition to $tm_file, it effectively becomes the > default for the whole target directory, so please just remove now > redundant redefinitions-to-same in other target files. Thanks, here's a patch that does all of the above, regstrapped on x86_64-linux-gnu. Ok to install? add ASM_OUTPUT_MAX_SKIP_ALIGN to i386.h Several i386 align tests expect p2align to be used, but not all configurations define ASM_OUTPUT_MAX_SKIP_ALIGN, even when HAVE_GAS_MAX_SKIP_P2ALIGN. i386.h had an equivalent ASM_OUTPUT_MAX_SKIP_PAD. I've renamed it and its uses to the documented _ALIGN spelling, and dropped all redundant defines elsewhere in gcc/config/i386/. for gcc/ChangeLog * config/i386/i386.h (ASM_OUTPUT_MAX_SKIP_PAD): Rename to... (ASM_OUTPUT_MAX_SKIP_ALIGN): ... this. Enclose in do/while(0). * config/i386/i386.c: Adjust. * config/i386/i386.md: Adjust. * config/i386/darwin.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Drop. * config/i386/dragonfly.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. * config/i386/freebsd.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. * config/i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. * config/i386/gnu-user.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. * config/i386/iamcu.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. * config/i386/lynx.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. * config/i386/netbsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. * config/i386/openbsdelf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. * config/i386/x86-64.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. (ASM_OUTPUT_MAX_SKIP_PAD): Likewise. --- gcc/config/i386/darwin.h | 12 ------------ gcc/config/i386/dragonfly.h | 17 ----------------- gcc/config/i386/freebsd.h | 13 ------------- gcc/config/i386/gas.h | 16 ---------------- gcc/config/i386/gnu-user.h | 12 ------------ gcc/config/i386/i386.c | 4 ++-- gcc/config/i386/i386.h | 14 +++++++------- gcc/config/i386/i386.md | 4 ++-- gcc/config/i386/iamcu.h | 10 ---------- gcc/config/i386/lynx.h | 18 ------------------ gcc/config/i386/netbsd-elf.h | 16 ---------------- gcc/config/i386/openbsdelf.h | 16 ---------------- gcc/config/i386/x86-64.h | 24 ------------------------ 13 files changed, 11 insertions(+), 165 deletions(-) diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index 2657dfe266e92..afa9f1bb1a65c 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -217,18 +217,6 @@ along with GCC; see the file COPYING3. If not see } \ } while (0) -#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN -#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ - do { \ - if ((LOG) != 0) { \ - if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } \ - } while (0) -#endif - /* Darwin x86 assemblers support the .ident directive. */ #undef TARGET_ASM_OUTPUT_IDENT diff --git a/gcc/config/i386/dragonfly.h b/gcc/config/i386/dragonfly.h index ab8a269620fa7..62fac8805c814 100644 --- a/gcc/config/i386/dragonfly.h +++ b/gcc/config/i386/dragonfly.h @@ -61,23 +61,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define SUBTARGET_EXTRA_SPECS \ { "dfbsd_dynamic_linker", DFBSD_DYNAMIC_LINKER } -/* A C statement to output to the stdio stream FILE an assembler - command to advance the location counter to a multiple of 1<= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } -#endif - /* Don't default to pcc-struct-return, we want to retain compatibility with older gcc versions AND pcc-struct-return is nonreentrant. (even though the SVR4 ABI for the i386 says that records and unions are diff --git a/gcc/config/i386/freebsd.h b/gcc/config/i386/freebsd.h index b1b3bb34cc0df..00df79a7f574d 100644 --- a/gcc/config/i386/freebsd.h +++ b/gcc/config/i386/freebsd.h @@ -96,19 +96,6 @@ along with GCC; see the file COPYING3. If not see #define SUBALIGN_LOG 3 -#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN -#undef ASM_OUTPUT_MAX_SKIP_ALIGN -#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ - do { \ - if ((LOG) != 0) { \ - if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } \ - } while (0) -#endif - /* Don't default to pcc-struct-return, we want to retain compatibility with older gcc versions AND pcc-struct-return is nonreentrant. (even though the SVR4 ABI for the i386 says that records and unions are diff --git a/gcc/config/i386/gas.h b/gcc/config/i386/gas.h index f76a2835fca61..d3cfd61cf19fa 100644 --- a/gcc/config/i386/gas.h +++ b/gcc/config/i386/gas.h @@ -59,22 +59,6 @@ along with GCC; see the file COPYING3. If not see #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG)!=0) fprintf ((FILE), "\t.balign %d\n", 1 << (LOG)) #endif - -/* A C statement to output to the stdio stream FILE an assembler - command to advance the location counter to a multiple of 1<= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } -#endif /* A C statement or statements which output an assembler instruction opcode to the stdio stream STREAM. The macro-operand PTR is a diff --git a/gcc/config/i386/gnu-user.h b/gcc/config/i386/gnu-user.h index a23e7ab3eb791..57d6781362794 100644 --- a/gcc/config/i386/gnu-user.h +++ b/gcc/config/i386/gnu-user.h @@ -93,18 +93,6 @@ along with GCC; see the file COPYING3. If not see #define SUBALIGN_LOG 3 -#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN -#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ - do { \ - if ((LOG) != 0) { \ - if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } \ - } while (0) -#endif - /* Handle special EH pointer encodings. Absolute, pc-relative, and indirect are handled automatically. */ #define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \ diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index adcef1e98bf55..d975b7990fcc4 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -20946,7 +20946,7 @@ ix86_min_insn_size (rtx_insn *insn) return 2; } -#ifdef ASM_OUTPUT_MAX_SKIP_PAD +#ifdef ASM_OUTPUT_MAX_SKIP_ALIGN /* AMD K8 core mispredicts jumps when there are more than 3 jumps in 16 byte window. */ @@ -21274,7 +21274,7 @@ ix86_reorg (void) ix86_pad_short_function (); else if (TARGET_PAD_RETURNS) ix86_pad_returns (); -#ifdef ASM_OUTPUT_MAX_SKIP_PAD +#ifdef ASM_OUTPUT_MAX_SKIP_ALIGN if (TARGET_FOUR_JUMP_LIMIT) ix86_avoid_jump_mispredicts (); #endif diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 96b46bac23858..97d6f3863cb29 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2068,15 +2068,15 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER]; bytes if it is within MAX_SKIP bytes. */ #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN -#undef ASM_OUTPUT_MAX_SKIP_PAD -#define ASM_OUTPUT_MAX_SKIP_PAD(FILE, LOG, MAX_SKIP) \ - if ((LOG) != 0) \ - { \ +# define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ + do { \ + if ((LOG) != 0) { \ if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ + fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } + fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ + } \ + } while (0) #endif /* Write the extra assembler code needed to declare a function diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index eff189f17b4d3..4e12027d3eba3 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -13937,8 +13937,8 @@ (define_insn "pad" [(unspec_volatile [(match_operand 0)] UNSPECV_ALIGN)] "" { -#ifdef ASM_OUTPUT_MAX_SKIP_PAD - ASM_OUTPUT_MAX_SKIP_PAD (asm_out_file, 4, (int)INTVAL (operands[0])); +#ifdef ASM_OUTPUT_MAX_SKIP_ALIGN + ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file, 4, (int)INTVAL (operands[0])); #else /* It is tempting to use ASM_OUTPUT_ALIGN here, but we don't want to do that. The align insn is used to avoid 3 jump instructions in the row to improve diff --git a/gcc/config/i386/iamcu.h b/gcc/config/i386/iamcu.h index be99406b3b748..33012b2526dab 100644 --- a/gcc/config/i386/iamcu.h +++ b/gcc/config/i386/iamcu.h @@ -66,16 +66,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define SUBALIGN_LOG 3 -#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ - do { \ - if ((LOG) != 0) { \ - if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } \ - } while (0) - /* Handle special EH pointer encodings. Absolute, pc-relative, and indirect are handled automatically. */ #define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \ diff --git a/gcc/config/i386/lynx.h b/gcc/config/i386/lynx.h index 480401688436e..70b2587e6cbf3 100644 --- a/gcc/config/i386/lynx.h +++ b/gcc/config/i386/lynx.h @@ -50,24 +50,6 @@ along with GCC; see the file COPYING3. If not see : (n) == 7 ? 4 \ : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (int) (n) + 8 \ : (-1)) - -/* A C statement to output to the stdio stream FILE an assembler - command to advance the location counter to a multiple of 1<= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } \ - } while (0) -#endif /* Undefine SUBTARGET_EXTRA_SPECS it is empty anyway. We define it in config/lynx.h. */ diff --git a/gcc/config/i386/netbsd-elf.h b/gcc/config/i386/netbsd-elf.h index a0bbfd0ef405e..66cd192cf8a19 100644 --- a/gcc/config/i386/netbsd-elf.h +++ b/gcc/config/i386/netbsd-elf.h @@ -95,22 +95,6 @@ along with GCC; see the file COPYING3. If not see assemble_name(FILE, NAME2); \ fputc('\n', FILE); } while (0) -/* A C statement to output to the stdio stream FILE an assembler - command to advance the location counter to a multiple of 1<= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } -#endif - /* We always use gas here, so we don't worry about ECOFF assembler problems. */ #undef TARGET_GAS diff --git a/gcc/config/i386/openbsdelf.h b/gcc/config/i386/openbsdelf.h index c411ff5309a07..862ba12583f5c 100644 --- a/gcc/config/i386/openbsdelf.h +++ b/gcc/config/i386/openbsdelf.h @@ -61,24 +61,8 @@ along with GCC; see the file COPYING3. If not see #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" -/* A C statement to output to the stdio stream FILE an assembler - command to advance the location counter to a multiple of 1<= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } \ - } while (0) -#endif - /* OpenBSD's profiler recovers all information from the stack pointer. The icky part is not here, but in . */ #undef FUNCTION_PROFILER diff --git a/gcc/config/i386/x86-64.h b/gcc/config/i386/x86-64.h index 0cdd980f48105..ea872a487216c 100644 --- a/gcc/config/i386/x86-64.h +++ b/gcc/config/i386/x86-64.h @@ -70,32 +70,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see } \ while (0) -/* This is used to align code labels according to Intel recommendations. */ - #define SUBALIGN_LOG 3 -#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN -#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ - do { \ - if ((LOG) != 0) { \ - if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } \ - } while (0) -#undef ASM_OUTPUT_MAX_SKIP_PAD -#define ASM_OUTPUT_MAX_SKIP_PAD(FILE, LOG, MAX_SKIP) \ - if ((LOG) != 0) \ - { \ - if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \ - fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else \ - fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ - } -#endif - - /* i386 System V Release 4 uses DWARF debugging info. x86-64 ABI specifies DWARF2. */ -- Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ Free Software Activist GNU Toolchain Engineer Vim, Vi, Voltei pro Emacs -- GNUlius Caesar