From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf2d.google.com (mail-qv1-xf2d.google.com [IPv6:2607:f8b0:4864:20::f2d]) by sourceware.org (Postfix) with ESMTPS id DD018394FC21 for ; Thu, 29 Apr 2021 06:38:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DD018394FC21 Received: by mail-qv1-xf2d.google.com with SMTP id x14so8742402qvr.5 for ; Wed, 28 Apr 2021 23:38:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=4nlaKaLKjkcgS3QE8jsMG/MU4Eyi2Usw6kxdHUg6j/0=; b=eSlr3puMugbHDlPH/zg8i5n6Jvz0vScxaNA+YR1Diti5IyILLdHC1f+jP9jujgt7CT ONy1Itmv7gewxhOc+KWxY+8TzmDsp2zfMWCAIsJZDFN++cYwYY6R3Eql5y8DPJsk1vxI YkZFdcKEIPnEhckIYrWafTmuKWRGVRt1wQ220pdLmhxTkrwL3w26QquuuMXJro7gAb5w DyR4U8SiTC896eQJLzwfFthC4mIAS+BEmBvgrrWi/C/dugWw2aWf9xG4KsL5cz6gA22s ds0BIkISrnl0Dub2JupnxHQHzM7Moc/Fl7Uyecu7qAtBFAY+4txgzi4IgRoEFlHJvSm6 EH4A== X-Gm-Message-State: AOAM530kVmoCpP/d17hlo3ZS2gs8f8v9mLqYtF3P1pOthvBa71i2tr4c dJv4NBaQ76j3PBZyzVq7ykcElyabhta4I4aTIHs= X-Google-Smtp-Source: ABdhPJzv+3k+vANi4AH5dekRoLD2lnQECm4AYYwOQ8UasRoNnFC+AuoQBiGJceRNL5tArOi+qO3aWifEgha32TsdtrU= X-Received: by 2002:ad4:4729:: with SMTP id l9mr10535538qvz.30.1619678332822; Wed, 28 Apr 2021 23:38:52 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Uros Bizjak Date: Thu, 29 Apr 2021 08:38:41 +0200 Message-ID: Subject: Re: add ASM_OUTPUT_MAX_SKIP_ALIGN to i386.h To: Alexandre Oliva Cc: "gcc-patches@gcc.gnu.org" , Jan Hubicka Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, 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 06:38:56 -0000 On Thu, Apr 29, 2021 at 6:04 AM Alexandre Oliva wrote: > > 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. OK. Thanks, Uros. > --- > 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< - bytes if it is within MAX_SKIP bytes. > - > - This is used to align code labels according to Intel recommendations. */ > - > -#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN > -#undef ASM_OUTPUT_MAX_SKIP_ALIGN > -#define ASM_OUTPUT_MAX_SKIP_ALIGN(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 > - > /* 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< - bytes if it is within MAX_SKIP bytes. > - > - This is used to align code labels according to Intel recommendations. */ > - > -#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN > -# define ASM_OUTPUT_MAX_SKIP_ALIGN(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 > > /* 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< - bytes if it is within MAX_SKIP bytes. > - > - This is used to align code labels according to Intel recommendations. */ > - > -#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 > > /* 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< - bytes if it is within MAX_SKIP bytes. > - > - This is used to align code labels according to Intel recommendations. */ > - > -#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN > -#define ASM_OUTPUT_MAX_SKIP_ALIGN(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 > - > /* 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< - bytes if it is within MAX_SKIP bytes. */ > - > #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 > - > /* 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