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