From c4551a27620670397b16101592d4689a339f77cb Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Thu, 29 Apr 2021 19:31:30 -0300 Subject: [PATCH] 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 2657dfe..afa9f1b 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 ab8a269..62fac88 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 b1b3bb3..00df79a 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 f76a283..d3cfd61 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 a23e7ab..57d6781 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 68f33f9..48079c8 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 96b46ba..97d6f38 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 b7f3e36..70ff29b 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -13937,8 +13937,8 @@ [(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 be99406..33012b2 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 4804016..70b2587 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 a0bbfd0..66cd192 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 c411ff5..862ba12 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 0cdd980..ea872a4 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. */ -- 2.7.4