--- gcc/config/fx80/fx80.h 2018/04/24 18:10:25 1.1 +++ gcc/config/fx80/fx80.h 2018/04/24 18:29:16 1.1.1.4 @@ -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, 1995 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). @@ -17,7 +17,8 @@ GNU General Public License for more deta 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ /* This file is based on m68k.h, simplified by removing support for @@ -26,7 +27,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. */ @@ -431,6 +432,7 @@ extern enum reg_class regno_reg_class[]; /* Value is the number of bytes of arguments automatically popped when returning from a subroutine call. + FUNDECL is the declaration node of the function (as a tree), FUNTYPE is the data type of the function (as a tree), or for a library call it is an identifier node for the subroutine name. SIZE is the number of bytes of arguments passed on the stack. @@ -440,7 +442,7 @@ extern enum reg_class regno_reg_class[]; could add to the pending stack adjustment the size of the argument descriptors that are pushed after the arguments. */ -#define RETURN_POPS_ARGS(FUNTYPE,SIZE) (SIZE) +#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) (SIZE) /* Define how to find the value returned by a function. VALTYPE is the data type of the value (as a tree). @@ -841,10 +843,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 +889,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; \ + (OVERFLOW) = 1, (D) = 0.0; \ } /* Tell final.c how to eliminate redundant test instructions. */ @@ -984,7 +985,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 +1119,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 +1269,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); } \