defaults.h revision 132718
190075Sobrien/* Definitions of various defaults for tm.h macros. 2132718Skan Copyright (C) 1992, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 390075Sobrien Free Software Foundation, Inc. 451885Sobrien Contributed by Ron Guilmette (rfg@monkeys.com) 518334Speter 690075SobrienThis file is part of GCC. 718334Speter 890075SobrienGCC is free software; you can redistribute it and/or modify it under 990075Sobrienthe terms of the GNU General Public License as published by the Free 1090075SobrienSoftware Foundation; either version 2, or (at your option) any later 1190075Sobrienversion. 1218334Speter 1390075SobrienGCC is distributed in the hope that it will be useful, but WITHOUT ANY 1490075SobrienWARRANTY; without even the implied warranty of MERCHANTABILITY or 1590075SobrienFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1690075Sobrienfor more details. 1718334Speter 1818334SpeterYou should have received a copy of the GNU General Public License 1990075Sobrienalong with GCC; see the file COPYING. If not, write to the Free 2090075SobrienSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA 2190075Sobrien02111-1307, USA. */ 2218334Speter 2390075Sobrien#ifndef GCC_DEFAULTS_H 2490075Sobrien#define GCC_DEFAULTS_H 2590075Sobrien 26117395Skan#ifndef GET_ENVIRONMENT 27117395Skan#define GET_ENVIRONMENT(VALUE, NAME) do { (VALUE) = getenv (NAME); } while (0) 28117395Skan#endif 29117395Skan 30132718Skan#define obstack_chunk_alloc ((void *(*) (long)) xmalloc) 31132718Skan#define obstack_chunk_free ((void (*) (void *)) free) 32132718Skan#define OBSTACK_CHUNK_SIZE 0 33132718Skan#define gcc_obstack_init(OBSTACK) \ 34132718Skan _obstack_begin ((OBSTACK), OBSTACK_CHUNK_SIZE, 0, \ 35132718Skan obstack_chunk_alloc, \ 36132718Skan obstack_chunk_free) 37117395Skan 3890075Sobrien/* Define default standard character escape sequences. */ 3990075Sobrien#ifndef TARGET_BELL 4090075Sobrien# define TARGET_BELL 007 4190075Sobrien# define TARGET_BS 010 4290075Sobrien# define TARGET_TAB 011 4390075Sobrien# define TARGET_NEWLINE 012 4490075Sobrien# define TARGET_VT 013 4590075Sobrien# define TARGET_FF 014 4690075Sobrien# define TARGET_CR 015 4790075Sobrien# define TARGET_ESC 033 4890075Sobrien#endif 4990075Sobrien 50132718Skan/* Store in OUTPUT a string (made with alloca) containing an 51132718Skan assembler-name for a local static variable or function named NAME. 5218334Speter LABELNO is an integer which is different for each call. */ 5318334Speter 54132718Skan#ifndef ASM_PN_FORMAT 55132718Skan# ifndef NO_DOT_IN_LABEL 56132718Skan# define ASM_PN_FORMAT "%s.%lu" 57132718Skan# else 58132718Skan# ifndef NO_DOLLAR_IN_LABEL 59132718Skan# define ASM_PN_FORMAT "%s$%lu" 60132718Skan# else 61132718Skan# define ASM_PN_FORMAT "__%s_%lu" 62132718Skan# endif 63132718Skan# endif 64132718Skan#endif /* ! ASM_PN_FORMAT */ 65132718Skan 6618334Speter#ifndef ASM_FORMAT_PRIVATE_NAME 67132718Skan# define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ 68132718Skan do { const char *const name_ = (NAME); \ 69132718Skan char *const output_ = (OUTPUT) = alloca (strlen (name_) + 32);\ 70132718Skan sprintf (output_, ASM_PN_FORMAT, name_, (unsigned long)(LABELNO)); \ 7118334Speter } while (0) 7218334Speter#endif 7318334Speter 7418334Speter#ifndef ASM_STABD_OP 7590075Sobrien#define ASM_STABD_OP "\t.stabd\t" 7618334Speter#endif 7718334Speter 7818334Speter/* This is how to output an element of a case-vector that is absolute. 7918334Speter Some targets don't use this, but we have to define it anyway. */ 8018334Speter 8118334Speter#ifndef ASM_OUTPUT_ADDR_VEC_ELT 8218334Speter#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ 8390075Sobriendo { fputs (integer_asm_op (POINTER_SIZE / UNITS_PER_WORD, TRUE), FILE); \ 84132718Skan (*targetm.asm_out.internal_label) (FILE, "L", (VALUE)); \ 8518334Speter fputc ('\n', FILE); \ 8618334Speter } while (0) 8718334Speter#endif 8818334Speter 89132718Skan/* Choose a reasonable default for ASM_OUTPUT_ASCII. */ 9018334Speter 9118334Speter#ifndef ASM_OUTPUT_ASCII 9218334Speter#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \ 9318334Speter do { \ 9418334Speter FILE *_hide_asm_out_file = (MYFILE); \ 9590075Sobrien const unsigned char *_hide_p = (const unsigned char *) (MYSTRING); \ 9618334Speter int _hide_thissize = (MYLENGTH); \ 9718334Speter { \ 9818334Speter FILE *asm_out_file = _hide_asm_out_file; \ 9990075Sobrien const unsigned char *p = _hide_p; \ 10018334Speter int thissize = _hide_thissize; \ 10118334Speter int i; \ 10218334Speter fprintf (asm_out_file, "\t.ascii \""); \ 10318334Speter \ 10418334Speter for (i = 0; i < thissize; i++) \ 10518334Speter { \ 10690075Sobrien int c = p[i]; \ 10718334Speter if (c == '\"' || c == '\\') \ 10818334Speter putc ('\\', asm_out_file); \ 10990075Sobrien if (ISPRINT(c)) \ 11018334Speter putc (c, asm_out_file); \ 11118334Speter else \ 11218334Speter { \ 11318334Speter fprintf (asm_out_file, "\\%o", c); \ 11418334Speter /* After an octal-escape, if a digit follows, \ 11518334Speter terminate one string constant and start another. \ 11690075Sobrien The VAX assembler fails to stop reading the escape \ 11718334Speter after three digits, so this is the only way we \ 11818334Speter can get it to parse the data properly. */ \ 11990075Sobrien if (i < thissize - 1 && ISDIGIT(p[i + 1])) \ 12018334Speter fprintf (asm_out_file, "\"\n\t.ascii \""); \ 12118334Speter } \ 12218334Speter } \ 12318334Speter fprintf (asm_out_file, "\"\n"); \ 12418334Speter } \ 12518334Speter } \ 12618334Speter while (0) 12718334Speter#endif 12818334Speter 12918334Speter/* This is how we tell the assembler to equate two values. */ 13018334Speter#ifdef SET_ASM_OP 13118334Speter#ifndef ASM_OUTPUT_DEF 13218334Speter#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ 13390075Sobrien do { fprintf ((FILE), "%s", SET_ASM_OP); \ 13418334Speter assemble_name (FILE, LABEL1); \ 13518334Speter fprintf (FILE, ","); \ 13618334Speter assemble_name (FILE, LABEL2); \ 13718334Speter fprintf (FILE, "\n"); \ 13818334Speter } while (0) 13918334Speter#endif 14018334Speter#endif 14118334Speter 142117395Skan/* This is how to output the definition of a user-level label named 143117395Skan NAME, such as the label on a static function or variable NAME. */ 144117395Skan 145117395Skan#ifndef ASM_OUTPUT_LABEL 146117395Skan#define ASM_OUTPUT_LABEL(FILE,NAME) \ 147117395Skan do { assemble_name ((FILE), (NAME)); fputs (":\n", (FILE)); } while (0) 148117395Skan#endif 149117395Skan 15051885Sobrien/* This is how to output a reference to a user-level label named NAME. */ 15151885Sobrien 15251885Sobrien#ifndef ASM_OUTPUT_LABELREF 15356173Sobrien#define ASM_OUTPUT_LABELREF(FILE,NAME) asm_fprintf ((FILE), "%U%s", (NAME)) 15451885Sobrien#endif 15551885Sobrien 15690075Sobrien/* Allow target to print debug info labels specially. This is useful for 15790075Sobrien VLIW targets, since debug info labels should go into the middle of 15890075Sobrien instruction bundles instead of breaking them. */ 15990075Sobrien 16090075Sobrien#ifndef ASM_OUTPUT_DEBUG_LABEL 16190075Sobrien#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \ 162132718Skan (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM) 16390075Sobrien#endif 16490075Sobrien 16590075Sobrien/* This is how we tell the assembler that a symbol is weak. */ 16690075Sobrien#ifndef ASM_OUTPUT_WEAK_ALIAS 16790075Sobrien#if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_DEF) 16890075Sobrien#define ASM_OUTPUT_WEAK_ALIAS(STREAM, NAME, VALUE) \ 16990075Sobrien do \ 17090075Sobrien { \ 17190075Sobrien ASM_WEAKEN_LABEL (STREAM, NAME); \ 17290075Sobrien if (VALUE) \ 17390075Sobrien ASM_OUTPUT_DEF (STREAM, NAME, VALUE); \ 17490075Sobrien } \ 17590075Sobrien while (0) 17690075Sobrien#endif 17790075Sobrien#endif 17890075Sobrien 179117395Skan/* How to emit a .type directive. */ 180117395Skan#ifndef ASM_OUTPUT_TYPE_DIRECTIVE 181117395Skan#if defined TYPE_ASM_OP && defined TYPE_OPERAND_FMT 182117395Skan#define ASM_OUTPUT_TYPE_DIRECTIVE(STREAM, NAME, TYPE) \ 183117395Skan do \ 184117395Skan { \ 185117395Skan fputs (TYPE_ASM_OP, STREAM); \ 186117395Skan assemble_name (STREAM, NAME); \ 187117395Skan fputs (", ", STREAM); \ 188117395Skan fprintf (STREAM, TYPE_OPERAND_FMT, TYPE); \ 189117395Skan putc ('\n', STREAM); \ 190117395Skan } \ 191117395Skan while (0) 192117395Skan#endif 193117395Skan#endif 194117395Skan 195117395Skan/* How to emit a .size directive. */ 196117395Skan#ifndef ASM_OUTPUT_SIZE_DIRECTIVE 197117395Skan#ifdef SIZE_ASM_OP 198117395Skan#define ASM_OUTPUT_SIZE_DIRECTIVE(STREAM, NAME, SIZE) \ 199117395Skan do \ 200117395Skan { \ 201117395Skan HOST_WIDE_INT size_ = (SIZE); \ 202117395Skan fputs (SIZE_ASM_OP, STREAM); \ 203117395Skan assemble_name (STREAM, NAME); \ 204132718Skan fprintf (STREAM, ", " HOST_WIDE_INT_PRINT_DEC "\n", size_); \ 205117395Skan } \ 206117395Skan while (0) 207117395Skan 208117395Skan#define ASM_OUTPUT_MEASURED_SIZE(STREAM, NAME) \ 209117395Skan do \ 210117395Skan { \ 211117395Skan fputs (SIZE_ASM_OP, STREAM); \ 212117395Skan assemble_name (STREAM, NAME); \ 213117395Skan fputs (", .-", STREAM); \ 214117395Skan assemble_name (STREAM, NAME); \ 215117395Skan putc ('\n', STREAM); \ 216117395Skan } \ 217117395Skan while (0) 218117395Skan 219117395Skan#endif 220117395Skan#endif 221117395Skan 22218334Speter/* This determines whether or not we support weak symbols. */ 22318334Speter#ifndef SUPPORTS_WEAK 22496263Sobrien#if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL) 22518334Speter#define SUPPORTS_WEAK 1 22618334Speter#else 22718334Speter#define SUPPORTS_WEAK 0 22818334Speter#endif 22918334Speter#endif 23051885Sobrien 23190075Sobrien/* This determines whether or not we support link-once semantics. */ 23290075Sobrien#ifndef SUPPORTS_ONE_ONLY 23390075Sobrien#ifdef MAKE_DECL_ONE_ONLY 23490075Sobrien#define SUPPORTS_ONE_ONLY 1 23590075Sobrien#else 23690075Sobrien#define SUPPORTS_ONE_ONLY 0 23790075Sobrien#endif 23890075Sobrien#endif 23990075Sobrien 240117395Skan/* By default, there is no prefix on user-defined symbols. */ 241117395Skan#ifndef USER_LABEL_PREFIX 242117395Skan#define USER_LABEL_PREFIX "" 243117395Skan#endif 244117395Skan 24556173Sobrien/* If the target supports weak symbols, define TARGET_ATTRIBUTE_WEAK to 24656173Sobrien provide a weak attribute. Else define it to nothing. 24756173Sobrien 24890075Sobrien This would normally belong in ansidecl.h, but SUPPORTS_WEAK is 24956173Sobrien not available at that time. 25056173Sobrien 25156173Sobrien Note, this is only for use by target files which we know are to be 25256173Sobrien compiled by GCC. */ 25356173Sobrien#ifndef TARGET_ATTRIBUTE_WEAK 25456173Sobrien# if SUPPORTS_WEAK 25556173Sobrien# define TARGET_ATTRIBUTE_WEAK __attribute__ ((weak)) 25656173Sobrien# else 25756173Sobrien# define TARGET_ATTRIBUTE_WEAK 25856173Sobrien# endif 25956173Sobrien#endif 26056173Sobrien 26190075Sobrien/* If the target supports init_priority C++ attribute, give 26290075Sobrien SUPPORTS_INIT_PRIORITY a nonzero value. */ 26390075Sobrien#ifndef SUPPORTS_INIT_PRIORITY 26490075Sobrien#define SUPPORTS_INIT_PRIORITY 1 26590075Sobrien#endif /* SUPPORTS_INIT_PRIORITY */ 26690075Sobrien 26790075Sobrien/* If duplicate library search directories can be removed from a 26890075Sobrien linker command without changing the linker's semantics, give this 26990075Sobrien symbol a nonzero. */ 27090075Sobrien#ifndef LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 27190075Sobrien#define LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 0 27290075Sobrien#endif /* LINK_ELIMINATE_DUPLICATE_LDIRECTORIES */ 27390075Sobrien 27451885Sobrien/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that 27551885Sobrien the rest of the DWARF 2 frame unwind support is also provided. */ 27651885Sobrien#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX) 27751885Sobrien#define DWARF2_UNWIND_INFO 1 27851885Sobrien#endif 27990075Sobrien 28090075Sobrien/* If we have named sections, and we're using crtstuff to run ctors, 28190075Sobrien use them for registering eh frame information. */ 282117395Skan#if defined (TARGET_ASM_NAMED_SECTION) && DWARF2_UNWIND_INFO \ 283117395Skan && !defined(EH_FRAME_IN_DATA_SECTION) 28490075Sobrien#ifndef EH_FRAME_SECTION_NAME 28590075Sobrien#define EH_FRAME_SECTION_NAME ".eh_frame" 28690075Sobrien#endif 28790075Sobrien#endif 28890075Sobrien 28990075Sobrien/* If we have named section and we support weak symbols, then use the 29090075Sobrien .jcr section for recording java classes which need to be registered 29190075Sobrien at program start-up time. */ 29290075Sobrien#if defined (TARGET_ASM_NAMED_SECTION) && SUPPORTS_WEAK 29390075Sobrien#ifndef JCR_SECTION_NAME 29490075Sobrien#define JCR_SECTION_NAME ".jcr" 29590075Sobrien#endif 29690075Sobrien#endif 29790075Sobrien 29890075Sobrien/* By default, we generate a label at the beginning and end of the 29990075Sobrien text section, and compute the size of the text section by 30090075Sobrien subtracting the two. However, on some platforms that doesn't 30190075Sobrien work, and we use the section itself, rather than a label at the 30290075Sobrien beginning of it, to indicate the start of the section. On such 30390075Sobrien platforms, define this to zero. */ 30490075Sobrien#ifndef DWARF2_GENERATE_TEXT_SECTION_LABEL 30590075Sobrien#define DWARF2_GENERATE_TEXT_SECTION_LABEL 1 30690075Sobrien#endif 30790075Sobrien 30890075Sobrien/* Supply a default definition for PROMOTE_PROTOTYPES. */ 30990075Sobrien#ifndef PROMOTE_PROTOTYPES 31090075Sobrien#define PROMOTE_PROTOTYPES 0 31190075Sobrien#endif 31290075Sobrien 31390075Sobrien/* Number of hardware registers that go into the DWARF-2 unwind info. 31490075Sobrien If not defined, equals FIRST_PSEUDO_REGISTER */ 31590075Sobrien 31690075Sobrien#ifndef DWARF_FRAME_REGISTERS 31790075Sobrien#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER 31890075Sobrien#endif 31990075Sobrien 32090075Sobrien/* How to renumber registers for dbx and gdb. If not defined, assume 32190075Sobrien no renumbering is necessary. */ 32290075Sobrien 32390075Sobrien#ifndef DBX_REGISTER_NUMBER 32490075Sobrien#define DBX_REGISTER_NUMBER(REGNO) (REGNO) 32590075Sobrien#endif 32690075Sobrien 32790075Sobrien/* Default sizes for base C types. If the sizes are different for 32890075Sobrien your target, you should override these values by defining the 32990075Sobrien appropriate symbols in your tm.h file. */ 33090075Sobrien 331117395Skan#ifndef BITS_PER_UNIT 332117395Skan#define BITS_PER_UNIT 8 333117395Skan#endif 334117395Skan 335117395Skan#ifndef BITS_PER_WORD 336117395Skan#define BITS_PER_WORD (BITS_PER_UNIT * UNITS_PER_WORD) 337117395Skan#endif 338117395Skan 33990075Sobrien#ifndef CHAR_TYPE_SIZE 34090075Sobrien#define CHAR_TYPE_SIZE BITS_PER_UNIT 34190075Sobrien#endif 34290075Sobrien 34396263Sobrien#ifndef BOOL_TYPE_SIZE 34496263Sobrien/* `bool' has size and alignment `1', on almost all platforms. */ 34596263Sobrien#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE 34696263Sobrien#endif 34796263Sobrien 34890075Sobrien#ifndef SHORT_TYPE_SIZE 34990075Sobrien#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2)) 35090075Sobrien#endif 35190075Sobrien 35290075Sobrien#ifndef INT_TYPE_SIZE 35390075Sobrien#define INT_TYPE_SIZE BITS_PER_WORD 35490075Sobrien#endif 35590075Sobrien 35690075Sobrien#ifndef LONG_TYPE_SIZE 35790075Sobrien#define LONG_TYPE_SIZE BITS_PER_WORD 35890075Sobrien#endif 35990075Sobrien 36090075Sobrien#ifndef LONG_LONG_TYPE_SIZE 36190075Sobrien#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2) 36290075Sobrien#endif 36390075Sobrien 36490075Sobrien#ifndef WCHAR_TYPE_SIZE 36590075Sobrien#define WCHAR_TYPE_SIZE INT_TYPE_SIZE 36690075Sobrien#endif 36790075Sobrien 36890075Sobrien#ifndef FLOAT_TYPE_SIZE 36990075Sobrien#define FLOAT_TYPE_SIZE BITS_PER_WORD 37090075Sobrien#endif 37190075Sobrien 37290075Sobrien#ifndef DOUBLE_TYPE_SIZE 37390075Sobrien#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) 37490075Sobrien#endif 37590075Sobrien 37690075Sobrien#ifndef LONG_DOUBLE_TYPE_SIZE 37790075Sobrien#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) 37890075Sobrien#endif 37990075Sobrien 380117395Skan/* Width in bits of a pointer. Mind the value of the macro `Pmode'. */ 381117395Skan#ifndef POINTER_SIZE 382117395Skan#define POINTER_SIZE BITS_PER_WORD 383117395Skan#endif 384117395Skan 38590075Sobrien#ifndef PIC_OFFSET_TABLE_REGNUM 38690075Sobrien#define PIC_OFFSET_TABLE_REGNUM INVALID_REGNUM 38790075Sobrien#endif 38890075Sobrien 38990075Sobrien/* By default, the preprocessor should be invoked the same way in C++ 39090075Sobrien as in C. */ 39190075Sobrien#ifndef CPLUSPLUS_CPP_SPEC 39290075Sobrien#ifdef CPP_SPEC 39390075Sobrien#define CPLUSPLUS_CPP_SPEC CPP_SPEC 39490075Sobrien#endif 39590075Sobrien#endif 39690075Sobrien 39790075Sobrien#ifndef ACCUMULATE_OUTGOING_ARGS 39890075Sobrien#define ACCUMULATE_OUTGOING_ARGS 0 39990075Sobrien#endif 40090075Sobrien 40190075Sobrien/* Supply a default definition for PUSH_ARGS. */ 40290075Sobrien#ifndef PUSH_ARGS 40390075Sobrien#ifdef PUSH_ROUNDING 40490075Sobrien#define PUSH_ARGS !ACCUMULATE_OUTGOING_ARGS 40590075Sobrien#else 40690075Sobrien#define PUSH_ARGS 0 40790075Sobrien#endif 40890075Sobrien#endif 40990075Sobrien 410132718Skan/* Decide whether a function's arguments should be processed 411132718Skan from first to last or from last to first. 412132718Skan 413132718Skan They should if the stack and args grow in opposite directions, but 414132718Skan only if we have push insns. */ 415132718Skan 416132718Skan#ifdef PUSH_ROUNDING 417132718Skan 418132718Skan#ifndef PUSH_ARGS_REVERSED 419132718Skan#if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD) 420132718Skan#define PUSH_ARGS_REVERSED PUSH_ARGS 421132718Skan#endif 422132718Skan#endif 423132718Skan 424132718Skan#endif 425132718Skan 426132718Skan#ifndef PUSH_ARGS_REVERSED 427132718Skan#define PUSH_ARGS_REVERSED 0 428132718Skan#endif 429132718Skan 43090075Sobrien/* If PREFERRED_STACK_BOUNDARY is not defined, set it to STACK_BOUNDARY. 43190075Sobrien STACK_BOUNDARY is required. */ 43290075Sobrien#ifndef PREFERRED_STACK_BOUNDARY 43390075Sobrien#define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY 43490075Sobrien#endif 43590075Sobrien 43690075Sobrien/* By default, the C++ compiler will use function addresses in the 437117395Skan vtable entries. Setting this nonzero tells the compiler to use 43890075Sobrien function descriptors instead. The value of this macro says how 43990075Sobrien many words wide the descriptor is (normally 2). It is assumed 44090075Sobrien that the address of a function descriptor may be treated as a 44190075Sobrien pointer to a function. */ 44290075Sobrien#ifndef TARGET_VTABLE_USES_DESCRIPTORS 44390075Sobrien#define TARGET_VTABLE_USES_DESCRIPTORS 0 44490075Sobrien#endif 44590075Sobrien 446117395Skan/* By default, the vtable entries are void pointers, the so the alignment 447117395Skan is the same as pointer alignment. The value of this macro specifies 448117395Skan the alignment of the vtable entry in bits. It should be defined only 449117395Skan when special alignment is necessary. */ 450117395Skan#ifndef TARGET_VTABLE_ENTRY_ALIGN 451117395Skan#define TARGET_VTABLE_ENTRY_ALIGN POINTER_SIZE 452117395Skan#endif 453117395Skan 454117395Skan/* There are a few non-descriptor entries in the vtable at offsets below 455117395Skan zero. If these entries must be padded (say, to preserve the alignment 456117395Skan specified by TARGET_VTABLE_ENTRY_ALIGN), set this to the number of 457117395Skan words in each data entry. */ 458117395Skan#ifndef TARGET_VTABLE_DATA_ENTRY_DISTANCE 459117395Skan#define TARGET_VTABLE_DATA_ENTRY_DISTANCE 1 460117395Skan#endif 461117395Skan 46290075Sobrien/* Select a format to encode pointers in exception handling data. We 46390075Sobrien prefer those that result in fewer dynamic relocations. Assume no 46490075Sobrien special support here and encode direct references. */ 46590075Sobrien#ifndef ASM_PREFERRED_EH_DATA_FORMAT 46690075Sobrien#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) DW_EH_PE_absptr 46790075Sobrien#endif 46890075Sobrien 46990075Sobrien/* By default, the C++ compiler will use the lowest bit of the pointer 47090075Sobrien to function to indicate a pointer-to-member-function points to a 47190075Sobrien virtual member function. However, if FUNCTION_BOUNDARY indicates 47290075Sobrien function addresses aren't always even, the lowest bit of the delta 47390075Sobrien field will be used. */ 47490075Sobrien#ifndef TARGET_PTRMEMFUNC_VBIT_LOCATION 47590075Sobrien#define TARGET_PTRMEMFUNC_VBIT_LOCATION \ 47690075Sobrien (FUNCTION_BOUNDARY >= 2 * BITS_PER_UNIT \ 47790075Sobrien ? ptrmemfunc_vbit_in_pfn : ptrmemfunc_vbit_in_delta) 47890075Sobrien#endif 47990075Sobrien 48090075Sobrien#ifndef DEFAULT_GDB_EXTENSIONS 48190075Sobrien#define DEFAULT_GDB_EXTENSIONS 1 48290075Sobrien#endif 48390075Sobrien 48490075Sobrien/* If more than one debugging type is supported, you must define 48590075Sobrien PREFERRED_DEBUGGING_TYPE to choose a format in a system-dependent way. 48690075Sobrien 48790075Sobrien This is one long line cause VAXC can't handle a \-newline. */ 488132718Skan#if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) + defined (DWARF2_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO) + defined (VMS_DEBUGGING_INFO)) 48990075Sobrien#ifndef PREFERRED_DEBUGGING_TYPE 49090075SobrienYou Lose! You must define PREFERRED_DEBUGGING_TYPE! 49190075Sobrien#endif /* no PREFERRED_DEBUGGING_TYPE */ 49290075Sobrien#else /* Only one debugging format supported. Define PREFERRED_DEBUGGING_TYPE 49390075Sobrien so other code needn't care. */ 49490075Sobrien#ifdef DBX_DEBUGGING_INFO 49590075Sobrien#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG 49690075Sobrien#endif 49790075Sobrien#ifdef SDB_DEBUGGING_INFO 49890075Sobrien#define PREFERRED_DEBUGGING_TYPE SDB_DEBUG 49990075Sobrien#endif 50090075Sobrien#ifdef DWARF_DEBUGGING_INFO 50190075Sobrien#define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG 50290075Sobrien#endif 50390075Sobrien#ifdef DWARF2_DEBUGGING_INFO 50490075Sobrien#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG 50590075Sobrien#endif 50690075Sobrien#ifdef VMS_DEBUGGING_INFO 50790075Sobrien#define PREFERRED_DEBUGGING_TYPE VMS_AND_DWARF2_DEBUG 50890075Sobrien#endif 50990075Sobrien#ifdef XCOFF_DEBUGGING_INFO 51090075Sobrien#define PREFERRED_DEBUGGING_TYPE XCOFF_DEBUG 51190075Sobrien#endif 51290075Sobrien#endif /* More than one debugger format enabled. */ 51390075Sobrien 51490075Sobrien/* If still not defined, must have been because no debugging formats 51590075Sobrien are supported. */ 51690075Sobrien#ifndef PREFERRED_DEBUGGING_TYPE 51790075Sobrien#define PREFERRED_DEBUGGING_TYPE NO_DEBUG 51890075Sobrien#endif 51990075Sobrien 520117395Skan/* Define codes for all the float formats that we know of. */ 521117395Skan#define UNKNOWN_FLOAT_FORMAT 0 522117395Skan#define IEEE_FLOAT_FORMAT 1 523117395Skan#define VAX_FLOAT_FORMAT 2 524117395Skan#define IBM_FLOAT_FORMAT 3 525117395Skan#define C4X_FLOAT_FORMAT 4 52690075Sobrien 527117395Skan/* Default to IEEE float if not specified. Nearly all machines use it. */ 528117395Skan#ifndef TARGET_FLOAT_FORMAT 529117395Skan#define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT 53090075Sobrien#endif 53190075Sobrien 53290075Sobrien/* Determine the register class for registers suitable to be the base 53390075Sobrien address register in a MEM. Allow the choice to be dependent upon 53490075Sobrien the mode of the memory access. */ 53590075Sobrien#ifndef MODE_BASE_REG_CLASS 53690075Sobrien#define MODE_BASE_REG_CLASS(MODE) BASE_REG_CLASS 53790075Sobrien#endif 53890075Sobrien 539117395Skan#ifndef LARGEST_EXPONENT_IS_NORMAL 540117395Skan#define LARGEST_EXPONENT_IS_NORMAL(SIZE) 0 541117395Skan#endif 542117395Skan 543117395Skan#ifndef ROUND_TOWARDS_ZERO 544117395Skan#define ROUND_TOWARDS_ZERO 0 545117395Skan#endif 546117395Skan 547117395Skan#ifndef MODE_HAS_NANS 548117395Skan#define MODE_HAS_NANS(MODE) \ 549117395Skan (FLOAT_MODE_P (MODE) \ 550117395Skan && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT \ 551117395Skan && !LARGEST_EXPONENT_IS_NORMAL (GET_MODE_BITSIZE (MODE))) 552117395Skan#endif 553117395Skan 554117395Skan#ifndef MODE_HAS_INFINITIES 555117395Skan#define MODE_HAS_INFINITIES(MODE) \ 556117395Skan (FLOAT_MODE_P (MODE) \ 557117395Skan && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT \ 558117395Skan && !LARGEST_EXPONENT_IS_NORMAL (GET_MODE_BITSIZE (MODE))) 559117395Skan#endif 560117395Skan 561117395Skan#ifndef MODE_HAS_SIGNED_ZEROS 562117395Skan#define MODE_HAS_SIGNED_ZEROS(MODE) \ 563117395Skan (FLOAT_MODE_P (MODE) && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT) 564117395Skan#endif 565117395Skan 566117395Skan#ifndef MODE_HAS_SIGN_DEPENDENT_ROUNDING 567117395Skan#define MODE_HAS_SIGN_DEPENDENT_ROUNDING(MODE) \ 568117395Skan (FLOAT_MODE_P (MODE) \ 569117395Skan && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT \ 570117395Skan && !ROUND_TOWARDS_ZERO) 571117395Skan#endif 572117395Skan 573132718Skan#ifndef FLOAT_LIB_COMPARE_RETURNS_BOOL 574132718Skan#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) false 575132718Skan#endif 576132718Skan 577132718Skan/* If FLOAT_WORDS_BIG_ENDIAN is not defined in the header files, 578132718Skan then the word-endianness is the same as for integers. */ 579117395Skan#ifndef FLOAT_WORDS_BIG_ENDIAN 580117395Skan#define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN 581117395Skan#endif 582117395Skan 583117395Skan#ifndef TARGET_FLT_EVAL_METHOD 584117395Skan#define TARGET_FLT_EVAL_METHOD 0 585117395Skan#endif 586117395Skan 587117395Skan#ifndef HOT_TEXT_SECTION_NAME 588117395Skan#define HOT_TEXT_SECTION_NAME "text.hot" 589117395Skan#endif 590117395Skan 591117395Skan#ifndef UNLIKELY_EXECUTED_TEXT_SECTION_NAME 592117395Skan#define UNLIKELY_EXECUTED_TEXT_SECTION_NAME "text.unlikely" 593117395Skan#endif 594117395Skan 595117395Skan#ifndef VECTOR_MODE_SUPPORTED_P 596117395Skan#define VECTOR_MODE_SUPPORTED_P(MODE) 0 597117395Skan#endif 598117395Skan 599102780Skan/* Determine whether __cxa_atexit, rather than atexit, is used to 600117395Skan register C++ destructors for local statics and global objects. */ 601102780Skan#ifndef DEFAULT_USE_CXA_ATEXIT 602102780Skan#define DEFAULT_USE_CXA_ATEXIT 0 603102780Skan#endif 604102780Skan 605117395Skan/* Determine whether extra constraint letter should be handled 606117395Skan via address reload (like 'o'). */ 607117395Skan#ifndef EXTRA_MEMORY_CONSTRAINT 608132718Skan#define EXTRA_MEMORY_CONSTRAINT(C,STR) 0 609117395Skan#endif 610117395Skan 611117395Skan/* Determine whether extra constraint letter should be handled 612117395Skan as an address (like 'p'). */ 613117395Skan#ifndef EXTRA_ADDRESS_CONSTRAINT 614132718Skan#define EXTRA_ADDRESS_CONSTRAINT(C,STR) 0 615117395Skan#endif 616117395Skan 617132718Skan/* When a port defines CONSTRAINT_LEN, it should use DEFAULT_CONSTRAINT_LEN 618132718Skan for all the characters that it does not want to change, so things like the 619132718Skan 'length' of a digit in a matching constraint is an implementation detail, 620132718Skan and not part of the interface. */ 621132718Skan#define DEFAULT_CONSTRAINT_LEN(C,STR) 1 622132718Skan 623132718Skan#ifndef CONSTRAINT_LEN 624132718Skan#define CONSTRAINT_LEN(C,STR) DEFAULT_CONSTRAINT_LEN (C, STR) 625132718Skan#endif 626132718Skan 627132718Skan#if defined (CONST_OK_FOR_LETTER_P) && ! defined (CONST_OK_FOR_CONSTRAINT_P) 628132718Skan#define CONST_OK_FOR_CONSTRAINT_P(VAL,C,STR) CONST_OK_FOR_LETTER_P (VAL, C) 629132718Skan#endif 630132718Skan 631132718Skan#if defined (CONST_DOUBLE_OK_FOR_LETTER_P) && ! defined (CONST_DOUBLE_OK_FOR_CONSTRAINT_P) 632132718Skan#define CONST_DOUBLE_OK_FOR_CONSTRAINT_P(OP,C,STR) \ 633132718Skan CONST_DOUBLE_OK_FOR_LETTER_P (OP, C) 634132718Skan#endif 635132718Skan 636132718Skan#ifndef REG_CLASS_FROM_CONSTRAINT 637132718Skan#define REG_CLASS_FROM_CONSTRAINT(C,STR) REG_CLASS_FROM_LETTER (C) 638132718Skan#endif 639132718Skan 640132718Skan#if defined (EXTRA_CONSTRAINT) && ! defined (EXTRA_CONSTRAINT_STR) 641132718Skan#define EXTRA_CONSTRAINT_STR(OP, C,STR) EXTRA_CONSTRAINT (OP, C) 642132718Skan#endif 643132718Skan 644132718Skan#ifndef REGISTER_MOVE_COST 645132718Skan#define REGISTER_MOVE_COST(m, x, y) 2 646132718Skan#endif 647132718Skan 648132718Skan/* Determine whether the the entire c99 runtime 649132718Skan is present in the runtime library. */ 650132718Skan#ifndef TARGET_C99_FUNCTIONS 651132718Skan#define TARGET_C99_FUNCTIONS 0 652132718Skan#endif 653132718Skan 654132718Skan/* Indicate that CLZ and CTZ are undefined at zero. */ 655132718Skan#ifndef CLZ_DEFINED_VALUE_AT_ZERO 656132718Skan#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) 0 657132718Skan#endif 658132718Skan#ifndef CTZ_DEFINED_VALUE_AT_ZERO 659132718Skan#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) 0 660132718Skan#endif 661132718Skan 662132718Skan/* Provide a default value for STORE_FLAG_VALUE. */ 663132718Skan#ifndef STORE_FLAG_VALUE 664132718Skan#define STORE_FLAG_VALUE 1 665132718Skan#endif 666132718Skan 667132718Skan/* This macro is used to determine what the largest unit size that 668132718Skan move_by_pieces can use is. */ 669132718Skan 670132718Skan/* MOVE_MAX_PIECES is the number of bytes at a time which we can 671132718Skan move efficiently, as opposed to MOVE_MAX which is the maximum 672132718Skan number of bytes we can move with a single instruction. */ 673132718Skan 674132718Skan#ifndef MOVE_MAX_PIECES 675132718Skan#define MOVE_MAX_PIECES MOVE_MAX 676132718Skan#endif 677132718Skan 678132718Skan#ifndef STACK_POINTER_OFFSET 679132718Skan#define STACK_POINTER_OFFSET 0 680132718Skan#endif 681132718Skan 682132718Skan#ifndef LOCAL_REGNO 683132718Skan#define LOCAL_REGNO(REGNO) 0 684132718Skan#endif 685132718Skan 686132718Skan/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, 687132718Skan the stack pointer does not matter. The value is tested only in 688132718Skan functions that have frame pointers. */ 689132718Skan#ifndef EXIT_IGNORE_STACK 690132718Skan#define EXIT_IGNORE_STACK 0 691132718Skan#endif 692132718Skan 69390075Sobrien#endif /* ! GCC_DEFAULTS_H */ 694