Annotation of GNUtools/cc/config/pa/next.h, revision 1.1

1.1     ! root        1: /* Target definitions for GNU compiler for hppa running NeXTSTEP
        !             2:    Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
        !             3: 
        !             4: This file is part of GNU CC.
        !             5: 
        !             6: GNU CC is free software; you can redistribute it and/or modify
        !             7: it under the terms of the GNU General Public License as published by
        !             8: the Free Software Foundation; either version 2, or (at your option)
        !             9: any later version.
        !            10: 
        !            11: GNU CC is distributed in the hope that it will be useful,
        !            12: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            14: GNU General Public License for more details.
        !            15: 
        !            16: You should have received a copy of the GNU General Public License
        !            17: along with GNU CC; see the file COPYING.  If not, write to
        !            18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
        !            19: 
        !            20: #define TARGET_DEFAULT (1+128+256)     /* 1.1, gas, stub calls */
        !            21: 
        !            22: #define TARGET_ARCHITECTURE \
        !            23:   { { "hppa", 1 },             /* same as snake.  */           \
        !            24:     { "hppa1.0", -1 },         /* nosnake.  */                 \
        !            25:   }
        !            26: 
        !            27: /* must before the inclusion of pa/pa.h */
        !            28: #define NeXT_ASM
        !            29: 
        !            30: #define MACHO_PIC 1
        !            31: 
        !            32: #include "pa/pa.h"
        !            33: #include "nextstep.h"
        !            34: 
        !            35: 
        !            36: #define DEFAULT_TARGET_ARCH "hppa"
        !            37: 
        !            38: #define HP_FP_ARG_DESCRIPTOR_REVERSED
        !            39: 
        !            40: #undef CPP_PREDEFINES
        !            41: #define CPP_PREDEFINES "-Dhppa -DNATURAL_ALIGNMENT -DNeXT -Dunix -D__MACH__ -D__BIG_ENDIAN__ -D__ARCHITECTURE__=\"hppa\" -D_PA_RISC1_1"
        !            42: 
        !            43: #undef ASM_FILE_START
        !            44: #define ASM_FILE_START
        !            45: 
        !            46: #undef ASM_FILE_END
        !            47: #undef ASM_OUTPUT_EXTERNAL_LIBCALL
        !            48: #undef ASM_OUTPUT_EXTERNAL
        !            49: 
        !            50: #undef FUNCTION_PROLOGUE
        !            51: #define FUNCTION_PROLOGUE
        !            52: 
        !            53: #undef FUNCTION_EPILOGUE
        !            54: #define FUNCTION_EPILOGUE
        !            55: 
        !            56: #undef GLOBAL_ASM_OP
        !            57: #define GLOBAL_ASM_OP ".globl"
        !            58: 
        !            59: #undef SIZE_TYPE
        !            60: #define SIZE_TYPE "long unsigned int"
        !            61: 
        !            62: #undef ASM_GLOBALIZE_LABEL
        !            63: #define ASM_GLOBALIZE_LABEL(FILE,NAME) \
        !            64:   do { fprintf (FILE, "%s ", GLOBAL_ASM_OP);           \
        !            65:        assemble_name (FILE, NAME);                     \
        !            66:        fputs ("\n", FILE);} while (0)
        !            67: 
        !            68: /* This is how to output an internal numbered label where
        !            69:    PREFIX is the class of label and NUM is the number within the class.  */
        !            70: 
        !            71: #undef ASM_OUTPUT_INTERNAL_LABEL
        !            72: #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)     \
        !            73:   asm_fprintf (FILE, "%0L%s%d:\n", PREFIX, NUM)
        !            74: 
        !            75: /* This is how to store into the string LABEL
        !            76:    the symbol_ref name of an internal numbered label where
        !            77:    PREFIX is the class of label and NUM is the number within the class.
        !            78:    This is suitable for output with `assemble_name'.  */
        !            79: 
        !            80: #undef STRING_SECTION_NAME
        !            81: #define STRING_SECTION_NAME "ascii"
        !            82: 
        !            83: #undef ASM_GENERATE_INTERNAL_LABEL
        !            84: #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)  \
        !            85:   sprintf (LABEL, "*%s%d", PREFIX, NUM)
        !            86: 
        !            87: /* This is how to output an assembler line defining a `double' constant.  */
        !            88: 
        !            89: #undef ASM_OUTPUT_DOUBLE
        !            90: #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                                  \
        !            91:   do {                                                                 \
        !            92:     long hex[2];                                                       \
        !            93:     REAL_VALUE_TO_TARGET_DOUBLE (VALUE, hex);                          \
        !            94:     fprintf(FILE, "\t; .double %.20g\n", (VALUE));                     \
        !            95:     fprintf (FILE, "\t.long 0x%x\n\t.long 0x%x\n", hex[0], hex[1]);    \
        !            96:   } while (0)
        !            97: 
        !            98: /* This is how to output an assembler line defining a `float' constant.  */
        !            99: 
        !           100: #undef ASM_OUTPUT_FLOAT
        !           101: #define ASM_OUTPUT_FLOAT(FILE,VALUE)                   \
        !           102: do { long l;                                           \
        !           103:      REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);           \
        !           104:      fprintf(FILE, "\t;        .single %.12e\n", (VALUE));     \
        !           105:      fprintf (FILE, "\t.long 0x%x\n", l);              \
        !           106:    } while (0)
        !           107: 
        !           108: #undef ASM_OUTPUT_SKIP
        !           109: #define ASM_OUTPUT_SKIP(FILE,SIZE)  \
        !           110:   fprintf (FILE, "\t.space %u\n", (SIZE))
        !           111: 
        !           112: /* Output to assembler file text saying following lines
        !           113:    may contain character constants, extra white space, comments, etc.  */
        !           114: 
        !           115: #undef ASM_APP_ON
        !           116: #define ASM_APP_ON "#APP\n"
        !           117: 
        !           118: /* Output to assembler file text saying following lines
        !           119:    no longer contain unusual constructs.  */
        !           120: 
        !           121: #undef ASM_APP_OFF
        !           122: #define ASM_APP_OFF "#NO_APP\n"
        !           123: 
        !           124: /* This is how to output a reference to a user-level label named NAME.
        !           125:    `assemble_name' uses this.  */
        !           126: 
        !           127: #define ASM_GENERATE_LABELREF(BUFFER,NAME)     \
        !           128:   do { if (NAME[0] == '+' || NAME[0] == '-') sprintf (BUFFER, "\"%s\"", NAME);         \
        !           129:        else if (!strncmp (NAME, "_OBJC_", 6)) sprintf (BUFFER, "L%s", NAME);           \
        !           130:        else if (!strncmp (NAME, ".objc_class_name_", 17)                       \
        !           131:                || !strncmp (NAME, "$$", 2)) strcpy (BUFFER, NAME);             \
        !           132:        else if (!strncmp (NAME, "mcount", 6)) sprintf (BUFFER, "%s", NAME);    \
        !           133:        else sprintf (BUFFER, "_%s", NAME); } while (0)
        !           134: 
        !           135: #undef ASM_OUTPUT_LABELREF
        !           136: #define ASM_OUTPUT_LABELREF(FILE,NAME)                         \
        !           137:   do { char __buf[256]; ASM_GENERATE_LABELREF (__buf, NAME);   \
        !           138:        fprintf (FILE, "%s", __buf); } while (0)
        !           139: 
        !           140: /* Output before read-only data.  */
        !           141: 
        !           142: #undef TEXT_SECTION_ASM_OP
        !           143: #define TEXT_SECTION_ASM_OP ".text"
        !           144: 
        !           145: /* Output before writable data.  */
        !           146: 
        !           147: #undef DATA_SECTION_ASM_OP
        !           148: #define DATA_SECTION_ASM_OP ".data"
        !           149: 
        !           150: /* override how BSS is handled */
        !           151: 
        !           152: #undef BSS_SECTION_ASM_OP
        !           153: 
        !           154: /* This says how to output an assembler line
        !           155:    to define a global common symbol.  */
        !           156: 
        !           157: #undef ASM_OUTPUT_COMMON
        !           158: #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)  \
        !           159: ( fputs (".comm ", (FILE)),                    \
        !           160:   assemble_name ((FILE), (NAME)),              \
        !           161:   fprintf ((FILE), ",%u\n", (ROUNDED)))
        !           162: 
        !           163: /* This says how to output an assembler line
        !           164:    to define a local common symbol.  */
        !           165: 
        !           166: #undef ASM_OUTPUT_LOCAL
        !           167: #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)  \
        !           168: ( fputs (".lcomm ", (FILE)),                   \
        !           169:   assemble_name ((FILE), (NAME)),              \
        !           170:   fprintf ((FILE), ",%u\n", (ROUNDED)))
        !           171: 
        !           172: #undef ASM_FORMAT_PRIVATE_NAME
        !           173: #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
        !           174: ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10),   \
        !           175:   sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
        !           176: 
        !           177: #undef ENCODE_SECTION_INFO
        !           178: 
        !           179: #undef ASM_DECLARE_FUNCTION_NAME
        !           180: 
        !           181: #undef TRAMPOLINE_TEMPLATE(FILE)
        !           182: #define TRAMPOLINE_TEMPLATE(FILE) \
        !           183: {                                              \
        !           184:   fprintf (FILE, "\tldw 12(0,%%r22),%%r21\n"); \
        !           185:   fprintf (FILE, "\tbe 0(4,%%r21)\n");         \
        !           186:   fprintf (FILE, "\tldw 16(0,%%r22),%%r29\n"); \
        !           187:   fprintf (FILE, "\t.short 0\n");              \
        !           188:   fprintf (FILE, "\t.short 0\n");              \
        !           189: }
        !           190: 
        !           191: #undef ASM_OUTPUT_INT
        !           192: #define ASM_OUTPUT_INT(FILE,VALUE)  \
        !           193: { fprintf (FILE, "\t.long ");                  \
        !           194:   if (function_label_operand (VALUE, VOIDmode)  \
        !           195:       && in_section != in_text)                        \
        !           196:     fprintf (FILE, "P%%");                     \
        !           197:   output_addr_const (FILE, (VALUE));           \
        !           198:   fprintf (FILE, "\n");}
        !           199: 
        !           200: #undef ASM_OUTPUT_SHORT
        !           201: #define ASM_OUTPUT_SHORT(FILE,VALUE)  \
        !           202: ( fprintf (FILE, "\t.short "),                 \
        !           203:   output_addr_const (FILE, (VALUE)),           \
        !           204:   fprintf (FILE, "\n"))
        !           205: 
        !           206: #undef ASM_OUTPUT_ADDR_VEC_ELT
        !           207: #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
        !           208:   fprintf (FILE, "\tb L%d\n\tnop\n", VALUE)
        !           209: 
        !           210: #define OUTPUT_COMPILER_STUB
        !           211: 
        !           212: /* this may not work for double values --  hard coded to 32 bit entities */
        !           213: 
        !           214: #define OBJC_FORWARDING_REG_OFFSET(ISREG, OFF, REGNO) \
        !           215:   do { OFF = (FP_REG_CLASS_P( REGNO_REG_CLASS(REGNO)) \
        !           216:               ? -2 * ((REGNO) - 44) - 4               \
        !           217:               :  4 * ((REGNO) - 26) - 4);             \
        !           218:        ISREG = 0; } while (0)
        !           219: 
        !           220: #undef FUNCTION_ARG
        !           221: #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED)                           \
        !           222:   (4 >= ((CUM) + FUNCTION_ARG_SIZE ((MODE), (TYPE)))                   \
        !           223:    ? gen_rtx (REG, (MODE),                                             \
        !           224:              (FUNCTION_ARG_SIZE ((MODE), (TYPE)) > 1                   \
        !           225:               ? (((MODE) == DFmode)                                    \
        !           226:                  ? ((CUM) ? 50 : 46)                                   \
        !           227:                  : ((CUM) ? 23 : 25))                                  \
        !           228:               : (((MODE) == SFmode)                                    \
        !           229:                  ? (44 + 2 * (CUM))                                    \
        !           230:                  : (27 - (CUM) - FUNCTION_ARG_SIZE ((MODE), (TYPE))))))\
        !           231:    : 0)
        !           232: 
        !           233: /*
        !           234:    After the magic in calls.c has moved an argument into some register,
        !           235:    this macro is expanded so the backend can choose to duplicate
        !           236:    or spill that load to somewhere else.  
        !           237:      The NeXTSTEP/PA backend uses this to spill arguments from float
        !           238:    registers into the general purpose regs.  
        !           239: 
        !           240:    NAME is the name of the function being called.
        !           241:    NREGS is the number of registers being loaded into.
        !           242:    REG_RTX is the rtx for the (first) register being loaded.
        !           243:    VALUE_RTX is the value being loaded.
        !           244:    MODE is the mode the value is loaded in.
        !           245: 
        !           246:    The USE_DUP_REG_ARG_LOAD macro allows emitting USE insns 
        !           247:    for possible registers changed.
        !           248: */
        !           249: 
        !           250: #define DUP_REG_ARG_LOAD(NAME, NREGS, REG_RTX, VALUE_RTX, MODE)         \
        !           251:   do { if ((MODE)==DFmode && REGNO(REG_RTX) >= 46) {                   \
        !           252:            move_block_to_reg ((REGNO(REG_RTX)==46 ? 25 : 23),          \
        !           253:                      validize_mem(VALUE_RTX), 2, MODE);                \
        !           254:        } else if ((MODE)==SFmode && REGNO(REG_RTX) >= 44) {            \
        !           255:            move_block_to_reg (26-((REGNO(REG_RTX)-44)/2),              \
        !           256:                      validize_mem(VALUE_RTX), 1, MODE); }              \
        !           257:   } while (0)
        !           258: 
        !           259: /* Emit insn's to actually use the spilled regs so the loads
        !           260:    will not be handled wrong by the optimizer. */
        !           261: #define USE_DUP_REG_ARG_LOAD(NAME, NREGS, REG_RTX, MODE)       \
        !           262:   do { if (NREGS == 0) { if ((MODE)==DFmode && REGNO(REG_RTX) >= 46) { \
        !           263:           use_regs ((REGNO(REG_RTX)==46 ? 25 : 23), 2);                \
        !           264:        } else if ((MODE)==SFmode) {                                    \
        !           265:            emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, SImode, 26-((REGNO (REG_RTX)-44)/2)))); }              \
        !           266:   }} while (0)
        !           267: 
        !           268: #define PROFILE_LABEL_PREFIX    
        !           269: 
        !           270: #undef OVERRIDE_OPTIONS
        !           271: 
        !           272: #undef CONSTANT_ADDRESS_P
        !           273: #define CONSTANT_ADDRESS_P(X) \
        !           274:   ((GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF            \
        !           275:    || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST               \
        !           276:    || GET_CODE (X) == HIGH)                                            \
        !           277:    && (reload_in_progress || reload_completed                          \
        !           278:        || ! symbolic_expression_p (X) || machopic_operand_p (X)))
        !           279: 
        !           280: #define HI_SUM_TARGET_RTX      (gen_rtx (REG, SImode, 1))
        !           281: #define HI_SUM_TARGET_REGNO    1
        !           282: 
        !           283: #undef ASM_OUTPUT_ADDR_DIFF_ELT
        !           284: #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL)  \
        !           285:   fprintf (FILE, "\tb L%d\n\tnop\n", VALUE)
        !           286: 
        !           287: #undef PIC_OFFSET_TABLE_REGNUM
        !           288: #define PIC_OFFSET_TABLE_REGNUM 18
        !           289: 
        !           290: #undef OPTIMIZATION_OPTIONS
        !           291: #define OPTIMIZATION_OPTIONS(OPTIMIZE) \
        !           292: {                                                              \
        !           293:   if (OPTIMIZE >= 1)                                           \
        !           294:     {                                                          \
        !           295:       flag_cse_follow_jumps = 1;                               \
        !           296:       flag_cse_skip_blocks = 1;                                        \
        !           297:       flag_expensive_optimizations = 1;                                \
        !           298:       flag_strength_reduce = 1;                                        \
        !           299:       flag_rerun_cse_after_loop = 1;                           \
        !           300:       flag_caller_saves = 1;                                   \
        !           301:       flag_schedule_insns = 1;                                 \
        !           302:       flag_schedule_insns_after_reload = 1;                    \
        !           303:     }                                                          \
        !           304:   if (OPTIMIZE >= 2)                                           \
        !           305:     flag_omit_frame_pointer = 1;                               \
        !           306: }

unix.superglobalmegacorp.com

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