forked from Imagelibrary/binutils-gdb
On x86, MAX_MEM_FOR_RS_ALIGN_CODE is 35, when the most common
alignment is 2**3 or 2**4, where the max memory required for the
alignment nops is 7 and 15 bytes respectively. So there is some
memory wasted since commit 83d94ae428. It's not a large amount,
especially considering that frag overhead on x86_46 is 144 bytes,
but even so I'd rather not be blamed for increasing gas memory usage.
So to reduce the memory we'd like to take the alignment into
consideration when initialising an rs_align_code frag. The only
difficulty here is start_bundle making an rs_align_code frag with an
alignment of zero initially, then later increasing the alignment. We
change that to use the bundle alignment when setting up the frag. I
think that is sufficient as bundle_align_p2 can't change in the middle
of a start_bundle/finish_bundle sequence.
I haven't modified any targets other than x86 in this patch. Most
won't benefit much due to using fairly small MAX_MEM_FOR_RS_ALIGN_CODE.
* read.c (start_bundle): Create rs_align_code frag with
bundle_align_p2 alignment, then set to zero alignment.
(finish_bundle): Adjust comment.
* frags.c (MAX_MEM_FOR_RS_ALIGN_CODE): Pass p2align and max
to macro.
* config/tc-i386.h (HANDLE_ALIGN): Assert that max_bytes is
sufficient for nop padding.
(max_mem_for_rs_align_code): New inline function.
(MAX_MEM_FOR_RS_ALIGN_CODE): Use it.
* config/tc-aarch64.h: Adjust MAX_MEM_FOR_RS_ALIGN_CODE.
* config/tc-alpha.h: Likewise.
* config/tc-arc.h: Likewise.
* config/tc-arm.h: Likewise.
* config/tc-epiphany.h: Likewise.
* config/tc-frv.h: Likewise.
* config/tc-ia64.h: Likewise.
* config/tc-kvx.h: Likewise.
* config/tc-loongarch.h: Likewise.
* config/tc-m32r.h: Likewise.
* config/tc-metag.h: Likewise.
* config/tc-mips.h: Likewise.
* config/tc-nds32.h: Likewise.
* config/tc-ppc.h: Likewise.
* config/tc-riscv.h: Likewise.
* config/tc-rl78.h: Likewise.
* config/tc-rx.h: Likewise.
* config/tc-score.h: Likewise.
* config/tc-sh.h: Likewise.
* config/tc-sparc.h: Likewise.
* config/tc-spu.h: Likewise.
* config/tc-tilegx.h: Likewise.
* config/tc-tilepro.h: Likewise.
* config/tc-visium.h: Likewise.
* config/tc-xtensa.h: Likewise.
94 lines
3.0 KiB
C
94 lines
3.0 KiB
C
/* tc-tilegx.h - Macros and type defines for a TILE-Gx chip.
|
|
Copyright (C) 2011-2025 Free Software Foundation, Inc.
|
|
|
|
This file is part of GAS, the GNU Assembler.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
MA 02110-1301, USA. */
|
|
|
|
#ifndef TC_TILEGX
|
|
|
|
#include "opcode/tilegx.h"
|
|
|
|
#define TC_TILEGX
|
|
|
|
#ifndef TARGET_BYTES_BIG_ENDIAN
|
|
#define TARGET_BYTES_BIG_ENDIAN 0
|
|
#endif
|
|
|
|
#define WORKING_DOT_WORD
|
|
|
|
#define TARGET_ARCH bfd_arch_tilegx
|
|
|
|
extern const char * tilegx_target_format (void);
|
|
#define TARGET_FORMAT tilegx_target_format ()
|
|
|
|
#define DWARF2_LINE_MIN_INSN_LENGTH 8
|
|
|
|
#define DIFF_EXPR_OK /* foo-. gets turned into PC relative relocs */
|
|
|
|
#define HANDLE_ALIGN(sec, fragp) tilegx_handle_align (fragp)
|
|
extern void tilegx_handle_align (struct frag *);
|
|
|
|
#define MAX_MEM_FOR_RS_ALIGN_CODE(p2align, max) (7 + 8)
|
|
|
|
struct tilegx_operand;
|
|
#define TC_FIX_TYPE const struct tilegx_operand *
|
|
|
|
/* Initialize the TC_FIX_TYPE field. */
|
|
#define TC_INIT_FIX_DATA(FIX) \
|
|
FIX->tc_fix_data = 0
|
|
|
|
extern void tilegx_cons_fix_new (struct frag *, int,
|
|
int, struct expressionS *);
|
|
#define TC_CONS_FIX_NEW(FRAG, WHERE, NBYTES, EXP, RELOC) \
|
|
tilegx_cons_fix_new (FRAG, WHERE, NBYTES, EXP)
|
|
|
|
extern int tilegx_parse_name (char *, expressionS *, char *);
|
|
#define md_parse_name(name, e, m, nextP) tilegx_parse_name (name, e, nextP)
|
|
|
|
extern int tilegx_fix_adjustable (struct fix *);
|
|
#define tc_fix_adjustable(FIX) tilegx_fix_adjustable (FIX)
|
|
|
|
extern int tilegx_unrecognized_line (int);
|
|
#define tc_unrecognized_line(ch) tilegx_unrecognized_line (ch)
|
|
|
|
/* Values passed to md_apply_fix3 don't include the symbol value. */
|
|
#define MD_APPLY_SYM_VALUE(FIX) 0
|
|
|
|
#define md_convert_frag(b,s,f) \
|
|
as_fatal ("tilegx convert_frag called")
|
|
#define md_estimate_size_before_relax(f,s) \
|
|
(as_fatal ("tilegx estimate_size_before_relax called"),1)
|
|
#define md_operand(x)
|
|
|
|
#define md_section_align(seg,size) (size)
|
|
|
|
/* We want .cfi_* pseudo-ops for generating unwind info. */
|
|
#define TARGET_USE_CFIPOP 1
|
|
|
|
#define tc_cfi_frame_initial_instructions tilegx_cfi_frame_initial_instructions
|
|
extern void tilegx_cfi_frame_initial_instructions (void);
|
|
|
|
#define tc_regname_to_dw2regnum tc_tilegx_regname_to_dw2regnum
|
|
extern int tc_tilegx_regname_to_dw2regnum (char *);
|
|
|
|
extern int tilegx_cie_data_alignment;
|
|
|
|
#define DWARF2_DEFAULT_RETURN_COLUMN 55
|
|
#define DWARF2_CIE_DATA_ALIGNMENT tilegx_cie_data_alignment
|
|
|
|
#endif /* TC_TILEGX */
|