Annotation of GNUtools/cc/config/i860/fx2800.h, revision 1.1

1.1     ! root        1: /* Target definitions for GNU compiler for Alliant FX/2800
        !             2:    running Concentrix 2.2
        !             3: 
        !             4:    Copyright (C) 1991 Free Software Foundation, Inc.
        !             5: 
        !             6:    Written by Howard Chu ([email protected]).
        !             7: 
        !             8: This file is part of GNU CC.
        !             9: 
        !            10: GNU CC is free software; you can redistribute it and/or modify
        !            11: it under the terms of the GNU General Public License as published by
        !            12: the Free Software Foundation; either version 2, or (at your option)
        !            13: any later version.
        !            14: 
        !            15: GNU CC is distributed in the hope that it will be useful,
        !            16: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            17: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            18: GNU General Public License for more details.
        !            19: 
        !            20: You should have received a copy of the GNU General Public License
        !            21: along with GNU CC; see the file COPYING.  If not, write to
        !            22: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
        !            23: 
        !            24: #define OUTPUT_TDESC
        !            25: 
        !            26: #include "i860/sysv4.h"
        !            27: 
        !            28: /* The Alliant fx2800 running Concentrix 2.x is weird.  This is basically
        !            29:    a BSD 4.3 based operating system, but it uses svr4 ELF format object
        !            30:    files and it somehow puts BSD stabs records into the ELF files for
        !            31:    symbolic debug information.  The assembler is "mostly an SVR4 assembler
        !            32:    with some Alliant additions. We based it on the `Intel 80860 Assembly
        !            33:    Language Specification' from AT&T." */
        !            34: 
        !            35: /* This file consists of three sections. The first section establishes
        !            36:    definitions unique to the Alliant FX/2800. The next section reconciles
        !            37:    differences between Alliant and i860v4.h, and the last overrides the
        !            38:    remaining differences with svr4.h */
        !            39: 
        !            40: #undef TARGET_VERSION
        !            41: #define TARGET_VERSION fprintf (stderr, " (i860 Alliant)");
        !            42: 
        !            43: /* atexit is not present prior to Concentrix 2.2. Uncomment the following
        !            44:    if you're on 2.1 or older. */
        !            45:  
        !            46: /* #undef HAVE_ATEXIT */
        !            47: 
        !            48: #define I860_STRICT_ABI_PROLOGUES
        !            49: 
        !            50: /* There is no avoiding this; -L does not exist at all (in Concentrix 2.2).  */
        !            51: #define LINK_LIBGCC_SPECIAL 1
        !            52: 
        !            53: /* Most of the Alliant-specific definitions here are to get stab info that
        !            54:    Alliant's dbx can understand. */
        !            55: 
        !            56: #define DBX_DEBUGGING_INFO
        !            57: #define DEFAULT_GDB_EXTENSIONS 0
        !            58: #define DBX_NO_XREFS
        !            59: #define DBX_NO_EXTRA_TAGS
        !            60: 
        !            61: /* Alliant dbx also needs to see the function stab before anything
        !            62:    else in the function. */
        !            63: 
        !            64: #define DBX_FUNCTION_FIRST
        !            65: #define DBX_LBRAC_FIRST
        !            66: 
        !            67: /* Alliant dbx also needs to see the end of a function somewhere. */
        !            68: 
        !            69: #define DBX_OUTPUT_FUNCTION_END(file,decl)     \
        !            70:        fprintf (file, ".stab \"\",.,0x%x,0,0\n", N_EFUN)
        !            71: 
        !            72: /* Alliant dbx has predefined types, so they must be emitted with the
        !            73:    proper type numbers. The defined types are:
        !            74: 
        !            75:      Type #    C, Fortran, Pascal Types
        !            76:        --      ------------------------
        !            77:         1      char, integer*1
        !            78:         2      short,  integer*2
        !            79:         3      int, long, integer*4, integer
        !            80:         4      logical*1, byte
        !            81:         5      logical*2
        !            82:         6      logical*4, logical
        !            83:         7      float, real*4,  real
        !            84:         8      double, real*8, double
        !            85:         9      single complex, complex*8, complex
        !            86:        10      double complex, doublecomplex
        !            87:        11      character
        !            88:        12      void
        !            89:        13      nil
        !            90:        14      boolean
        !            91:        15      unsigned char, ubyte
        !            92:        16      unsigned short, uword
        !            93:        17      unsigned, unsigned int, unsigned long, ulong
        !            94:        18      quad, logical*8
        !            95:        19      long long, integer*8
        !            96:        20      unsigned long long, uquad*8
        !            97:     21-100     reserved for future predefined types
        !            98:        100     long redefine same as 3
        !            99:        101     unsigned long same as 17
        !           100:        --      --------------------
        !           101:        102     First user program type
        !           102: 
        !           103:    Since long and unsigned long are int references, they must be handled
        !           104:    as special cases. The Alliant compiler doesn't use types 18-20, so it
        !           105:    sets long & unsigned long in 18 & 19, not in 100 & 101 as shown above. */
        !           106: 
        !           107: #define DBX_OUTPUT_STANDARD_TYPES(syms)        \
        !           108: { char *dtyps[]={"", "char", "short int", "int", "logical*1",          \
        !           109:        "logical*2", "logical*4", "float", "double", "complex",         \
        !           110:        "doublecomplex", "character", "void", "nil", "boolean",         \
        !           111:        "unsigned char", "short unsigned int", "unsigned int",          \
        !           112:        "logical*8", "long long int", "long long unsigned int",""};     \
        !           113:                                                                        \
        !           114:   tree decl;                                                           \
        !           115:   int i;                                                               \
        !           116:                                                                        \
        !           117:   for (i=1;*dtyps[i];i++)                                              \
        !           118:     for (decl = syms; decl; decl = TREE_CHAIN(decl))                   \
        !           119:        if ((TREE_CODE (decl) == TYPE_DECL) && DECL_NAME(decl) &&       \
        !           120:            !strcmp(IDENTIFIER_POINTER(DECL_NAME(decl)), dtyps[i])) {   \
        !           121:                TYPE_SYMTAB_ADDRESS (TREE_TYPE (decl)) = i;             \
        !           122:                typevec[i] = TYPE_DEFINED;                              \
        !           123:                dbxout_symbol (decl, 0);                                \
        !           124:                break;                                                  \
        !           125:        }                                                               \
        !           126:                                                                        \
        !           127:   for (decl = syms; decl; decl = TREE_CHAIN(decl))                     \
        !           128:     if ((TREE_CODE (decl) == TYPE_DECL) && DECL_NAME(decl) &&          \
        !           129:        !strcmp(IDENTIFIER_POINTER(DECL_NAME(decl)),"long int")) {      \
        !           130:       TYPE_SYMTAB_ADDRESS (TREE_TYPE (decl)) = i;                      \
        !           131:       typevec[i] = TYPE_DEFINED;                                       \
        !           132:       fprintf(asmfile,".stab \"long int:t%d=3\",0,0x%x,0,0\n",         \
        !           133:                i++,N_LSYM);                                            \
        !           134:       TREE_ASM_WRITTEN (decl) = 1;                                     \
        !           135:       break;                                                           \
        !           136:     }                                                                  \
        !           137:                                                                        \
        !           138:   for (decl = syms; decl; decl = TREE_CHAIN(decl))                     \
        !           139:     if ((TREE_CODE (decl) == TYPE_DECL) && DECL_NAME(decl) && !strcmp( \
        !           140:        IDENTIFIER_POINTER(DECL_NAME(decl)),"long unsigned int")) {     \
        !           141:       TYPE_SYMTAB_ADDRESS (TREE_TYPE (decl)) = i;                      \
        !           142:       typevec[i] = TYPE_DEFINED;                                       \
        !           143:       fprintf(asmfile,".stab \"long unsigned int:t%d=17\",0,0x%x,0,0\n",\
        !           144:                i++,N_LSYM);                                            \
        !           145:       TREE_ASM_WRITTEN (decl) = 1;                                     \
        !           146:       break;                                                           \
        !           147:     }                                                                  \
        !           148:   next_type_number = i; };
        !           149: 
        !           150: /* Alliant dbx doesn't understand split names... */
        !           151: 
        !           152: #define DBX_CONTIN_LENGTH 0
        !           153: 
        !           154: /* The syntax for stabs records is also different; there is only a single
        !           155:    ".stab" directive instead of the 3 directives in BSD, and the order of
        !           156:    arguments is slightly changed. */
        !           157: 
        !           158: #define ASM_STABS_OP   ".stab"
        !           159: #define ASM_STABN_OP   ".stab"
        !           160: #define ASM_STABD_OP   ".stab"
        !           161: 
        !           162: #define DBX_MEMPARM_STABS_LETTER 'k'
        !           163: #define DBX_REGPARM_STABS_LETTER 'r'
        !           164: 
        !           165: #define ASM_OUTPUT_SOURCE_LINE(file,num)               \
        !           166:        fprintf (file, "\t.stab \"\",.,0x%x,0,%d\n",    \
        !           167:                N_SLINE,num)
        !           168: 
        !           169: #if 0  /* Alliant dbx only reads first N_SO, so it
        !           170:           ignores the filename if dir is present. */
        !           171: #define DBX_OUTPUT_MAIN_SOURCE_DIRECTORY(file,name)            \
        !           172:        fprintf (file, ".stab \"%s/\",.Ltext0,0x%x,0,0\n",      \
        !           173:                name, N_SO)
        !           174: #else
        !           175: #define DBX_OUTPUT_MAIN_SOURCE_DIRECTORY(file,name)
        !           176: #endif
        !           177: 
        !           178: #define DBX_OUTPUT_MAIN_SOURCE_FILENAME(file,name)             \
        !           179:        fprintf (file, ".stab ");                               \
        !           180:        output_quoted_string (file, name);                      \
        !           181:        fprintf (file, ",.Ltext0,0x%x,0,0\n", N_SO);            \
        !           182:        text_section ();                                        \
        !           183:        ASM_OUTPUT_INTERNAL_LABEL (file, "Ltext", 0)
        !           184: 
        !           185: #define DBX_OUTPUT_SOURCE_FILENAME(file,name)                  \
        !           186:   do { fprintf (file, ".stab ");                               \
        !           187:        output_quoted_string (file, name);                      \
        !           188:        fprintf (file, ",.Ltext0,0x%x,0,0\n", N_SOL);           \
        !           189:   } while (0)
        !           190: 
        !           191: #define DBX_OUTPUT_CONSTANT_SYMBOL(file,name,ival)             \
        !           192:        fprintf (file, ".stab \"%s:c=i%d\",0,0x%x,0,0\n",       \
        !           193:                name, ival, N_LSYM)
        !           194: 
        !           195: #define DBX_FINISH_SYMBOL(decl)        \
        !           196:        int line = 0;                                           \
        !           197:        fprintf (asmfile, "\",");                               \
        !           198:        if (current_sym_addr)                                   \
        !           199:          output_addr_const (asmfile, current_sym_addr);        \
        !           200:        else                                                    \
        !           201:          fprintf (asmfile, "%d", current_sym_value);           \
        !           202:        if (decl != 0 && TREE_CODE(decl) == FUNCTION_DECL)      \
        !           203:          line=DECL_SOURCE_LINE (decl);                         \
        !           204:        fprintf (asmfile, ",0x%x,%d,%d\n", current_sym_code,    \
        !           205:          line!=0?64:0,line)
        !           206: 
        !           207: #define DBX_OUTPUT_CATCH(file,decl,name)               \
        !           208:   fprintf (file, ".stab \"%s:C1\",",                   \
        !           209:           IDENTIFIER_POINTER (DECL_NAME (decl)));      \
        !           210:   assemble_name (file, name);                          \
        !           211:   fprintf (file, ",0x%x,0,0\n", N_CATCH)
        !           212: 
        !           213: #define DBX_OUTPUT_LBRAC(file,name)    \
        !           214:   if (depth > 1) {                     \
        !           215:     fprintf (file, ".stab \"\",");     \
        !           216:     assemble_name (file, name);                \
        !           217:     fprintf (file, ",0x%x,0,%d\n", N_LBRAC, depth); }
        !           218: 
        !           219: #define DBX_OUTPUT_RBRAC(file,name)    \
        !           220:   if (depth > 1) {                     \
        !           221:     fprintf (file, ".stab \"\",");     \
        !           222:     assemble_name (file, name);                \
        !           223:     fprintf (file, ",0x%x,0,%d\n", N_RBRAC, depth); }
        !           224: 
        !           225: #define DBX_OUTPUT_ENUM(file,type)                             \
        !           226:   fprintf (file, "e3");                                                \
        !           227:   CHARS(2);                                                    \
        !           228:   for (tem = TYPE_VALUES (type); tem; tem = TREE_CHAIN (tem))  \
        !           229:     {                                                          \
        !           230:       fprintf (asmfile, "%s:%d,",                              \
        !           231:               IDENTIFIER_POINTER (TREE_PURPOSE (tem)),         \
        !           232:               TREE_INT_CST_LOW (TREE_VALUE (tem)));            \
        !           233:       CHARS (11 + IDENTIFIER_LENGTH (TREE_PURPOSE (tem)));     \
        !           234:       if (TREE_CHAIN (tem) != 0)                               \
        !           235:        CONTIN;                                                 \
        !           236:     }                                                          \
        !           237:   putc (';', asmfile);                                         \
        !           238:   CHARS (1);
        !           239: 
        !           240: /* Undefine some things defined in i860.h because the native C compiler
        !           241:    on the FX/2800 emits code to do these operations inline.  For GCC,
        !           242:    we will use the default implementation of these things... i.e.
        !           243:    generating calls to libgcc1 routines.  */
        !           244: 
        !           245: #undef DIVSI3_LIBCALL
        !           246: #undef UDIVSI3_LIBCALL
        !           247: #undef REMSI3_LIBCALL
        !           248: #undef UREMSI3_LIBCALL
        !           249: 
        !           250: /* The Alliant compiler's mod function gives the wrong result after a
        !           251:    shift operation. This bug typically hits in hash functions. */
        !           252: 
        !           253: #define perform_umodsi3(a, b)  a %= b; if (a == b) a=0; return a
        !           254: #define perform_modsi3(a, b)   a %= b; if (a == b) a=0; return a
        !           255: 
        !           256: /* Global pointer needs to be 8 byte aligned? Link error if not... */
        !           257: 
        !           258: #define DATA_ALIGNMENT(dummy,align)    \
        !           259:        ((TREE_PUBLIC (decl) && \
        !           260:         (TREE_CODE (TREE_TYPE (decl))==POINTER_TYPE)) ? 64:align)
        !           261: 
        !           262: #undef FUNCTION_PROFILER
        !           263: #define FUNCTION_PROFILER(FILE, LABELNO)       \
        !           264:        fprintf (FILE, "\tcall __mcount_\n\tnop\n")
        !           265: 
        !           266: /* Overrides for i860v4.h begin here */
        !           267: 
        !           268: /* Provide a set of pre-definitions and pre-assertions appropriate for
        !           269:    the i860 running Concentrix 2.x.  */
        !           270: 
        !           271: #undef CPP_PREDEFINES 
        !           272: #define CPP_PREDEFINES "-Di860 -Dunix -DBSD4_3 -Dalliant -Asystem(unix) -Asystem(bsd) -Acpu(i860) -Amachine(i860)"
        !           273: 
        !           274: #undef I860_REG_PREFIX
        !           275: #undef ASM_COMMENT_START
        !           276: #define ASM_COMMENT_START "//"
        !           277: 
        !           278: /* Use definitions of ASM_OUTPUT_{DOUBLE,FLOAT} as given in i860.h */
        !           279: 
        !           280: #undef ASM_OUTPUT_DOUBLE
        !           281: #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
        !           282:   fprintf(FILE, "\t.double %.20e\n", (VALUE))
        !           283: #undef ASM_OUTPUT_FLOAT
        !           284: #define ASM_OUTPUT_FLOAT(FILE,VALUE) \
        !           285:   fprintf(FILE, "\t.float %.12e\n", (VALUE))
        !           286: 
        !           287: #undef ASM_FILE_START
        !           288: #define ASM_FILE_START(FILE)
        !           289: #undef ASM_OUTPUT_FUNCTION_PREFIX
        !           290: #define ASM_OUTPUT_FUNCTION_PREFIX(FILE,NAME) \
        !           291:   fputs("\tnop\n", (FILE));                    \
        !           292:   current_function_original_name = (NAME)
        !           293: #undef ASM_OUTPUT_PROLOGUE_SUFFIX
        !           294: 
        !           295: /* Overrides for svr4.h begin here */
        !           296: 
        !           297: #undef SVR4
        !           298: 
        !           299: #undef SWITCH_TAKES_ARG
        !           300: #undef WORD_SWITCH_TAKES_ARG
        !           301: 
        !           302: #undef ASM_SPEC
        !           303: #undef ASM_FINAL_SPEC
        !           304: #undef MD_STARTFILE_PREFIX
        !           305: #undef MD_EXEC_PREFIX
        !           306: 
        !           307: /* Generate an error message if -p option is selected. Concentrix 2.x
        !           308:    does not support prof format profiling, only gprof is supported. */
        !           309: 
        !           310: #define CPP_SPEC       "%{p:%e-p option not supported: use -pg instead}"
        !           311: 
        !           312: /* Provide an appropriate LIB_SPEC. The crtend.o file provides part of the
        !           313:    support for getting C++ file-scope static objects constructed before
        !           314:    entering `main'. */
        !           315: 
        !           316: #undef LIB_SPEC
        !           317: #define LIB_SPEC \
        !           318:        "%{g*:-lg} %{!pg:-lc}%{pg:-lc_p} crtend.o%s"
        !           319: 
        !           320: /* Tell linker to strip local symbols, since assembler may not. */
        !           321: 
        !           322: #undef LINK_SPEC
        !           323: #define LINK_SPEC      "-X"
        !           324: 
        !           325: /* Get the correct startup file for regular or profiled code. Also
        !           326:    use the crtbegin.o file for C++ ... */
        !           327: 
        !           328: #undef STARTFILE_SPEC
        !           329: #define STARTFILE_SPEC \
        !           330:        "%{!pg:crt0.o%s}%{pg:gcrt0.o%s} crtbegin.o%s"
        !           331: 
        !           332: #undef SCCS_DIRECTIVE
        !           333: #undef NO_DOLLAR_IN_LABEL
        !           334: #undef TARGET_MEM_FUNCTIONS
        !           335: 
        !           336: #undef DWARF_DEBUGGING_INFO
        !           337: 
        !           338: #undef ASM_OUTPUT_LABELREF
        !           339: #define ASM_OUTPUT_LABELREF(FILE,NAME) fprintf (FILE, "_%s", NAME)
        !           340: #undef ASM_OUTPUT_EXTERNAL_LIBCALL
        !           341: 
        !           342: #undef BSS_ASM_OP
        !           343: #define BSS_ASM_OP     "\t.lcomm"

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.