--- gcc/config/m68k/m68k.h 2018/04/24 18:14:35 1.1.1.2 +++ gcc/config/m68k/m68k.h 2018/04/24 18:21:04 1.1.1.3 @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler. Sun 68000/68020 version. - Copyright (C) 1987, 1988, 1993 Free Software Foundation, Inc. + Copyright (C) 1987, 1988, 1993, 1994 Free Software Foundation, Inc. This file is part of GNU CC. @@ -677,8 +677,9 @@ extern enum reg_class regno_reg_class[]; On the 68000 series, use a data reg if possible when the value is a constant in the range where moveq could be used and we ensure that QImodes are reloaded into data regs. - Also, if a floating constant needs reloading, put it in memory - if possible. */ + Also, if a floating constant needs reloading, put it in memory. + Don't do this for !G constants, since all patterns in the md file + expect them to be loaded into a register via fpmovecr. See above. */ #define PREFERRED_RELOAD_CLASS(X,CLASS) \ ((GET_CODE (X) == CONST_INT \ @@ -689,7 +690,9 @@ extern enum reg_class regno_reg_class[]; ? DATA_REGS \ : (GET_CODE (X) == CONST_DOUBLE \ && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \ - ? NO_REGS \ + ? (! CONST_DOUBLE_OK_FOR_LETTER_P (X, 'G') \ + && CLASS == FP_REGS \ + ? FP_REGS : NO_REGS) \ : (CLASS)) /* Return the maximum number of consecutive registers @@ -1355,10 +1358,10 @@ __transfer_from_trampoline () \ if (RTX == const0_rtx) return 0; \ /* Constants between -128 and 127 are cheap due to moveq */ \ if (INTVAL (RTX) >= -128 && INTVAL (RTX) <= 127) return 1; \ - /* Constants between -136 and 254 are easily generated */ \ - /* by intelligent uses of moveq, add[q], and subq */ \ - if ((OUTER_CODE) == SET && INTVAL (RTX) >= -136 \ - && INTVAL (RTX) <= 254) return 2; \ + /* Constants between -256 and 255 are easily generated */ \ + /* by use of moveq and not.b */ \ + if ((OUTER_CODE) == SET && INTVAL (RTX) >= -256 \ + && INTVAL (RTX) < 256) return 2; \ case CONST: \ case LABEL_REF: \ case SYMBOL_REF: \ @@ -1390,7 +1393,6 @@ __transfer_from_trampoline () \ break; \ case ASHIFT: \ case ASHIFTRT: \ - case LSHIFT: \ case LSHIFTRT: \ /* A shift by a big integer takes an extra instruction. */ \ if (GET_CODE (XEXP (X, 1)) == CONST_INT \