--- gcc/config/fx80/fx80.h 2018/04/24 18:10:25 1.1 +++ gcc/config/fx80/fx80.h 2018/04/24 18:21:45 1.1.1.3 @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler. Alliant FX version. - Copyright (C) 1989 Free Software Foundation, Inc. + Copyright (C) 1989, 1993, 1994 Free Software Foundation, Inc. Adapted from m68k.h by Paul Petersen (petersen@uicsrd.csrd.uiuc.edu) and Joe Weening (weening@gang-of-four.stanford.edu). @@ -26,7 +26,7 @@ the Free Software Foundation, 675 Mass A /* Names to predefine in the preprocessor for this target machine. */ -#define CPP_PREDEFINES "-Dmc68000 -Dalliant -Dunix" +#define CPP_PREDEFINES "-Dmc68000 -Dalliant -Dunix -Asystem(unix) -Acpu(m68k) -Amachine(m68k)" /* Print subsidiary information on the compiler version in use. */ @@ -841,10 +841,9 @@ extern enum reg_class regno_reg_class[]; /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 0 -/* Define if shifts truncate the shift count - which implies one can omit a sign-extension or zero-extension - of a shift count. */ -#define SHIFT_COUNT_TRUNCATED +/* Define this to be nonzero if shift instructions ignore all but the low-order + few bits. */ +#define SHIFT_COUNT_TRUNCATED 1 /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits is done just by pretending it is already truncated. */ @@ -888,19 +887,19 @@ extern enum reg_class regno_reg_class[]; /* Check a `double' value for validity for a particular machine mode. This is defined to avoid crashes outputting certain constants. */ -#define CHECK_FLOAT_VALUE(mode, d) \ - if ((mode) == SFmode) \ +#define CHECK_FLOAT_VALUE(MODE, D, OVERFLOW) \ + if (OVERFLOW) \ + (D) = 3.4028234663852890e+38; \ + else if ((MODE) == SFmode) \ { \ if ((d) > 3.4028234663852890e+38) \ - { warning ("magnitude of value too large for `float'"); \ - (d) = 3.4028234663852890e+38; } \ - else if ((d) < -3.4028234663852890e+38) \ - { warning ("magnitude of value too large for `float'"); \ - (d) = -3.4028234663852890e+38; } \ - else if (((d) > 0) && ((d) < 1.1754943508222873e-38)) \ - (d) = 0.0; \ + (OVERFLOW) = 1, (D) = 3.4028234663852890e+38; \ + else if ((D) < -3.4028234663852890e+38) \ + (OVERFLOW) = 1, (D) = -3.4028234663852890e+38; \ + else if (((D) > 0) && ((D) < 1.1754943508222873e-38)) \ + (OVERFLOW) = 1, (D) = 0.0; \ else if (((d) < 0) && ((d) > -1.1754943508222873e-38)) \ - (d) = 0.0; \ + (OVEFLOW) = 1, (D) = 0.0; \ } /* Tell final.c how to eliminate redundant test instructions. */ @@ -984,7 +983,7 @@ extern enum reg_class regno_reg_class[]; switch (GET_CODE (cc_status.value2)) \ { case PLUS: case MINUS: case MULT: \ case DIV: case UDIV: case MOD: case UMOD: case NEG: \ - case ASHIFT: case LSHIFT: case ASHIFTRT: case LSHIFTRT: \ + case ASHIFT: case ASHIFTRT: case LSHIFTRT: \ case ROTATE: case ROTATERT: \ if (GET_MODE (cc_status.value2) != VOIDmode) \ cc_status.flags |= CC_NO_OVERFLOW; \ @@ -1118,14 +1117,14 @@ do { union { float f; long l;} tem; \ fprintf (FILE, "\n")) #define ASM_OUTPUT_ASCII(FILE,PTR,SIZE) \ -{ int i; unsigned char *pp = (unsigned char *) (PTR); \ +do { int i; unsigned char *pp = (unsigned char *) (PTR); \ fprintf((FILE), "\t.byte %d", (unsigned int)*pp++); \ for (i = 1; i < (SIZE); ++i, ++pp) { \ if ((i % 8) == 0) \ fprintf((FILE), "\n\t.byte %d", (unsigned int) *pp); \ else \ fprintf((FILE), ",%d", (unsigned int) *pp); } \ - fprintf ((FILE), "\n"); } + fprintf ((FILE), "\n"); } while (0) /* This is how to output an assembler line for a numeric constant byte. */ @@ -1268,7 +1267,7 @@ do { union { float f; long l;} tem; \ fprintf (FILE, "#0r%.9g", u1.f); \ else \ fprintf (FILE, "#0x%x", u1.i); } \ - else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != DImode) \ + else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != VOIDmode) \ { union { double d; int i[2]; } u; \ u.i[0] = CONST_DOUBLE_LOW (X); u.i[1] = CONST_DOUBLE_HIGH (X); \ fprintf (FILE, "#0r%.20g", u.d); } \