--- gcc/config/vax.md 2018/04/24 16:53:27 1.1.1.1 +++ gcc/config/vax.md 2018/04/24 16:56:56 1.1.1.3 @@ -154,9 +154,22 @@ "" "movq %1,%0") +;; This handles constants which are not legitimate +;; for the sake of shared libraries on VMS. +(define_insn "" + [(set (match_operand:SI 0 "general_operand" "=g") + (match_operand:SI 1 "" "i"))] + "CONSTANT_P (operands[1]) && ! LEGITIMATE_CONSTANT_P (operands[1])" + "* +{ + operands[2] = XEXP (XEXP (operands[1], 0), 0); + operands[1] = XEXP (XEXP (operands[1], 0), 1); + return \"movl %2,%0\;addl2 %1,%0\"; +}") + (define_insn "movsi" [(set (match_operand:SI 0 "general_operand" "=g") - (match_operand:SI 1 "general_operand" "g"))] + (match_operand:SI 1 "supergeneral_operand" "g"))] "" "* { @@ -2006,6 +2019,14 @@ (label_ref:SI (match_operand 3 "" ""))))] "" "casel %0,$0,%0") + +;; This arises from the above if both operands are the same. +(define_insn "" + [(set (pc) + (plus:SI (sign_extend:SI (mem:HI (pc))) + (label_ref:SI (match_operand 3 "" ""))))] + "" + "casel $0,$0,$0") ;;- load or push effective address ;; These come after the move and add/sub patterns