--- gcc/config/romp.c 2018/04/24 17:51:34 1.1 +++ gcc/config/romp.c 2018/04/24 18:05:04 1.1.1.4 @@ -1,5 +1,5 @@ /* Subroutines used for code generation on ROMP. - Copyright (C) 1990, 1991 Free Software Foundation, Inc. + Copyright (C) 1990, 1991, 1992 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@nyu.edu) This file is part of GNU CC. @@ -613,7 +613,7 @@ float_unary (op, mode) && GET_MODE (XEXP (op, 0)) == GET_MODE (op); } -/* Return 1 if this is a valid floating-point converstion that can be done +/* Return 1 if this is a valid floating-point conversion that can be done as part of an operation by the RT floating-point routines. */ int @@ -929,7 +929,7 @@ print_operand (file, x, code) break; case '.': - /* Output nothing. Used as delimeter in, e.g., "mc%B1%.3 " */ + /* Output nothing. Used as delimiter in, e.g., "mc%B1%.3 " */ break; case '#': @@ -1203,8 +1203,7 @@ output_epilog (file, size) } /* Output any pending floating-point operations. */ - if (write_code) - output_fpops (file); + output_fpops (file); } /* For the ROMP we need to make new SYMBOL_REFs for the actual name of a @@ -1413,12 +1412,12 @@ output_fpop (code, op0, op1, op2, insn) } /* If the first and second operands are the same, merge them. Don't do this - for SFmode in general registers because this triggers a bug in the RT fp - code. */ + for SFmode or SImode in general registers because this triggers a bug in + the RT fp code. */ if (op1 && rtx_equal_p (op0, op1) && code != EQ && code != GE && code != SET - && (GET_MODE (op1) != SFmode || GET_CODE (op0) != REG - || FP_REGNO_P (REGNO (op0)))) + && ((GET_MODE (op1) != SFmode && GET_MODE (op1) != SImode) + || GET_CODE (op0) != REG || FP_REGNO_P (REGNO (op0)))) { op1 = op2; op2 = 0; @@ -1809,6 +1808,8 @@ output_fpops (file) case CONST_INT: case CONST_DOUBLE: case CONST: + case SYMBOL_REF: + case LABEL_REF: type += 0x20; opbyte = 0; immed[i] = fpop->ops[i];