--- gcc/config/m88k.h 2018/04/24 17:51:33 1.1.1.1 +++ gcc/config/m88k.h 2018/04/24 17:54:12 1.1.1.2 @@ -95,6 +95,8 @@ extern struct rtx_def *m88k_compare_reg; extern struct rtx_def *m88k_compare_op0; extern struct rtx_def *m88k_compare_op1; +extern enum attr_cpu m88k_cpu; + extern int null_epilogue (); extern int integer_ok_for_set (); extern int m88k_debugger_offset (); @@ -202,9 +204,9 @@ extern char * reg_names[]; /* Print subsidiary information on the compiler version in use. Redefined in m88kv4.h, and m88kluna.h. */ #define VERSION_INFO1 "88open OCS/BCS, " -#define VERSION_INFO2 "12 Feb 1992" +#define VERSION_INFO2 "20 Mar 1992" #define VERSION_STRING version_string -#define TM_SCCS_ID "@(#)m88k.h 1.96.5.5 12 Feb 1992 12:59:25" +#define TM_SCCS_ID "@(#)m88k.h 2.0.3.6 20 Mar 1992 08:33:40" /* Run-time compilation parameters selecting different hardware subsets. */ @@ -302,6 +304,9 @@ extern char * reg_names[]; if ((target_flags & MASK_88000) == 0) \ target_flags |= CPU_DEFAULT; \ \ + m88k_cpu = (TARGET_88000 ? CPU_M88000 \ + : (TARGET_88100 ? CPU_M88100 : CPU_M88110)); \ + \ if (TARGET_BIG_PIC) \ flag_pic = 2; \ \ @@ -359,7 +364,7 @@ extern char * reg_names[]; instructions for them. */ #define WORDS_BIG_ENDIAN 1 -/* Number of bits in an addressible storage unit */ +/* Number of bits in an addressable storage unit */ #define BITS_PER_UNIT 8 /* Width in bits of a "word", which is the contents of a machine register. @@ -409,9 +414,9 @@ extern char * reg_names[]; /* Every structure's size must be a multiple of this. */ #define STRUCTURE_SIZE_BOUNDARY 8 -/* Define this if move instructions will actually fail to work +/* Set this nonzero if move instructions will actually fail to work when given unaligned data. */ -#define STRICT_ALIGNMENT +#define STRICT_ALIGNMENT 1 /* A bitfield declared as `int' forces `int' alignment for the struct. */ #define PCC_BITFIELD_TYPE_MATTERS 1 @@ -422,7 +427,7 @@ extern char * reg_names[]; /* Report errors on floating point, if we are given NaN's, or such. Leave the number as is, though, since we output the number in hex, and the - assemble won't choak on it. */ + assembler won't choke on it. */ #define CHECK_FLOAT_VALUE(MODE,VALUE) check_float_value (MODE, VALUE) /* A code distinguishing the floating point format of the target machine. */ @@ -482,11 +487,7 @@ extern char * reg_names[]; #define CONDITIONAL_REGISTER_USAGE \ { \ if (flag_pic) \ - { \ - fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ - call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ - global_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ - } \ + fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ } /* These interfaces that don't apply to the m88000. */ @@ -644,7 +645,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA expression is true iff C is a known letter and VALUE is appropriate for that letter. - For the m88000, the following contraints are used: + For the m88000, the following constants are used: `I' requires a non-negative 16-bit value. `J' requires a non-positive 16-bit value. `K' is unused. @@ -987,7 +988,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA This is really two components. The first 32 bytes are fixed and must be copied; the last 12 bytes are just storage that's filled in later. So for allocation purposes, it's 32+12 bytes, but for - initializaiton purposes, it's 32 bytes. */ + initialization purposes, it's 32 bytes. */ #define TRAMPOLINE_SIZE (32+12) @@ -1358,7 +1359,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA return 0; /* Provide the costs of an addressing mode that contains ADDR. - If ADDR is not a valid address, it's cost is irrelavent. + If ADDR is not a valid address, its cost is irrelevant. REG+REG is made slightly more expensive because it might keep a register live for longer than we might like. */ #define ADDRESS_COST(ADDR) \ @@ -1416,68 +1417,68 @@ enum reg_class { NO_REGS, AP_REG, GENERA #undef SIZE_ASM_OP /* These are used in varasm.c as well. */ -#define TEXT_SECTION_ASM_OP "\ttext" -#define DATA_SECTION_ASM_OP "\tdata" +#define TEXT_SECTION_ASM_OP "text" +#define DATA_SECTION_ASM_OP "data" /* Other sections. */ #define CONST_SECTION_ASM_OP (VERSION_0300_SYNTAX \ - ? "\tsection\t .rodata,\"a\"\n" \ - : "\tsection\t .rodata,\"x\"\n") + ? "section\t .rodata,\"a\"" \ + : "section\t .rodata,\"x\"") #define TDESC_SECTION_ASM_OP (VERSION_0300_SYNTAX \ - ? "\tsection\t .tdesc,\"a\"" \ - : "\tsection\t .tdesc,\"x\"") + ? "section\t .tdesc,\"a\"" \ + : "section\t .tdesc,\"x\"") /* These must be constant strings for crtstuff.c. */ -#define CTORS_SECTION_ASM_OP "\tsection\t .ctors,\"d\"\n" -#define DTORS_SECTION_ASM_OP "\tsection\t .dtors,\"d\"\n" -#define INIT_SECTION_ASM_OP "\tsection\t .init,\"x\"" -#define FINI_SECTION_ASM_OP "\tsection\t .fini,\"x\"" +#define CTORS_SECTION_ASM_OP "section\t .ctors,\"d\"" +#define DTORS_SECTION_ASM_OP "section\t .dtors,\"d\"" +#define INIT_SECTION_ASM_OP "section\t .init,\"x\"" +#define FINI_SECTION_ASM_OP "section\t .fini,\"x\"" /* These are pretty much common to all assemblers. */ -#define IDENT_ASM_OP "\tident" -#define FILE_ASM_OP "\tfile" -#define SECTION_ASM_OP "\tsection" -#define DEF_ASM_OP "\tdef" -#define GLOBAL_ASM_OP "\tglobal" -#define ALIGN_ASM_OP "\talign" -#define SKIP_ASM_OP "\tzero" -#define COMMON_ASM_OP "\tcomm" -#define LOCAL_ASM_OP "\tbss" -#define FLOAT_ASM_OP "\tfloat" -#define DOUBLE_ASM_OP "\tdouble" -#define INT_ASM_OP "\tword" +#define IDENT_ASM_OP "ident" +#define FILE_ASM_OP "file" +#define SECTION_ASM_OP "section" +#define DEF_ASM_OP "def" +#define GLOBAL_ASM_OP "global" +#define ALIGN_ASM_OP "align" +#define SKIP_ASM_OP "zero" +#define COMMON_ASM_OP "comm" +#define LOCAL_ASM_OP "bss" +#define FLOAT_ASM_OP "float" +#define DOUBLE_ASM_OP "double" +#define INT_ASM_OP "word" #define ASM_LONG INT_ASM_OP -#define SHORT_ASM_OP "\thalf" -#define CHAR_ASM_OP "\tbyte" -#define ASCII_DATA_ASM_OP "\tstring" +#define SHORT_ASM_OP "half" +#define CHAR_ASM_OP "byte" +#define ASCII_DATA_ASM_OP "string" /* These are particular to the global pool optimization. */ -#define SBSS_ASM_OP "\tsbss" -#define SCOMM_ASM_OP "\tscomm" -#define SDATA_SECTION_ASM_OP "\tsdata" +#define SBSS_ASM_OP "sbss" +#define SCOMM_ASM_OP "scomm" +#define SDATA_SECTION_ASM_OP "sdata" /* These are specific to PIC. */ -#define TYPE_ASM_OP "\ttype" -#define SIZE_ASM_OP "\tsize" -#define WEAK_ASM_OP "\tweak" +#define TYPE_ASM_OP "type" +#define SIZE_ASM_OP "size" +#define WEAK_ASM_OP "weak" #ifndef AS_BUG_POUND_TYPE /* Faulty assemblers require @ rather than #. */ #undef TYPE_OPERAND_FMT #define TYPE_OPERAND_FMT "#%s" #endif /* These are specific to version 03.00 assembler syntax. */ -#define INTERNAL_ASM_OP "\tlocal" -#define VERSION_ASM_OP "\tversion" +#define INTERNAL_ASM_OP "local" +#define VERSION_ASM_OP "version" #define ASM_DWARF_POP_SECTION(FILE) fputs ("\tprevious\n", FILE) -#define UNALIGNED_SHORT_ASM_OP "\tuahalf" -#define UNALIGNED_INT_ASM_OP "\tuaword" +#define UNALIGNED_SHORT_ASM_OP "uahalf" +#define UNALIGNED_INT_ASM_OP "uaword" /* Output any initial stuff to the assembly file. Always put out a file directive, even if not debugging. Immediately after putting out the file, put out a "sem." declaration. This should be harmless on other systems, and - is used in DG/UX by the debuggers to suppliment COFF. The + is used in DG/UX by the debuggers to supplement COFF. The fields in the integer value are as follows: Bits Value Meaning @@ -1514,7 +1515,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA #define ASM_FIRST_LINE(FILE) \ do { \ if (VERSION_0300_SYNTAX) \ - fprintf (FILE, "%s\t \"03.00\"\n", VERSION_ASM_OP); \ + fprintf (FILE, "\t%s\t \"03.00\"\n", VERSION_ASM_OP); \ } while (0) /* Override svr[34].h. */ @@ -1526,7 +1527,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA #undef ASM_FILE_END #define ASM_OUTPUT_SOURCE_FILENAME(FILE, NAME) \ - fprintf (FILE, "%s\t \"%s\"\n", FILE_ASM_OP, NAME) + fprintf (FILE, "\t%s\t \"%s\"\n", FILE_ASM_OP, NAME) #ifdef SDB_DEBUGGING_INFO #define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ @@ -1541,7 +1542,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA #define ASM_OUTPUT_IDENT(FILE, NAME) #else #define ASM_OUTPUT_IDENT(FILE, NAME) \ - fprintf(FILE, "%s\t \"%s\"\n", IDENT_ASM_OP, NAME) + fprintf (FILE, "\t%s\t \"%s\"\n", IDENT_ASM_OP, NAME) #endif /* Output to assembler file text saying following lines @@ -1593,7 +1594,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA do { \ if (DECLARE_ASM_NAME) \ { \ - fprintf (FILE, "%s\t ", TYPE_ASM_OP); \ + fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ assemble_name (FILE, NAME); \ putc (',', FILE); \ fprintf (FILE, TYPE_OPERAND_FMT, "function"); \ @@ -1608,14 +1609,14 @@ enum reg_class { NO_REGS, AP_REG, GENERA do { \ if (DECLARE_ASM_NAME) \ { \ - fprintf (FILE, "%s\t ", TYPE_ASM_OP); \ + fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ assemble_name (FILE, NAME); \ putc (',', FILE); \ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \ putc ('\n', FILE); \ if (!flag_inhibit_size_directive) \ { \ - fprintf (FILE, "%s\t ", SIZE_ASM_OP); \ + fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ assemble_name (FILE, NAME); \ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (decl))); \ } \ @@ -1636,7 +1637,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA labelno++; \ ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \ ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \ - fprintf (FILE, "%s\t ", SIZE_ASM_OP); \ + fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ assemble_name (FILE, (FNAME)); \ fprintf (FILE, ",%s-", &label[1]); \ assemble_name (FILE, (FNAME)); \ @@ -1654,7 +1655,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA defined for reference from other files. */ #define ASM_GLOBALIZE_LABEL(FILE,NAME) \ do { \ - fprintf (FILE, "%s\t ", GLOBAL_ASM_OP); \ + fprintf (FILE, "\t%s\t ", GLOBAL_ASM_OP); \ assemble_name (FILE, NAME); \ putc ('\n', FILE); \ } while (0) @@ -1675,7 +1676,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA #ifdef AS_BUG_DOT_LABELS /* The assembler requires a declaration of local. */ #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ - fprintf (FILE, VERSION_0300_SYNTAX ? ".%s%d:\n%s\t .%s%d\n" : "@%s%d:\n", \ + fprintf (FILE, VERSION_0300_SYNTAX ? ".%s%d:\n\t%s\t .%s%d\n" : "@%s%d:\n", \ PREFIX, NUM, INTERNAL_ASM_OP, PREFIX, NUM) #else #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ @@ -1734,7 +1735,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA do { \ union { REAL_VALUE_TYPE d; long l[2]; } x; \ x.d = (VALUE); \ - fprintf (FILE, "%s\t 0x%.8x, 0x%.8x\n", INT_ASM_OP, \ + fprintf (FILE, "\t%s\t 0x%.8x, 0x%.8x\n", INT_ASM_OP, \ x.l[0], x.l[1]); \ } while (0) @@ -1743,28 +1744,28 @@ enum reg_class { NO_REGS, AP_REG, GENERA do { \ int i; \ FLOAT_TO_INT_INTERNAL (VALUE, i); \ - fprintf (FILE, "%s\t 0x%.8x\n", INT_ASM_OP, i); \ + fprintf (FILE, "\t%s\t 0x%.8x\n", INT_ASM_OP, i); \ } while (0) /* Likewise for `int', `short', and `char' constants. */ #define ASM_OUTPUT_INT(FILE,VALUE) \ -( fprintf (FILE, "%s\t ", INT_ASM_OP), \ +( fprintf (FILE, "\t%s\t ", INT_ASM_OP), \ output_addr_const (FILE, (VALUE)), \ fprintf (FILE, "\n")) #define ASM_OUTPUT_SHORT(FILE,VALUE) \ -( fprintf (FILE, "%s\t ", SHORT_ASM_OP), \ +( fprintf (FILE, "\t%s\t ", SHORT_ASM_OP), \ output_addr_const (FILE, (VALUE)), \ fprintf (FILE, "\n")) #define ASM_OUTPUT_CHAR(FILE,VALUE) \ -( fprintf (FILE, "%s\t ", CHAR_ASM_OP), \ +( fprintf (FILE, "\t%s\t ", CHAR_ASM_OP), \ output_addr_const (FILE, (VALUE)), \ fprintf (FILE, "\n")) /* This is how to output an assembler line for a numeric constant byte. */ #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "%s\t 0x%x\n", CHAR_ASM_OP, (VALUE)) + fprintf (FILE, "\t%s\t 0x%x\n", CHAR_ASM_OP, (VALUE)) /* The singl-byte pseudo-op is the default. Override svr[34].h. */ #undef ASM_BYTE_OP @@ -1804,7 +1805,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA to a multiple of 2**LOG bytes. */ #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG) != 0) \ - fprintf (FILE, "%s\t %d\n", ALIGN_ASM_OP, 1<<(LOG)) + fprintf (FILE, "\t%s\t %d\n", ALIGN_ASM_OP, 1<<(LOG)) /* Align the text address to half a cache boundary when it can only be reached by jumping. Pack code tightly when compiling crtstuff.c. */ @@ -1814,7 +1815,7 @@ enum reg_class { NO_REGS, AP_REG, GENERA /* Override svr[34].h. */ #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ - fprintf (FILE, "%s\t %u\n", SKIP_ASM_OP, (SIZE)) + fprintf (FILE, "\t%s\t %u\n", SKIP_ASM_OP, (SIZE)) /* Override svr4.h. */ #undef ASM_OUTPUT_EXTERNAL_LIBCALL @@ -1825,18 +1826,18 @@ enum reg_class { NO_REGS, AP_REG, GENERA #undef ASM_OUTPUT_COMMON #undef ASM_OUTPUT_ALIGNED_COMMON #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ -( fprintf ((FILE), "%s\t ", \ - (ROUNDED) <= m88k_gp_threshold ? SCOMM_ASM_OP : COMMON_ASM_OP), \ +( fprintf ((FILE), "\t%s\t ", \ + ((SIZE) ? (SIZE) : 1) <= m88k_gp_threshold ? SCOMM_ASM_OP : COMMON_ASM_OP), \ assemble_name ((FILE), (NAME)), \ fprintf ((FILE), ",%u\n", (SIZE) ? (SIZE) : 1)) -/* This says how to output an assember line to define a local common +/* This says how to output an assembler line to define a local common symbol. Override svr[34].h. */ #undef ASM_OUTPUT_LOCAL #undef ASM_OUTPUT_ALIGNED_LOCAL #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ -( fprintf ((FILE), "%s\t ", \ - (ROUNDED) <= m88k_gp_threshold ? SBSS_ASM_OP : LOCAL_ASM_OP), \ +( fprintf ((FILE), "\t%s\t ", \ + ((SIZE) ? (SIZE) : 1) <= m88k_gp_threshold ? SBSS_ASM_OP : LOCAL_ASM_OP), \ assemble_name ((FILE), (NAME)), \ fprintf ((FILE), ",%u,%d\n", (SIZE) ? (SIZE) : 1, (SIZE) <= 4 ? 4 : 8))