X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=gcc%2Fconfig%2Fm68k%2Fcrds.h;fp=gcc%2Fconfig%2Fm68k%2Fcrds.h;h=0000000000000000000000000000000000000000;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=03faa9fbba3cf3e6ef2ea6b5bff35d6295ff6ced;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/config/m68k/crds.h b/gcc/config/m68k/crds.h deleted file mode 100644 index 03faa9fb..00000000 --- a/gcc/config/m68k/crds.h +++ /dev/null @@ -1,457 +0,0 @@ -/* Definitions of target machine for GNU compiler; - Charles River Data Systems UNiverse/32. - Copyright (C) 1987, 1993, 1994, 1996, 1997, 1998, 1999, 2000 - Free Software Foundation, Inc. - Contributed by Gary E. Miller (Gary_Edmunds_Miller@cup.portal.com) - -This file is part of GNU CC. - -GNU CC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#define MOTOROLA /* Use Motorola syntax rather than "MIT" */ -#define SGS /* Uses SGS assembler */ -#define SGS_SWITCH_TABLES /* Different switch table handling */ -#define SGS_NO_LI /* Suppress jump table label usage */ -#define CRDS /* Charles River Data Systems assembler */ - -#include "m68k/m68k.h" - -/* Without STRUCTURE_SIZE_BOUNDARY, we can't ensure that structures are - aligned such that we can correctly extract bitfields from them. - Someone should check whether the usual compiler on the crds machine - provides the equivalent behavior of STRUCTURE_SIZE_BOUNDARY. */ -/* Set to 16 because all other m68k targets have it so */ -#define STRUCTURE_SIZE_BOUNDARY 16 - -/* See m68k.h. 0 means 680[01]0 with no 68881. */ - -#undef TARGET_DEFAULT -#define TARGET_DEFAULT 0 - -/* Don't try using XFmode. */ -#undef LONG_DOUBLE_TYPE_SIZE -#define LONG_DOUBLE_TYPE_SIZE 64 - -/* special flags to the unos assembler. */ - -#undef ASM_SPEC -#define ASM_SPEC "-g" - -#undef LIB_SPEC -#define LIB_SPEC "%{!p:%{!pg:-lunos}}%{p:-lc_p}%{pg:-lc_p}" - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC \ - "%{pg:gcrt0.o%s}%{!pg:%{p:mc68rt0.o%s}%{!p:c68rt0.o%s}}" - -/* CC1 spec */ -#if 0 -/* c.sac only used in _s_call_r() in libunos.a and malloc() in libmalloc.a */ -/* so we do not need to bother ! */ -#define CC1_SPEC "-fpcc-struct-return" -#endif - -/* -O2 for MAX optimization */ -#undef CC1_SPEC -#define CC1_SPEC "%{O2:-fstrength-reduce}" - -/* cpp has to support a #sccs directive for the /usr/include files */ - -#define SCCS_DIRECTIVE - -/* Make output for SDB. */ - -/* #define SDB_DEBUGGING_INFO UNOS casm has no debugging :-( */ - -/* UNOS need stack probe :-( */ - -#if 0 -#define HAVE_probe 1 -#define gen_probe() gen_rtx_ASM_INPUT (VOIDmode, "tstb -2048(sp)\t;probe\n") -#else -#undef NEED_PROBE -#define NEED_PROBE (-2048) -#endif - -/* use memcpy, memset instead of bcopy, etc. */ - -#define TARGET_MEM_FUNCTIONS - -/* Define __HAVE_68881__ in preprocessor if -m68881 is specified. - This will control the use of inline 68881 insns in certain macros. */ - -#undef CPP_SPEC -#define CPP_SPEC "%{m68881:-D__HAVE_68881__}" - -/* Names to predefine in the preprocessor for this target machine. */ - -#undef CPP_PREDEFINES -#define CPP_PREDEFINES "-Dmc68k -DM68000 -Dmc68000 -Dunos -Dunix -D__motorola__ -Asystem=unix -Acpu=m68k -Amachine=m68k" - -/* Register in which address to store a structure value - is passed to a function. */ -/* unos uses ".comm c.sac" returns &c.sac in d0 */ -/* make pointer to c.sac ? -#undef STRUCT_VALUE_REGNUM -#define STRUCT_VALUE gen_rtx_MEM (Pmode, gen_rtx( , , ) ) -*/ - -#define BSS_SECTION_ASM_OP "\t.bss" - -/* Specify how to pad function arguments. - Value should be `upward', `downward' or `none'. - Same as the default, except no padding for large or variable-size args. */ - -#define FUNCTION_ARG_PADDING(MODE, TYPE) \ - (((MODE) == BLKmode \ - ? ((TYPE) && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \ - && int_size_in_bytes (TYPE) < PARM_BOUNDARY / BITS_PER_UNIT) \ - : GET_MODE_BITSIZE (MODE) < PARM_BOUNDARY) \ - ? downward : none) - -/* Override parts of m68k.h to fit the CRuDS assembler. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (68k, CRDS/UNOS)"); - -/* Specify extra dir to search for include files. */ -#define SYSTEM_INCLUDE_DIR "/include" - -/* Control the assembler format that we output. */ - -/* Output at beginning of assembler file. */ - -#undef ASM_FILE_START -#define ASM_FILE_START(FILE) \ - fprintf (FILE, ";#NO_APP\n"); - -/* Output to assembler file text saying following lines - may contain character constants, extra white space, comments, etc. */ - -#undef ASM_APP_ON -#define ASM_APP_ON ";#APP\n" - -/* Output to assembler file text saying following lines - no longer contain unusual constructs. */ - -#undef ASM_APP_OFF -#define ASM_APP_OFF ";#NO_APP\n" - -/* The prefix for immediate operands. */ - -#undef IMMEDIATE_PREFIX -#define IMMEDIATE_PREFIX "$" - -/*unos has no .skip :-( */ -#undef ASM_OUTPUT_SKIP -#define ASM_OUTPUT_SKIP(FILE,SIZE) \ - fprintf (FILE, "\t. = . + %u\n", (SIZE)); - -/* This says how to output an assembler line - to define a local common symbol. */ -/* should use bss_section instead of data_section but this makes casm die ? */ - -#undef ASM_OUTPUT_LOCAL -#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ -{ data_section (); \ - if ((SIZE) > 1) fprintf (FILE, "\t.even\n"); \ - assemble_name ((FILE), (NAME)); \ - fprintf ((FILE), ":\t. = . + %u\n", (ROUNDED));} - -/* This is how to output an insn to push a register on the stack. - It need not be very fast code. */ - -#undef ASM_OUTPUT_REG_PUSH -#define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \ - fprintf (FILE, "\tmovel %s,-(sp)\n", reg_names[REGNO]) - -/* This is how to output an insn to pop a register from the stack. - It need not be very fast code. */ - -#undef ASM_OUTPUT_REG_POP -#define ASM_OUTPUT_REG_POP(FILE,REGNO) \ - fprintf (FILE, "\tmovel (sp)+,%s\n", reg_names[REGNO]) - -#undef ASM_OUTPUT_ASCII -#define ASM_OUTPUT_ASCII(FILE, P , SIZE) \ -do { size_t i, limit = (SIZE); \ - fprintf ((FILE), "\t.ascii \""); \ - for (i = 0; i < limit; i++) \ - { \ - register int c = (P)[i]; \ - if (i != 0 && (i / 200) * 200 == i) \ - fprintf ((FILE), "\"\n\t.ascii \""); \ - if (c >= ' ' && c < 0177) { \ - if (c != '\"' && c != '\\') { \ - putc (c, (FILE)); \ - continue; \ - } \ - } \ - /* brain dead asm doesn't understand char escapes */ \ - fprintf ((FILE), "\"\n\t.byte\t%d\n\t.ascii \"", c); \ - } \ - fprintf ((FILE), "\"\n"); \ - } while (0) - - -/* Change all JBxx to Bxx. Also change all DBRA to DBF. - Also change divs.l, etc., to divs, etc. But don't change divsl.l. */ - -#define ASM_OUTPUT_OPCODE(FILE, PTR) \ -{ if ((PTR)[0] == 'j' && (PTR)[1] == 'b') \ - { ++(PTR); } \ - else if ((PTR)[0] == 'd') \ - { \ - if (!strncmp ((PTR), "dbra", 4)) \ - { fprintf ((FILE), "dbf"); (PTR) += 4; } \ - else if (!strncmp ((PTR), "div", 3) && (PTR)[5] == ' ') \ - { fprintf ((FILE), "div%c", (PTR)[3]); (PTR) += 6; } \ - } \ -} - - -#if 0 -/* Print operand X (an rtx) in assembler syntax to file FILE. - CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. - For `%' followed by punctuation, CODE is the punctuation and X is null. - - On the 68000, we use several CODE characters: - '.' for dot needed in Motorola-style opcode names. - '-' for an operand pushing on the stack: - sp@-, -(sp) or -(%sp) depending on the style of syntax. - '+' for an operand pushing on the stack: - sp@+, (sp)+ or (%sp)+ depending on the style of syntax. - '@' for a reference to the top word on the stack: - sp@, (sp) or (%sp) depending on the style of syntax. - '#' for an immediate operand prefix (# in MIT and Motorola syntax - but & in SGS syntax, $ in unos syntax). - '!' for the fpcr register (used in some float-to-fixed conversions). - - 'b' for byte insn (no effect, on the Sun; this is for the ISI). - 'd' to force memory addressing to be absolute, not relative. - 'f' for float insn (print a CONST_DOUBLE as a float rather than in hex) - 'w' for FPA insn (print a CONST_DOUBLE as a SunFPA constant rather - than directly). Second part of 'y' below. - 'x' for float insn (print a CONST_DOUBLE as a float rather than in hex), - or print pair of registers as rx:ry. - 'y' for a FPA insn (print pair of registers as rx:ry). This also outputs - CONST_DOUBLE's as SunFPA constant RAM registers if - possible, so it should not be used except for the SunFPA. */ - -#undef PRINT_OPERAND_PUNCT_VALID_P -#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ - ((CODE) == '.' || (CODE) == '#' || (CODE) == '-' \ - || (CODE) == '+' || (CODE) == '@' || (CODE) == '!') - -#undef PRINT_OPERAND -#define PRINT_OPERAND(FILE, X, CODE) \ -{ int i; \ - if (CODE == '.') ; \ - else if (CODE == '#') fprintf (FILE, "$"); \ - else if (CODE == '-') fprintf (FILE, "-(sp)"); \ - else if (CODE == '+') fprintf (FILE, "(sp)+"); \ - else if (CODE == '@') fprintf (FILE, "(sp)"); \ - else if (CODE == '!') fprintf (FILE, "fpcr"); \ - else if (CODE == '/') \ - ; \ - else if (GET_CODE (X) == REG) \ - { if (REGNO (X) < 16 && (CODE == 'y' || CODE == 'x') && GET_MODE (X) == DFmode) \ - fprintf (FILE, "%s:%s", reg_names[REGNO (X)], reg_names[REGNO (X)+1]); \ - else \ - fprintf (FILE, "%s", reg_names[REGNO (X)]); \ - } \ - else if (GET_CODE (X) == MEM) \ - { \ - output_address (XEXP (X, 0)); \ - if (CODE == 'd' && ! TARGET_68020 \ - && CONSTANT_ADDRESS_P (XEXP (X, 0))) \ - /* fprintf (FILE, ".l") */; \ - } \ - else if ((CODE == 'y' || CODE == 'w') \ - && GET_CODE(X) == CONST_DOUBLE \ - && (i = standard_sun_fpa_constant_p (X))) \ - fprintf (FILE, "%%%d", i & 0x1ff); \ - else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == SFmode) \ - { REAL_VALUE_TYPE r; long l; \ - REAL_VALUE_FROM_CONST_DOUBLE (r, X); \ - if (CODE == 'f') \ - ASM_OUTPUT_FLOAT_OPERAND (CODE, FILE, r); \ - else \ - { REAL_VALUE_TO_TARGET_SINGLE (r, l); \ - fprintf (FILE, "$0x%lx", l); } } \ - else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode) \ - { REAL_VALUE_TYPE r; \ - REAL_VALUE_FROM_CONST_DOUBLE (r, X); \ - ASM_OUTPUT_DOUBLE_OPERAND (FILE, r); } \ - else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == XFmode) \ - { REAL_VALUE_TYPE r; \ - REAL_VALUE_FROM_CONST_DOUBLE (r, X); \ - ASM_OUTPUT_LONG_DOUBLE_OPERAND (FILE, r); } \ - else { putc ('$', FILE); output_addr_const (FILE, X); }} -#endif - -/* Note that this contains a kludge that knows that the only reason - we have an address (plus (label_ref...) (reg...)) - is in the insn before a tablejump, and we know that m68k.md - generates a label LInnn: on such an insn. */ -#undef PRINT_OPERAND_ADDRESS -#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ -{ register rtx reg1, reg2, breg, ireg; \ - register rtx addr = ADDR; \ - rtx offset; \ - switch (GET_CODE (addr)) \ - { \ - case REG: \ - fprintf (FILE, "(%s)", reg_names[REGNO (addr)]); \ - break; \ - case PRE_DEC: \ - fprintf (FILE, "-(%s)", reg_names[REGNO (XEXP (addr, 0))]); \ - break; \ - case POST_INC: \ - fprintf (FILE, "(%s)+", reg_names[REGNO (XEXP (addr, 0))]); \ - break; \ - case PLUS: \ - reg1 = 0; reg2 = 0; \ - ireg = 0; breg = 0; \ - offset = 0; \ - if (CONSTANT_ADDRESS_P (XEXP (addr, 0))) \ - { \ - offset = XEXP (addr, 0); \ - addr = XEXP (addr, 1); \ - } \ - else if (CONSTANT_ADDRESS_P (XEXP (addr, 1))) \ - { \ - offset = XEXP (addr, 1); \ - addr = XEXP (addr, 0); \ - } \ - if (GET_CODE (addr) != PLUS) ; \ - else if (GET_CODE (XEXP (addr, 0)) == SIGN_EXTEND) \ - { \ - reg1 = XEXP (addr, 0); \ - addr = XEXP (addr, 1); \ - } \ - else if (GET_CODE (XEXP (addr, 1)) == SIGN_EXTEND) \ - { \ - reg1 = XEXP (addr, 1); \ - addr = XEXP (addr, 0); \ - } \ - else if (GET_CODE (XEXP (addr, 0)) == MULT) \ - { \ - reg1 = XEXP (addr, 0); \ - addr = XEXP (addr, 1); \ - } \ - else if (GET_CODE (XEXP (addr, 1)) == MULT) \ - { \ - reg1 = XEXP (addr, 1); \ - addr = XEXP (addr, 0); \ - } \ - else if (GET_CODE (XEXP (addr, 0)) == REG) \ - { \ - reg1 = XEXP (addr, 0); \ - addr = XEXP (addr, 1); \ - } \ - else if (GET_CODE (XEXP (addr, 1)) == REG) \ - { \ - reg1 = XEXP (addr, 1); \ - addr = XEXP (addr, 0); \ - } \ - if (GET_CODE (addr) == REG || GET_CODE (addr) == MULT \ - || GET_CODE (addr) == SIGN_EXTEND) \ - { if (reg1 == 0) reg1 = addr; else reg2 = addr; addr = 0; } \ - if (offset != 0) { if (addr != 0) abort (); addr = offset; } \ - if ((reg1 && (GET_CODE (reg1) == SIGN_EXTEND \ - || GET_CODE (reg1) == MULT)) \ - || (reg2 != 0 && REGNO_OK_FOR_BASE_P (REGNO (reg2)))) \ - { breg = reg2; ireg = reg1; } \ - else if (reg1 != 0 && REGNO_OK_FOR_BASE_P (REGNO (reg1))) \ - { breg = reg1; ireg = reg2; } \ - if (ireg != 0 && breg == 0 && GET_CODE (addr) == LABEL_REF) \ - { int scale = 1; \ - if (GET_CODE (ireg) == MULT) \ - { scale = INTVAL (XEXP (ireg, 1)); \ - ireg = XEXP (ireg, 0); } \ - if (GET_CODE (ireg) == SIGN_EXTEND) \ - fprintf (FILE, "L%d-LI%d-2(pc,%s.w", \ - CODE_LABEL_NUMBER (XEXP (addr, 0)), \ - CODE_LABEL_NUMBER (XEXP (addr, 0)), \ - reg_names[REGNO (XEXP (ireg, 0))]); \ - else \ - fprintf (FILE, "L%d-LI%d-2(pc,%s.l", \ - CODE_LABEL_NUMBER (XEXP (addr, 0)), \ - CODE_LABEL_NUMBER (XEXP (addr, 0)), \ - reg_names[REGNO (ireg)]); \ - if (scale != 1) fprintf (FILE, ":%d", scale); \ - putc (')', FILE); \ - break; } \ - if (breg != 0 && ireg == 0 && GET_CODE (addr) == LABEL_REF) \ - { fprintf (FILE, "L%d-LI%d-2(pc,%s.l", \ - CODE_LABEL_NUMBER (XEXP (addr, 0)), \ - CODE_LABEL_NUMBER (XEXP (addr, 0)), \ - reg_names[REGNO (breg)]); \ - putc (')', FILE); \ - break; } \ - if (ireg != 0 || breg != 0) \ - { int scale = 1; \ - if (breg == 0) \ - abort (); \ - if (addr && GET_CODE (addr) == LABEL_REF) abort (); \ - if (addr != 0) \ - output_addr_const (FILE, addr); \ - fprintf (FILE, "(%s", reg_names[REGNO (breg)]); \ - if (breg != 0 && ireg != 0) \ - putc (',', FILE); \ - if (ireg != 0 && GET_CODE (ireg) == MULT) \ - { scale = INTVAL (XEXP (ireg, 1)); \ - ireg = XEXP (ireg, 0); } \ - if (ireg != 0 && GET_CODE (ireg) == SIGN_EXTEND) \ - fprintf (FILE, "%s.w", reg_names[REGNO (XEXP (ireg, 0))]); \ - else if (ireg != 0) \ - fprintf (FILE, "%s.l", reg_names[REGNO (ireg)]); \ - if (scale != 1) fprintf (FILE, ":%d", scale); \ - putc (')', FILE); \ - break; \ - } \ - else if (reg1 != 0 && GET_CODE (addr) == LABEL_REF) \ - { fprintf (FILE, "L%d-LI%d-2(pc,%s.l)", \ - CODE_LABEL_NUMBER (XEXP (addr, 0)), \ - CODE_LABEL_NUMBER (XEXP (addr, 0)), \ - reg_names[REGNO (reg1)]); \ - break; } \ - default: \ - if (GET_CODE (addr) == CONST_INT \ - && INTVAL (addr) < 0x8000 \ - && INTVAL (addr) >= -0x8000) \ - fprintf (FILE, "%d", INTVAL (addr)); \ - else \ - output_addr_const (FILE, addr); \ - }} - -#define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \ - do { fprintf (FILE, "\t; file\t"); \ - output_quoted_string (FILE, FILENAME); \ - fprintf (FILE, "\n"); \ - } while (0) - -#define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \ - fprintf (FILE, "\t; ln\t%d\n", \ - (sdb_begin_function_line \ - ? (LINENO) - sdb_begin_function_line : 1)) - -/* Must put address in %a0 , not %d0 . -- LGM, 7/15/88 */ -/* UNOS ?? */ -#undef FUNCTION_PROFILER -#define FUNCTION_PROFILER(FILE, LABEL_NO) \ - fprintf (FILE, "\tmovl &LP%%%d,%%a0\n\tjsr mcount\n", (LABEL_NO))