--- gcc/config/romp/romp.md 2018/04/24 18:10:26 1.1 +++ gcc/config/romp/romp.md 2018/04/24 18:22:32 1.1.1.3 @@ -1,6 +1,6 @@ ;;- Machine description for ROMP chip for GNU C compiler -;; Copyright (C) 1988, 1991 Free Software Foundation, Inc. -;; Contributed by Richard Kenner (kenner@nyu.edu) +;; Copyright (C) 1988, 1991, 1993, 1994 Free Software Foundation, Inc. +;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) ;; This file is part of GNU CC. @@ -335,6 +335,10 @@ "loadha %0,%1" [(set_attr "type" "load")]) + +;; use cal16 instead of cal for constant source because combine requires +;; the high bits of the register to be 0 after a HImode load of a constant + (define_insn "" [(set (match_operand:HI 0 "reg_or_nonsymb_mem_operand" "=r,r,r,r,r,b,Q") (match_operand:HI 1 "romp_operand" "r,I,n,s,Q,m,r"))] @@ -343,7 +347,7 @@ "@ cas %0,%1,r0 lis %0,%1 - cal %0,%L1(r0) + cal16 %0,%L1(r0) get %0,$%1 lh%N1 %0,%1 loadh %0,%1 @@ -2540,8 +2544,7 @@ "GET_MODE (operands[0]) == SFmode || GET_MODE (operands[0]) == DFmode" "* { return output_fpop (next_insn_tests_no_inequality (insn) ? EQ : GE, - operands[0], immed_real_const_1 (0, 0, - GET_MODE (operands[0])), + operands[0], CONST0_RTX (GET_MODE (operands[0])), 0, insn); }" [(set_attr "type" "fp") @@ -2555,8 +2558,7 @@ "" "* { return output_fpop (next_insn_tests_no_inequality (insn) ? EQ : GE, - operands[1], immed_real_const_1 (0, 0, - GET_MODE (operands[1])), + operands[1], CONST0_RTX (GET_MODE (operands[1])), 0, insn); }" [(set_attr "type" "fp")